POI操作1:将多个Excel复制到一个Excel

package com.swing.util;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;

import org.apache.poi.ss.usermodel.DateUtil;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFCellStyle;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class PoiUtil2 {
	 public class XSSFDateUtil extends DateUtil {  

	    }  
	    public static void copyCellStyle(XSSFCellStyle fromStyle, XSSFCellStyle toStyle) {
	        toStyle.cloneStyleFrom(fromStyle);//此一行代码搞定
	    }  
	    public static void mergeSheetAllRegion(XSSFSheet fromSheet, XSSFSheet toSheet) {//合并单元格
	        int num = fromSheet.getNumMergedRegions();
	        CellRangeAddress cellR = null;
	        for (int i = 0; i < num; i++) {
	            cellR = fromSheet.getMergedRegion(i);
	            toSheet.addMergedRegion(cellR);
	        }
	    } 

	    public static void copyCell(XSSFWorkbook wb,XSSFCell fromCell, XSSFCell toCell) {  
	        XSSFCellStyle newstyle=wb.createCellStyle();  
	        copyCellStyle(fromCell.getCellStyle(), newstyle);  
	        //toCell.setEncoding(fromCell.getEncoding());  
	        //样式  
	        toCell.setCellStyle(newstyle);   
	        if (fromCell.getCellComment() != null) {  
	            toCell.setCellComment(fromCell.getCellComment());  
	        }  
	        // 不同数据类型处理  
	        int fromCellType = fromCell.getCellType();  
	        toCell.setCellType(fromCellType);  
	        if (fromCellType == XSSFCell.CELL_TYPE_NUMERIC) {  
	            if (XSSFDateUtil.isCellDateFormatted(fromCell)) {  
	                    toCell.setCellValue(fromCell.getDateCellValue());  
	                } else {  
	                    toCell.setCellValue(fromCell.getNumericCellValue());  
	                }  
	            } else if (fromCellType == XSSFCell.CELL_TYPE_STRING) {  
	                toCell.setCellValue(fromCell.getRichStringCellValue());  
	            } else if (fromCellType == XSSFCell.CELL_TYPE_BLANK) {  
	                // nothing21  
	            } else if (fromCellType == XSSFCell.CELL_TYPE_BOOLEAN) {  
	                toCell.setCellValue(fromCell.getBooleanCellValue());  
	            } else if (fromCellType == XSSFCell.CELL_TYPE_ERROR) {  
	                toCell.setCellErrorValue(fromCell.getErrorCellValue());  
	            } else if (fromCellType == XSSFCell.CELL_TYPE_FORMULA) {  
	                toCell.setCellFormula(fromCell.getCellFormula());  
	            } else { // nothing29  
	            }  

	    }  

	    public static void copyRow(XSSFWorkbook wb,XSSFRow oldRow,XSSFRow toRow){
	        toRow.setHeight(oldRow.getHeight());
	        for (Iterator cellIt = oldRow.cellIterator(); cellIt.hasNext();) {  
	            XSSFCell tmpCell = (XSSFCell) cellIt.next();  
	            XSSFCell newCell = toRow.createCell(tmpCell.getColumnIndex());  
	            copyCell(wb,tmpCell, newCell);  
	        }  
	    }  
	    public static void copySheet(XSSFWorkbook wb,XSSFSheet fromSheet, XSSFSheet toSheet) {   
	        mergeSheetAllRegion(fromSheet, toSheet);     
	        //设置列宽
	        for(int i=0;i<=fromSheet.getRow(fromSheet.getFirstRowNum()).getLastCellNum();i++){ 
	            toSheet.setColumnWidth(i,fromSheet.getColumnWidth(i)); 
	        } 
	        for (Iterator rowIt = fromSheet.rowIterator(); rowIt.hasNext();) {  
	            XSSFRow oldRow = (XSSFRow) rowIt.next(); 
	            XSSFRow newRow = toSheet.createRow(oldRow.getRowNum()); 
	            copyRow(wb,oldRow,newRow);  
	        }  
	    }  
	    

	    public static void main(String[] args) {
	    	List<String> pathList = new ArrayList<String>();
	    	pathList.add("d:/swingPrint/printTemplate/" + "3容量法100_4" + ".xlsx");
//	    	pathList.add("d:/swingPrint/printTemplate/" + "48藻类计数检测原始记录_1" + ".xlsx");
	    	//将所有类型的尽调excel文件合并成一个excel文件
	    	XSSFWorkbook newExcelCreat = new XSSFWorkbook(); 
	    	try {
				
				for(int i = 0;i<pathList.size();i++) {//遍历每个源excel文件,fileNameList为源文件的名称集合
				     InputStream in = new FileInputStream(pathList.get(i));
				     XSSFWorkbook fromExcel = new XSSFWorkbook(in);
			         XSSFSheet oldSheet = fromExcel.getSheetAt(0);//模板文件Sheet1
			         XSSFSheet newSheet = newExcelCreat.createSheet("Sheet"+(i+1)+""); 
			         copySheet(newExcelCreat, oldSheet, newSheet);
				 }
			} catch (FileNotFoundException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			} catch (IOException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}
	    	
	    	
	    	 String allFileName="d:/swingPrint/tempFile/fgModelPrint.xlsx";
	    	 try {
				FileOutputStream fileOut = new FileOutputStream(allFileName);
				 newExcelCreat.write(fileOut); 
				 fileOut.flush(); 
				 fileOut.close();
				 System.out.println("复制成功");
			} catch (FileNotFoundException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
}

效果:

多张Sheet页复制没问题

Sheet 页的上角标,下角标正常

原文链接:http://www.luyixian.cn/news_show_6086.aspx

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值