Java Apache POI Excel ShiftRows方法问题

时间:2019-05-04 07:17:48

标签: java apache apache-poi

我想填写表格模板excel文件。我要插入行并填充它们。
我使用Java Apache POI库访问excel文件。
首先,我创建了一个新文件,并在第1行至第10行的A列中填充了1..10数字并保存了文件。
然后我读取了文件,并尝试使用sheet.shiftRows方法插入单个空行。 我尝试了下面的代码,但是输出文件的开头(读取)有问题,第5,6,7行为空,并且未发生移动。
或者,是否有其他方法可以执行相同操作(插入行)?
感谢您的任何建议。

            InputStream inputStream = new FileInputStream("TestIn-1.xlsx");
            Workbook workbookIn = new XSSFWorkbook(inputStream);
            Sheet sheetIn = workbookIn.getSheet("Sheet1");

            sheetIn.shiftRows(4,5,1);

            OutputStream outputStream = new FileOutputStream("TestOut.xlsx");
            workbookIn.write(outputStream);
            outputStream.close();

1 个答案:

答案 0 :(得分:2)

您的shiftRows尝试在第5行(索引4)和第6行(索引5)之间向下移动一行。但是第7、8、9和10行呢?如果需要获取新的空行5,则需要在第5行和最后一行之间向下移动一行。

使用apache poi版本3.17就像这样简单:

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.*;

import java.io.FileInputStream;
import java.io.FileOutputStream;

class ExcelReadShiftRowsAndWrite {

 public static void main(String[] args) throws Exception {
  //String fileIn= "TestIn.xls";
  //String fileOut= "TestOut.xls";
  String fileIn= "TestIn.xlsx";
  String fileOut= "TestOut.xlsx";

  try (Workbook workbook = WorkbookFactory.create(new FileInputStream(fileIn));
       FileOutputStream out = new FileOutputStream(fileOut)) {

   Sheet sheet = workbook.getSheet("Sheet1");

   sheet.shiftRows(4, sheet.getLastRowNum(), 1); //shifts rows between row 5 (index 4) and last row one row down

   workbook.write(out);
  } 
 }
}

但是大于apache poi的{​​{1}}版本(也是3.17)在4.1.0中使用shiftRows时存在错误。在那里,移动后,单元格中的引用保持旧状态,而不是被调整为新的行。例如,引用XSSFA5,...在向下移动后仍然保留,而不是调整为A6A6,...

因此必须更正此错误:

A7