我想填写表格模板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();
答案 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
时存在错误。在那里,移动后,单元格中的引用保持旧状态,而不是被调整为新的行。例如,引用XSSF
,A5
,...在向下移动后仍然保留,而不是调整为A6
,A6
,...
因此必须更正此错误:
A7