POI处理Excel,获取特定单元格后,为其右侧相邻单元格赋值(Excel签署)

这篇博客记录了如何使用Apache POI库处理多Sheet页的Excel文件,特别是找到包含'编制,校对,审核,批准'内容的单元格,并在它们的右侧相邻单元格进行签署操作。开发者在MyEclipse 10环境下,利用POI-3.7等jar包实现了这一功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

刚刚接触POI,想要处理Excel的签署,网上百度了好多资料都没有直接相关的例子。

自己根据收集的资料完成了需求,记录一下。

1.开发环境

开发工具:MyEclipse 10;

jar包:POI-3.7等;

2.需求描述

通过POI处理多Sheet页的Excel,每个Excel都有一行作为签署行,每行都有单元格内容为:编制,校对,审核,批准的单元格,但是单元格位置不固定,坐标随机。

需要获取到内容为“编制,校对,审核,批准”的单元格,并在其右侧相邻的单元格进行签署(写入对应的签署人姓名);

3.代码实现

 

package com.ck.excel;
//引入必要的jar包
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Iterator;

import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class SignatureExcel {

	/**
	 * @param args
	 */
	public static String fileString = "test.xlsx";

	@SuppressWarnings("rawtypes")
	public static void main(String[] args) throws Exception{
		// TODO Auto-generated method stub
		
		try {   

			FileInputStream fs = new FileInputStream(new File(fileString));
			FileOutputStream fStream = new FileOutputStream(new File("test1.xlsx"));
			XSSFWorkbook wb = new XSSFWorkbook(fs);
			//first sheet's index is 0;
			XSSFSheet sheet;
			
			XSSFRow row;
			XSSFCell cell;
			for (Iterator witerator = wb.iterator(); witerator.hasNext();) {
				sheet = (XSSFSheet) witerator.next();
				for (Iterator rIterator = sheet.rowIterator();rIterator.hasNext();) {
					row = (XSSFRow) rIterator.next();
					for (Iterator cIterator = row.iterator(); cIterator
							.hasNext();) {
						cell = (XSSFCell) cIterator.next();
						
						if (!getCellValue(cell).equalsIgnoreCase("") && getCellValue(cell)!=null) {
							if(getCellValue(cell).equalsIgnoreCase("编制")){
								XSSFCell tCell = row.createCell(cell.getColumnIndex()+1);
								tCell.setCellValue("111");
							}else if (getCellValue(cell).equalsIgnoreCase("校对")) {
								XSSFCell tCell = row.createCell(cell.getColumnIndex()+1);
								tCell.setCellValue("222");
							}else if (getCellValue(cell).equalsIgnoreCase("审核")) {
								XSSFCell tCell = row.createCell(cell.getColumnIndex()+1);
								tCell.setCellValue("333");
							}else if (getCellValue(cell).equalsIgnoreCase("批准")) {
								XSSFCell tCell = row.createCell(cell.getColumnIndex()+1);
								tCell.setCellValue("444");
							}
						}						
					}					
				}
			}					
			wb.write(fStream);
			fs.close();
			fStream.close();
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
	// 获取单元格的值
	public static String getCellValue(XSSFCell cell) {
		String value = "";
		int cellType = 0;
		if (cell != null) {
			cellType = cell.getCellType();
			//System.out.println("XSSFCell.CELL_TYPE_STRING:"+ XSSFCell.CELL_TYPE_STRING+";cellType:"+cellType);
			if (cellType == XSSFCell.CELL_TYPE_STRING) {
				//System.out.println("IN EXCEL!!!");
				value = cell.getStringCellValue();
			}
		}		
		return value;
	}
}

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值