我使用Apache POI XSSF从JTable
中获取列和行,并创建一个excel文件。我尝试根据一个名为" name“的列的值来分隔该表,每个名称都有一个不同的工作表。
我的问题是,当我试图将它们分开时,其他工作表在顶部生成空白单元格,空白单元格的数量取决于它们上面的记录的数量。下面是我的代码:
//Create a blank sheet
XSSFSheet sheet_Mark = workbook.createSheet("Mark");
XSSFSheet sheet_John = workbook.createSheet("John");
for(int i = 0; i < jTable1.getRowCount(); i++){
Integer id_Values = (int) jTable1.getValueAt(i,0);
String name_Values = (String) jTable1.getValueAt(i, 1);
Integer age_Values = (int) jTable1.getValueAt(i,2);
if(name_Values.equals("Mark")){
XSSFRow row = sheet_Mark.createRow(i);
row.createCell(0).setCellValue(id_Values);
row.createCell(1).setCellValue(name_Values);
row.createCell(2).setCellValue(age_Values);
}
else if(name_Values.equals("John")){
XSSFRow row = sheet_John.createRow(i);
row.createCell(0).setCellValue(id_Values);
row.createCell(1).setCellValue(name_Values);
row.createCell(2).setCellValue(age_Values);
}
}
这是工作表的输出。假设我的JTable
上有5条记录,分别是3个Johns和2个Mark:
Sheet 1:
rows | ID | Name | Age
1 1111 John 23
2 2222 John 20
3 3333 John 26
Sheet 2:
rows | ID | Name | Age
1
2
3
4 4444 Mark 45
5 5555 Mark 30
我对Java还很陌生,所以请耐心听我说。如果有任何答案或解决方案,我将不胜感激。
编辑:我知道这跟这行有关:
XSSFRow row = sheet_Mark.createRow(i);
也许我可以得到Mark上面的行数,然后减去它到i
。我真的试着寻找解决方案,但我找不到任何解决方案。
发布于 2020-11-09 14:16:55
Excel工作簿中每个工作表的行索引独立于JTable
中的行索引。您需要为每个工作表维护单独的索引。
//Create a blank sheet
XSSFSheet sheet_Mark = workbook.createSheet("Mark");
XSSFSheet sheet_John = workbook.createSheet("John");
int markRow = 0;
int johnRow = 0;
for(int i = 0; i < jTable1.getRowCount(); i++){
Integer id_Values = (int) jTable1.getValueAt(i,0);
String name_Values = (String) jTable1.getValueAt(i, 1);
Integer age_Values = (int) jTable1.getValueAt(i,2);
if (name_Values.equals("Mark")) {
XSSFRow row = sheet_Mark.createRow(markRow);
row.createCell(0).setCellValue(id_Values);
row.createCell(1).setCellValue(name_Values);
row.createCell(2).setCellValue(age_Values);
markRow++;
}
else if (name_Values.equals("John")) {
XSSFRow row = sheet_John.createRow(johnRow);
row.createCell(0).setCellValue(id_Values);
row.createCell(1).setCellValue(name_Values);
row.createCell(2).setCellValue(age_Values);
johnRow++;
}
}
markRow
是sheet_Mark
的索引。无论何时向该工作表添加行,都会递增markRow
。johnRow
也是如此。
https://stackoverflow.com/questions/64752306
复制