package com.connor.jd.operations; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Map.Entry; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellStyle; 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; import com.teamcenter.rac.kernel.TCComponent; public class ExcelOperation { private static final String XLS = "xls"; private static final String XLSX = "xlsx"; public static void writeExcel(File file, String outpath, Map> jfw) { if (jfw.size() == 1) { writeoneExcel(file, outpath, jfw); } else { writeallExcel(file, outpath, jfw); } } public static void writeallExcel(File file, String outpath, Map> jfw) { Workbook workbook; try { workbook = getworkbook(file); System.out.println("已有文件"); Workbook newwb = getWorkbook(outpath); Sheet newsheet = newwb.createSheet(); Sheet sheet = workbook.getSheetAt(0); CellStyle style = workbook.createCellStyle(); Row row = sheet.getRow(0); row.setRowStyle(style); Row newrow0 = newsheet.createRow(0); for (int i = 0; i < row.getLastCellNum(); i++) { // Cell newCell = newrow0.createCell(i); // newCell.setCellValue(row.getCell(i).getStringCellValue()); } List cellRangeList = getCombineCell(sheet); for (Entry> ever : jfw.entrySet()) { List itemList = ever.getValue(); String sfname = ever.getKey(); System.out.println("itemList长度" + itemList.size()); for (int i = 0; i < cellRangeList.size(); i++) { CellRangeAddress ca = cellRangeList.get(i); int firstColumn = 0; int firstRow = ca.getFirstRow(); int lastRow = ca.getLastRow(); Row fRow = sheet.getRow(firstRow); Cell fCell = fRow.getCell(firstColumn); String cellVelue = fCell.getStringCellValue(); System.out.println("合并单元格的内容" + cellVelue); System.out.println("起始行" + firstRow + "最后行" + lastRow); if (sfname.equals(cellVelue)) { for (int z = firstRow; z <= lastRow; z++) { Row newRow = sheet.getRow(z); String value = newRow.getCell(1).getStringCellValue(); System.out.println("表格内容" + value); for (int p = 0; p < itemList.size(); p++) { if (itemList.get(p).getTCProperty("object_type").getDisplayableValue().equals(value)) { TCComponent[] revlist = itemList.get(p).getTCProperty("revision_list") .getReferenceValueArray(); TCComponent component = null; for (int revlength = 0; revlength < revlist.length; revlength++) { String status = revlist[revlength].getProperty("release_status_list"); if (!status.equals("")) { component = revlist[revlength]; } } String[] info = new String[4]; if (component != null) { info[0] = component.getProperty("owning_group"); info[1] = component.getProperty("owning_user"); info[2] = component.getProperty("creation_date"); info[3] = component.getProperty("item_id"); } else { info[0] = ""; info[1] = ""; info[2] = ""; info[3] = ""; } for (int v = 0; v < info.length; v++) { Cell cellvalue = newRow.createCell(v + 2); // cellvalue.setCellValue(info[v]); System.out.println("内容是" + info[v]); } } } } } } } FileOutputStream fos = new FileOutputStream(outpath); workbook.write(fos); workbook.close(); fos.close(); } catch (Exception e) { } } public static void writeoneExcel(File file, String outpath, Map> jfw) { Workbook workbook; try { workbook = getworkbook(file); System.out.println("已有文件"); Workbook newwb = getWorkbook(outpath); Sheet newsheet = newwb.createSheet(); Sheet sheet = workbook.getSheetAt(0); CellStyle style = newwb.createCellStyle(); Row row = sheet.getRow(0); Row newrow0 = newsheet.createRow(0); for (int i = 0; i < row.getLastCellNum(); i++) { Cell oldCell = row.getCell(i); style.cloneStyleFrom(oldCell.getCellStyle()); Cell newCell = newrow0.createCell(i); newCell.setCellStyle(style); // newCell.setCellValue(oldCell.getStringCellValue()); } List cellRangeList = getCombineCell(sheet); for (Entry> ever : jfw.entrySet()) { List itemList = ever.getValue(); String sfname = ever.getKey(); System.out.println("itemList长度" + itemList.size()); for (int i = 0; i < cellRangeList.size(); i++) { CellRangeAddress ca = cellRangeList.get(i); int firstColumn = 0; int firstRow = ca.getFirstRow(); int lastRow = ca.getLastRow(); Row fRow = sheet.getRow(firstRow); Cell fCell = fRow.getCell(firstColumn); String cellVelue = fCell.getStringCellValue(); System.out.println("合并单元格的内容" + cellVelue); System.out.println("起始行" + firstRow + "最后行" + lastRow); if (sfname.equals(cellVelue)) { List valueList = new ArrayList(); for (int z = firstRow; z <= lastRow; z++) { Row oldRow = sheet.getRow(z); String value = oldRow.getCell(1).getStringCellValue(); valueList.add(value); } for (int j = 1; j <= lastRow - firstRow + 1; j++) { Row newRow = newsheet.createRow(j); Cell cell = newRow.createCell(0); // cell.setCellValue(cellVelue); Cell cell2 = newRow.createCell(1); // cell2.setCellValue(valueList.get(j - 1)); System.out.println("特殊表格内容" + valueList.get(j - 1)); for (int p = 0; p < itemList.size(); p++) { if (itemList.get(p).getTCProperty("object_type").getDisplayableValue() .equals(valueList.get(j - 1))) { System.out.println( "类型:" + itemList.get(p).getTCProperty("object_type").getDisplayableValue()); TCComponent[] revlist = itemList.get(p).getTCProperty("revision_list") .getReferenceValueArray(); TCComponent component = null; for (int revlength = 0; revlength < revlist.length; revlength++) { String status = revlist[revlength].getProperty("release_status_list"); if (!status.equals("")) { component = revlist[revlength]; } } String[] info = new String[4]; if (component != null) { info[0] = component.getProperty("owning_group"); info[1] = component.getProperty("owning_user"); info[2] = component.getProperty("creation_date"); info[3] = component.getProperty("item_id"); } else { info[0] = ""; info[1] = ""; info[2] = ""; info[3] = ""; } for (int v = 0; v < info.length; v++) { System.out.println("开始创建内容"); Cell cellvalue = newRow.createCell(v + 2); // cellvalue.setCellValue(info[v]); System.out.println("内容是" + info[v]); } } } } CellRangeAddress region = new CellRangeAddress(1, lastRow - firstRow + 1, 0, 0); newsheet.addMergedRegion(region); } } } FileOutputStream fos = new FileOutputStream(outpath); newwb.write(fos); newwb.close(); fos.close(); } catch (Exception e) { } } /** * 合并单元格处理,获取合并行 * * @param sheet * @return List */ public static List getCombineCell(Sheet sheet) { List list = new ArrayList<>(); // 获得一个 sheet 中合并单元格的数量 int sheetmergerCount = sheet.getNumMergedRegions(); // 遍历所有的合并单元格 for (int i = 0; i < sheetmergerCount; i++) { // 获得合并单元格保存进list中 CellRangeAddress ca = sheet.getMergedRegion(i); list.add(ca); } return list; } public static Workbook getWorkbook(String file) throws IOException { Workbook workbook = null; // FileInputStream in = new FileInputStream(file); if (file.endsWith(XLS)) { System.out.println("xls"); workbook = new HSSFWorkbook(); } else if (file.endsWith(XLSX)) { System.out.println("xlsx"); workbook = new XSSFWorkbook(); } else { System.out.println("格式错误"); } return workbook; } public static Workbook getworkbook(File file) throws IOException { Workbook workbook = null; FileInputStream in = new FileInputStream(file); if (file.getName().endsWith(XLS)) { System.out.println("xls"); workbook = new HSSFWorkbook(in); } else if (file.getName().endsWith(XLSX)) { System.out.println("xlsx"); workbook = new XSSFWorkbook(in); } else { System.out.println("格式错误"); } in.close(); return workbook; } }