向上移动单元格 - Apache POI Get t
Shift cells upward- Apache POI Get t
我正在使用 Apache POI XSSF 从 JTable
获取列和行并创建一个 excel 文件。我试图根据名为“名称”的列的值来分隔 table,每个名称都有不同的 sheet。
我的问题是,当我尝试将它们分开时,其他 sheets 在顶部生成空白单元格,空白单元格的数量取决于它们上方的记录数量。这是我的代码:
//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);
}
}
这是 sheet 的输出。假设我的 JTable
上有 5 条记录,分别是 3 Johns 和 2 Marks:
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
。我真的尝试过寻找解决方案,但我找不到。
Excel 工作簿中每个 sheet 的行索引独立于 JTable
中的行索引。您需要为每个 sheet.
维护一个单独的索引
//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
的索引。每当向 sheet 添加一行时,都会增加 markRow
。同样对于 johnRow
.
我正在使用 Apache POI XSSF 从 JTable
获取列和行并创建一个 excel 文件。我试图根据名为“名称”的列的值来分隔 table,每个名称都有不同的 sheet。
我的问题是,当我尝试将它们分开时,其他 sheets 在顶部生成空白单元格,空白单元格的数量取决于它们上方的记录数量。这是我的代码:
//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);
}
}
这是 sheet 的输出。假设我的 JTable
上有 5 条记录,分别是 3 Johns 和 2 Marks:
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
。我真的尝试过寻找解决方案,但我找不到。
Excel 工作簿中每个 sheet 的行索引独立于 JTable
中的行索引。您需要为每个 sheet.
//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
的索引。每当向 sheet 添加一行时,都会增加 markRow
。同样对于 johnRow
.