我在两天内陷入了这个问题并没有取得任何突破。我将Java 8和Apache POI用于所有与excel相关的工作。 基本上,该过程如下图所示:
我想“编辑或追加”现有工作表的值,而不是覆盖它。考虑到上图有4个阶段,我使用的一些代码是:
第二阶段(B):将文件从file_x.xlsx
写入file_a.xlsx
:
try{
public FileOutputStream out = new FileOutputStream(new File("c://file_path_file_a.xlsx"));
public XSSFWorkbook newWorkbook = new XSSFWorkbook();
public XSSFSheet sheet = newWorkbook.createSheet("vertical");
for(String key : map_data.keySet()){
List<String> values = map_data.get(key);
// for values in each key, store it in sheet
for (String value:values){
// make instance of new row that will print data
// simultaneously in two columns
Row newRow = sheet.createRow(row);
newRow.createCell(0).setCellValue(key); // 1st column
newRow.createCell(6).setCellValue(value); // 6th column
row++;
}
}
// write the contents of workbook into the excel file
newWorkbook.write(out);
// close all the respective files and workbooks
out.close();
newWorkbook.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
此阶段正确完成工作,我在file_a.xlsx中得到了我想要的输出。
现在是我失败的棘手部分。图中的第4阶段显示它想要从file_y.xlsx
读取数据并将值附加到现有file_a.xlsx
。
它不想覆盖任何内容,只想在现有的excel文件中再添加一列。但我无法对此进行编码,因为在这里和下面给出的代码失败时无法想到任何好的解决方案。
第4阶段(D):将文件从file_y.xlsx
写入file_a.xlsx
:
try {
public FileOutputStream output_excel_file = new FileOutputStream(new File("c://file_path_file_a.xlsx"));
public XSSFWorkbook workbook = new XSSFWorkbook();
public XSSFSheet sheet = workbook.getSheet("vertical");
for (int i=0; i<qvm_1st_col.size(); i++) {
if (error_text.contains(1st_col.get(i))) {
int index = error_text.indexOf(1st_col.get(i));
String value = dsps.get(index);
Row row = sheet.createRow(i);
row.createCell(12).setCellValue(value); // append values to 12th column
}
} // for loop
output_excel_file.close();
workbook.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
因此D阶段的代码失败,算法就停在那里。
我尝试了什么:
除了上面的代码之外,我试图阅读堆栈溢出中提到的同一问题的多个答案,但我无法理解它将如何解决我的问题因为我将编写输出excel文件2次或者可能是将来会更多。此外,一切都应该在一次执行中发生。因此,在class 1
完成工作后,class 2
将开始,依此类推。
我必须阅读以前的数据并从其他参考文件中追加更多数据。我觉得有点迷失在这一点上。
感谢您的时间。
P.S:
我还在阶段B和阶段C之间的某处读取输出文件,以获得arraylist
中的一些值。我只是存储输出excel文件中的一些主要生成键。