我有下面的代码,我想在.xlsx文件中附加数据,但新输入只是写了我现有文件中已有的标题行。我知道XSSFRow存在问题,因为我不知道如何定义我想要写入新输入的位置。
有人可以指导我或帮我确定如何解决问题吗?非常感谢。
亲切的问候,
尼科斯。
public static String path = "File Path";
public static String excelFile = "workbook.xlsx";
public static XSSFWorkbook myWorkBook;
public static XSSFSheet mySheet;
public static XSSFRow myRow;
public static void appendValues() throws Exception {
System.out.println("Appending values");
File testFile = new File(path + excelFile);
FileInputStream fis = new FileInputStream(testFile);
// Finds the workbook instance for XLSX file
myWorkBook = new XSSFWorkbook(fis);
// Return first sheet from the XLSX workbook
mySheet = myWorkBook.getSheetAt(0);
myRow = mySheet.createRow(mySheet.getLastRowNum());
System.out.println("Row: " + (myRow));
Map<String,String> appendData=new HashMap<>();
appendData.put("Defect Reference", "Defect ref");
appendData.put("Defect ID", "ID");
appendData.put("Fielda", "field");
String[] headerArray = getHeaders().toArray(new String[0]);
for(int i=0;i<headerArray.length;i++) {
String val=appendData.get(headerArray[i]);
if(val!=null)
{
Cell cell = myRow.createCell(i);
cell.setCellType(Cell.CELL_TYPE_STRING);
cell.setCellValue(val);
System.out.println("insert Value: " + val);
}
else
{
Cell cell = myRow.createCell(i);
cell.setCellType(Cell.CELL_TYPE_STRING);
cell.setCellValue("");
}
}
FileOutputStream fos = new FileOutputStream(path + excelFile);
myWorkBook.write(fos);
fos.close();
}
答案 0 :(得分:2)
对mySheet.createRow(mySheet.getLastRowNum())
的调用将返回工作表最后一行的索引。在您从仅包含标题的现有Excel文件中读取的情况下,标题行本身就是这样。
因此,对date = a.dateOne;
的下一次调用完全符合您的描述:在标题行的位置创建一个新行,用新数据覆盖它。
您已经知道如何使用sheet.createRow();所以只需从索引1开始创建行并向其写入数据。第0行是标题行。