Запишите данные Excel в конце столбца в листе Excel - PullRequest
0 голосов
/ 20 июня 2019

Я хочу добавить значение в конец столбца, но если я запустил класс, он переопределяет Excel

JAVA, Apache POI:

    // Blank workbook
    XSSFWorkbook workbook = new XSSFWorkbook();
    // Create a blank sheet
    XSSFSheet sheet = workbook.createSheet("MyPolicies");
    // Iterate over data and write to sheet
    Set<Integer> keyset = data.keySet();
    int rownum = 0;
    for (Integer key : keyset) {
        // this creates a new row in the sheet
        Row row = sheet.createRow(rownum++);
        Object[] objArr = data.get(key);
        int cellnum = 0;
        for (Object obj : objArr) {

            // this line creates a cell in the next column of that row
            Cell cell = row.createCell(cellnum++);
            if (obj instanceof String) {
                cell.setCellValue((String) obj);
            }

            else if (obj instanceof Integer)
                cell.setCellValue((Integer) obj);
        }
    }
    try {
        // this Writes the workbook
        FileOutputStream out = new FileOutputStream(new File("extract.xlsx"));
        workbook.write(out);
        out.close();
    } catch (Exception e) {
        e.printStackTrace();
    }

Excel переопределяет каждый раз, и добавляются только новые данные. Примечание. Если оба идентификатора совпадают, нам нужно добавить данные второй карты в одну строку

1 Ответ

2 голосов
/ 20 июня 2019

Причина, по которой ваш документ заменяется каждый раз, заключается в том, что ваш workbook пуст. workbook.write(out) означает, что вы записываете все в книге в какое-то место (extract.xlsx), а не записываете данные вашей книги в файл!

Что вам нужно сделать, это открыть книгу, которую вы пытаетесь редактировать:

FileInputStream xlsFile = new FileInputStream("extract.xls");
XSSFWorkbook workbook = new XSSFWorkbook(xlsFile);

... получить последний ряд или столбец

XSSFSheet sheet = workbook.getSheetAt(0);
int lastRow = sheet.getLastRowNum();

... и запишите свои данные оттуда. Затем, как и раньше, вы можете использовать workbook.write(out) для сохранения вашей рабочей книги.

...