java - 使用 Poi 附加数据而不覆盖 header

标签 java excel apache-poi

我有下面的代码,我想将数据附加到 .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();

}

最佳答案

mySheet.getLastRowNum() 的调用返回工作表最后一行的索引。在您从仅包含标题的现有 Excel 文件中读取的情况下,标题行本身就是标题行本身。

因此,对 mySheet.createRow(mySheet.getLastRowNum()) 的下一次调用完全按照您所描述的操作:在标题行的位置创建一个新行,并用新数据覆盖它。

您已经知道如何使用sheet.createRow();因此,只需从索引 1 开始创建行并向其写入数据即可。第 0 行是标题行。

关于java - 使用 Poi 附加数据而不覆盖 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40111239/

相关文章:

java - 使用java将多个arrayList中的数据导出到单个excel表

java - 使用 POI Java 提取 Word 文档表格单元格中的内容

Java ArrayList之ArrayList Scanner UserInput

java - 将数据从子 Activity 发送到主要 Activity

满足条件的 Excel VBA 停止代码

java - Apache POI Servlet 表已存在

java - WebViewClient.shouldOverrideUrlLoading 中的 FragmentTransaction 抛出 IllegalStateException

Java Servlet/Jsp 图像上传以及表单值

vba - 创建通用 Checkbox_Click VBA 代码

excel - 使用 R 将 Excel 电子表格保存为 .csv?