[英]How to split excel into multiple excels using apache poi?
I have the follwing table in the excel spreadsheet 我在excel电子表格中有以下表格
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
I need to split this spreadsheet into three different shpreadsheets using FileOutputStream
. 我需要使用
FileOutputStream
将电子表格拆分为三个不同的shpreadsheets。 The first should contain all entries for manager puk
, second ser
. 第一个应该包含经理
puk
所有条目,第二个是ser
。 . 。 .
。
I cannot come up with a good logic to split it . 我无法提出一个很好的逻辑来拆分它。 Should I create a temporary copy of the original spread sheet and then remove all extra rows and save it ?
我应该创建原始电子表格的临时副本,然后删除所有多余的行并保存吗? Than how can I remove the rows ?
比我如何删除行?
(This could have been done easily with CSVReader , but I need to preserve the formatting ) (使用CSVReader可以轻松完成此操作,但我需要保留格式)
here is the entire program on how to do what you're asking, I have tested it out and it works perfectly :) tell me what you think: 这是有关如何执行您所要求的内容的整个程序,我已经对其进行了测试,它可以完美运行:)告诉我您的想法:
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);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.