如何将excel分成多个使用apache poi的excel?

我有excel电子表格中的follwing表

manager salary puk 2 puk 3 puk 4 puk 5 ser 3 ser 4 ser 5 sos 23 sos 24 sos 25 sos 26 sos 27 

我需要使用FileOutputStream将此电子表格分成三个不同的电子表格。 第一个应该包含经理puk ,第二个ser所有条目。 。 。

我不能拿出一个好的逻辑来分割它。 我应该创build原始电子表格的临时副本,然后删除所有多余的行并保存它? 比如何删除行?

(这可以用CSVReader轻松完成,但我需要保留格式)

这里是关于如何做你所问的整个程序,我已经testing出来,它完美的作品:)告诉我你的想法:

 package additives; import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.*; import java.util.*; import org.apache.poi.openxml4j.exceptions.InvalidFormatException; import java.io.*; public class StackOverflow { public static Workbook readWorkbook(){ Workbook wb=null; try { wb = WorkbookFactory.create(new File("stackOverflow.xlsx")); } catch (InvalidFormatException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return wb; } public static void writeToSheet(List<String> name, List<Double> salary, int sheetCounter, List<Sheet> outputSheets){ for(int i=0;i<salary.size();i++){ Row row=outputSheets.get(sheetCounter).createRow(i); Cell nameCell=row.createCell(0); nameCell.setCellValue(name.get(i)); Cell salaryCell=row.createCell(1); salaryCell.setCellValue(salary.get(i)); } } public static void writeToWorkbook(Workbook wb){ try{ FileOutputStream out=new FileOutputStream("new StackOverflow.xlsx"); wb.write(out); out.close(); } catch(Exception e){ e.printStackTrace(); } } public static void main(String[] args){ Workbook inputWb=readWorkbook(); Sheet inputWs=inputWb.getSheet("sheet1"); List<String> name=new ArrayList<>(); List<Double> salary=new ArrayList<>(); Workbook outputWb=new XSSFWorkbook(); List<Sheet> outputSheets=new ArrayList<>(); int rowIndex=inputWs.getLastRowNum()+1; int sheetCounter=0; for(int i=1; i<rowIndex-1; i++){ Row outerRow=inputWs.getRow(i); Row innerRow=null; Cell outerCell=outerRow.getCell(0); Cell innerCell=null; int j=0; for(j=i+1;j<rowIndex;j++){ innerRow=inputWs.getRow(j); innerCell=innerRow.getCell(0); if(outerCell.getStringCellValue().equals(innerCell.getStringCellValue())){ name.add(innerRow.getCell(0).getStringCellValue()); salary.add(innerRow.getCell(1).getNumericCellValue()); } if(!outerCell.getStringCellValue().equals(innerCell.getStringCellValue())){ break; } } name.add(outerRow.getCell(0).getStringCellValue()); salary.add(outerRow.getCell(1).getNumericCellValue()); i=j; outputSheets.add(outputWb.createSheet("sheet"+sheetCounter)); writeToSheet(name,salary,sheetCounter, outputSheets); sheetCounter++; name.clear(); salary.clear(); Row tempRow=inputWs.getRow(i); try{ name.add(tempRow.getCell(0).getStringCellValue()); salary.add(tempRow.getCell(1).getNumericCellValue()); }catch(Exception e){ continue; } } writeToWorkbook(outputWb); } }