资源简介
利用POI进行多张Excel表的合并。附源代码。
代码片段和文件信息
package class_demo;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellstyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.Region;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
public class Excel_Sheet {
/*
* 示例,在d盘放两个示例Excel文件(单个Sheet)。
* 生成后会在D盘产生一个合并好Sheet的Excel文件。exlsample_2.xls
*/
public static void main(String[] args) {
try {
POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream(“d:\\exlsample.xls“));
POIFSFileSystem fs_1 = new POIFSFileSystem(new FileInputStream(“d:\\exlsample_1.xls“));
HSSFWorkbook wb = new HSSFWorkbook(fs);
HSSFWorkbook wb_1 = new HSSFWorkbook(fs_1);
HSSFWorkbook wbt = new HSSFWorkbook();
// source target 为源sheet 页和目标sheet页
wbt = copyRows(wbwbt);
wbt = copyRows(wb_1wbt);
FileOutputStream fileOut = new FileOutputStream(“d:\\exlsample_2.xls“);
wbt.write(fileOut);
fileOut.flush();
fileOut.close();
System.out.println(“生成完成!“);
} catch (Exception e) {
e.printStackTrace();
}
}
/*
* 对SHeet进行复制,将源Excle保存到目标Excle中
*/
public static HSSFWorkbook copyRows(HSSFWorkbook wb HSSFWorkbook pTargetWb ) {
int pStartRow = 0; //开始行
int pEndRow =0; //结束行
int pPosition = 0; //位置
String pSourceSheetName=““;
String pTargetSheetName =““;
HSSFRow sourceRow = null;
HSSFRow targetRow = null;
HSSFCell sourceCell = null;
HSSFCell targetCell = null;
HSSFSheet sourceSheet = null;
HSSFSheet targetSheet = null;
Region region = null;
int cType;
int i;
short j;
int targetRowFrom;
int targetRowTo;
if ((pStartRow == -1) || (pEndRow == -1)) {
return null;
}
pSourceSheetName = wb.getSheetName(0);
pTargetSheetName = pSourceSheetName;
int pTargetSheetNumber = pTargetWb.getNumberOfSheets()+1;
if(pTargetWb.getSheet(pTargetSheetName) !=null){
pTargetSheetName = pTargetSheetName+pTargetSheetNumber;
}
pTargetWb.createSheet(pTargetSheetName);
sourceSheet = wb.getSheet(pSourceSheetName);
targetSheet = pTargetWb.getSheet(pTargetSheetName);
pEndRow = sourceSheet.getPhysicalNumberOfRows();
// 拷贝合并的单元格
for (i = 0; i < sourceSheet.getNumMergedRegions(); i++) {
region = sourceSheet.getMergedRegionAt(i);
if ((region.getRowFrom() >= pStartRow)
&& (region.getRowTo() <= pEndRow)) {
targetRowFrom = region.getRowFrom() - pStartRow + pPosition;
targetRowTo = region.getRowTo() - pStartRow + pPosition;
region.setRowFrom(targetRowFrom);
region.setRowTo(targetRowTo);
targetSheet.addMergedRegion(region);
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 379 2012-03-31 09:53 POI_Excel_Sheet\Java_Demo\.classpath
文件 784 2012-03-31 10:24 POI_Excel_Sheet\Java_Demo\.myeclipse\profiler\Excel_Sheet.xm
文件 385 2012-03-31 09:13 POI_Excel_Sheet\Java_Demo\.project
文件 629 2012-03-31 09:14 POI_Excel_Sheet\Java_Demo\.settings\org.eclipse.jdt.core.prefs
文件 9299 2012-03-31 11:43 POI_Excel_Sheet\Java_Demo\bin\class_demo\Excel_Sheet.class
文件 8491 2012-03-31 11:43 POI_Excel_Sheet\Java_Demo\src\class_demo\Excel_Sheet.java
文件 1675036 2011-08-22 11:25 POI_Excel_Sheet\poi-3.7-20101029.jar
文件 16151 2012-03-31 15:24 POI_Excel_Sheet\POI_Excel_Sheet.docx
目录 0 2012-03-31 15:25 POI_Excel_Sheet\Java_Demo\.myeclipse\profiler
目录 0 2012-03-31 15:25 POI_Excel_Sheet\Java_Demo\bin\class_demo
目录 0 2012-03-31 15:25 POI_Excel_Sheet\Java_Demo\src\class_demo
目录 0 2012-03-31 15:25 POI_Excel_Sheet\Java_Demo\.myeclipse
目录 0 2012-03-31 15:25 POI_Excel_Sheet\Java_Demo\.settings
目录 0 2012-03-31 15:25 POI_Excel_Sheet\Java_Demo\bin
目录 0 2012-03-31 15:25 POI_Excel_Sheet\Java_Demo\src
目录 0 2012-03-31 15:25 POI_Excel_Sheet\Java_Demo
目录 0 2012-03-31 15:25 POI_Excel_Sheet
----------- --------- ---------- ----- ----
1711154 17
评论
共有 条评论