public class CopySheetToFileTest { public static void main(String[] args) { File file = new File(CopySheetToFileTest.class.getResource("/bx.xlsx").getFile()); String sheetName = "表4 人身險公司主要財務與風險指標(月度)"; ExcelReader excelReader = ExcelUtil.getReader(file, sheetName); Sheet oldSheet = excelReader.getSheet(); excelReader.close(); File outputFile = new File("C:\\Users\\hdwang\\Desktop\\bx_test.xlsx"); ExcelWriter excelWriter = new ExcelWriter(outputFile, sheetName); Sheet newSheet = excelWriter.getSheet(); copySheet(excelWriter.getWorkbook(), newSheet, oldSheet); excelWriter.close(); } /** * 複製sheet到另一個excel文件中 * * @param newWorkbook 新文件工作簿 * @param newSheet 新文件sheet * @param oldSheet 老文件sheet */ private static void copySheet(Workbook newWorkbook, Sheet newSheet, Sheet oldSheet) { //合併單元格 int numMergedRegions = oldSheet.getNumMergedRegions(); for (int i = 0; i < numMergedRegions; i++) { CellRangeAddress mergedRegion = oldSheet.getMergedRegion(i); newSheet.addMergedRegion(mergedRegion); } //增加列寬 int physicalNumberOfCells = oldSheet.getRow(0).getPhysicalNumberOfCells(); for (int i = 0; i < physicalNumberOfCells; i++) { newSheet.setColumnWidth(i, 256 * 20); } //最大獲取行數 int maxRowSize = oldSheet.getPhysicalNumberOfRows(); for (int i = 0; i < maxRowSize; i++) { Row newRow = newSheet.createRow(i); Row oldRow = oldSheet.getRow(i); //獲取當前行,最大列數 int maxColSize = oldRow.getPhysicalNumberOfCells(); for (int j = 0; j < maxColSize; j++) { Cell newCell = newRow.createCell(j); Cell oldCell = oldRow.getCell(j); if (oldCell == null) { continue; } CellType cellType = oldCell.getCellType(); switch (cellType) { case NUMERIC: newCell.setCellValue(oldCell.getNumericCellValue()); break; case STRING: newCell.setCellValue(oldCell.getStringCellValue()); break; case BLANK: break; case ERROR: newCell.setCellValue(oldCell.getErrorCellValue()); break; case BOOLEAN: newCell.setCellValue(oldCell.getBooleanCellValue()); break; case FORMULA: newCell.setCellFormula(oldCell.getCellFormula()); break; } //直接copy原cell的樣式,定義在遍歷行的地方,定義在外面可能出現樣式渲染錯誤 CellStyle cellStyle = newWorkbook.createCellStyle(); cellStyle.cloneStyleFrom(oldCell.getCellStyle()); newCell.setCellStyle(cellStyle); } } } }