私はapache poiを使用して.xlsxファイルを処理しています。apache poisを使用してExcelの一部のレコードを追加
私は、彼らが同じ構造を持って2つの.xlsxファイル、 part.xlsx,and full.xlsx
、
を持っています。
各レコード(poiのRowオブジェクト)には、3つのcolmn:name、age、locationがあります。
part.xlsxにはほぼ5000行、full.xlsxには40000行あります。
ここで、part.xlsxの値と同じ値を持つfull.xlsxの行を追加します。例えば
:
part.xlsx:
Name age location
kk 23 USA
bb 24 England
......
full.xlsx
Name age location
kk 23 USA
bb 24 England
xx 25 USA
......
今、私は余分な 'KK' と 'B-B' 列と保存したいですそれらを新しいファイルに追加します。
これは、コードのコードです:
List<User> usersInpart=new ArrayList<User>();
List<Row> rows_to_be_saved=new ArrayList<Row>();
//read the part.xlsx and save them.
FileInputStream fis_part=new FileInputStream("part.xlsx");
WorkBook wb_part=WorkbookFactory.create(fis_part);
Sheet st_part=wb_part.getSheetAt(0);
for(Row row : st_part){
if(row.getRowNum()==0) continue; //skip the first row(the title)
User u=new User();
u.setName(row.getCell(0).getRichStringValue().getString().trim());
u.setAge(row.getCell(1).getNumericCellValue());
u.setLocation(row.getCell(2).getRichStringValue().getString().trim());
usersInpart.add(u);
}
fis_part.close();
//read the full.xlsx
FileInputStream fis_full=new FileInputStream("full.xlsx");
WorkBook wb_full=WorkbookFactory.create(fis_full);
Sheet st_full=wb_full.getSheetAt(0);
for(Row row : st_full){
if(row.getRowNum()==0) continue; //skip the first row(the title)
String name=row.getCell(0).getRichStringValue().getString().trim();
double age=row.getCell(1).getNumericCellValue();
String location=row.getCell(2).getRichStringValue().getString().trim();
for(User u : usersInpart){
if(u.getName.equals(name) && u.getAge==age && u.getLocation().equals(location))
rows_to_be_saved.add(row);
}
}
fis_full.close();
//write the selected rows to file
WorkBook wb_res=WorkbookFactory.create(fis_full);
Sheet st_res=wb_res.createSheet(0);
int i=0;
for (Row row : rows_to_be_saved) {
Row rw=st_res.createRow(i);
int k=0;
for (Cell cell : row) {
switch (cell.getCellType()) {
case Cell.CELL_TYPE_STRING:
rw.createCell(k).setCellValue(cell.getRichStringCellValue().getString());
break;
case Cell.CELL_TYPE_NUMERIC:
if (DateUtil.isCellDateFormatted(cell)) {
rw.createCell(k).setCellValue(cell.getDateCellValue());
} else {
rw.createCell(k).setCellValue(cell.getNumericCellValue());
}
break;
case Cell.CELL_TYPE_BOOLEAN:
rw.createCell(k).setCellValue(cell.getBooleanCellValue());
break;
case Cell.CELL_TYPE_FORMULA:
rw.createCell(k).setCellValue(cell.getCellFormula());
break;
default:
}
k++;
}
i++;
}
//save the wb_res
wb_res.write(new FileOutputStrem("xx.xlsx"));
は、今私は、ファイルを保存するために何か良いアイデアをだろうか?
「rows_to_be_saved」に選択した行が保存されています。
新しいシート「st_res」を作成します。これらの行を「st_res」に直接保存する方法はありますか?以来、私は "rows_to_be_saved"の行に基づいて各行を作成しています。
したがって、2つの行リストがあります。私はこれが記憶の浪費だと思う。
提案がありますか?