首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >向上移动单元格- Apache POI Get t

向上移动单元格- Apache POI Get t
EN

Stack Overflow用户
提问于 2020-11-09 13:08:44
回答 1查看 87关注 0票数 0

我使用Apache POI XSSF从JTable中获取列和行,并创建一个excel文件。我尝试根据一个名为" name“的列的值来分隔该表,每个名称都有一个不同的工作表。

我的问题是,当我试图将它们分开时,其他工作表在顶部生成空白单元格,空白单元格的数量取决于它们上面的记录的数量。下面是我的代码:

代码语言:javascript
运行
AI代码解释
复制
//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:

代码语言:javascript
运行
AI代码解释
复制
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还很陌生,所以请耐心听我说。如果有任何答案或解决方案,我将不胜感激。

编辑:我知道这跟这行有关:

代码语言:javascript
运行
AI代码解释
复制
XSSFRow row = sheet_Mark.createRow(i);

也许我可以得到Mark上面的行数,然后减去它到i。我真的试着寻找解决方案,但我找不到任何解决方案。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-09 14:16:55

Excel工作簿中每个工作表的行索引独立于JTable中的行索引。您需要为每个工作表维护单独的索引。

代码语言:javascript
运行
AI代码解释
复制
//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++;
    }
}

markRowsheet_Mark的索引。无论何时向该工作表添加行,都会递增markRowjohnRow也是如此。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64752306

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档