• POI解析读写EXCEL,复制SHEET,兼容EXCEL93-2003,2007


    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    import org.apache.poi.ss.usermodel.Cell;
    import org.apache.poi.ss.usermodel.Row;
    import org.apache.poi.ss.usermodel.Sheet;
    import org.apache.poi.ss.usermodel.Workbook;
    import org.apache.poi.ss.util.CellRangeAddress;
    import org.apache.poi.xssf.usermodel.XSSFWorkbook;
    
    public class ExcelTest {
    	
    	private static final String EXL_2003 = "C:\Users\Administrator\Desktop\sale2003.xls";
    	private static final String EXL_2007 = "C:\Users\Administrator\Desktop\sale2007.xlsx";
    	
    	public static void main(String[] args){
    		try {
    			test(EXL_2003);
    			test(EXL_2007);
    		} catch (Exception e) {
    			System.out.println("请检查EXCEL文件及格式!!");
    		}
    	}
    
    	private static void test(String file) throws Exception  {
    		Workbook wb = null;
    		if (file.endsWith(".xlsx")) {//EXCEL2007
    			wb = new XSSFWorkbook(new FileInputStream(new File(file)));
    		}else if(file.endsWith(".xls")){//EXCEL97-2003
    			wb = new HSSFWorkbook(new FileInputStream(new File(file)));
    		}else{
    			throw new Exception("");
    		}
    		
    		if(wb.getNumberOfSheets() > 1){
    			wb.removeSheetAt(1);
    		}
    		
    		//单元格合并
    		CellRangeAddress region = null;
    		Sheet sheet1 = wb.getSheetAt(0);
    		Sheet sheet2 = wb.createSheet(sheet1.getSheetName() + "_副本");
    		for (int i = 0; i < sheet1.getNumMergedRegions(); i++) {
    			region = sheet1.getMergedRegion(i);
    			if ((region.getFirstColumn() >= sheet1.getFirstRowNum())
    					&& (region.getLastRow() <= sheet1.getLastRowNum())) {
    				sheet2.addMergedRegion(region);
    			}
    		}
    
    		//复制内容
    		Row rowFrom = null;
    		Row rowTo = null;
    		Cell cellFrom = null;
    		Cell cellTo = null;
    		for (int i = sheet1.getFirstRowNum(); i < sheet1.getLastRowNum(); i++) {
    			rowFrom = sheet1.getRow(i);
    			if (null == rowFrom){
    				continue;
    			}
    			
    			rowTo = sheet2.createRow(i);
    			rowTo.setHeight(rowFrom.getHeight());
    			for (int j = 0; j < rowFrom.getLastCellNum(); j++) {
    				sheet2.setColumnWidth(j, sheet1.getColumnWidth(j));
    				if(null != sheet1.getColumnStyle(j)){
    					sheet2.setDefaultColumnStyle(j, sheet1.getColumnStyle(j));
    				}
    				
    				cellFrom = rowFrom.getCell(j);
    				if (null == cellFrom){
    					continue;
    				}
    				
    				cellTo = rowTo.createCell(j);
    				cellTo.setCellStyle(cellFrom.getCellStyle());
    				cellTo.setCellType(cellFrom.getCellType());
    				
    				if(Cell.CELL_TYPE_STRING == cellFrom.getCellType()){
    					cellTo.setCellValue(cellFrom.getStringCellValue());
    				}else if(Cell.CELL_TYPE_NUMERIC == cellFrom.getCellType()){
    					cellTo.setCellValue(cellFrom.getNumericCellValue());
    				}
    			}
    		}
    
    		sheet2.setDisplayGridlines(true);//
    		FileOutputStream fileOut = new FileOutputStream(file);
    		wb.write(fileOut); 
            fileOut.close(); 
            
            System.out.println(file + " 复制sheet成功!");
    	}
    
    }
    

    本人没装EXCEL2007以上版本,不知是否向上兼容

  • 相关阅读:
    Hibernate查询基本语句 全新时代
    word表格设置背景色方法 全新时代
    Html网页背景渐变色代码 全新时代
    FlashFXP列表参数错误解决方法 全新时代
    svn导出功能不包含.svn文件 全新时代
    JDBC连接SQL Server测试代码及异常 全新时代
    javascript:滚动新闻
    C# 时间函数(几个常用时间,程序运行计时,页面运行计时)
    C#:当把U盘放插入,然后程序自动将U盘的内容复制到本地硬盘
    C#:转换成中文数字
  • 原文地址:https://www.cnblogs.com/java-stack/p/11952668.html
Copyright © 2020-2023  润新知