Apache poi + Java: запись на лист без удаления существующих данных

Мне нужно проверить, существует ли рабочий лист. Если он существует, вы должны ввести следующую существующую строку и не создавать новый рабочий лист.

В настоящее время вы удаляете текущую электронную таблицу, и я всегда получаю только одну строку, записанную в электронной таблице.

Как мне решить эту проблему?

public class ApachePOIExcelWrite {
    private static final String FILE_NAME = "c:/viagem.xlsx";

    XSSFWorkbook workbook = new XSSFWorkbook();

    //name Sheet
    XSSFSheet sheet = workbook.createSheet("Viagem");

    Object[][] datatypes = {

        //head colums
        {
            "Destino",
            "Valor por pessoa",
            "Aeroporto",
            "Hotel",
            "data Pesquisa",
            "Hora Pesquisa"
        },


        {
            destino,
            pega_valor,
            aeroporto.replace("GRU", "Guarulhos").replace("CGH", "Congonhas"),
            hotel.replaceAll("Pontos", "Estrelas"),
            data_da_pesquisa.format(d),
            hora_da_pesquisa.format(d)

        }
    };

    int rowNum = 0;

    System.out.println("Creating excel");

    for (Object[] datatype: datatypes) {
        Row row = sheet.createRow(rowNum++);
        int colNum = 0;
        for (Object field: datatype) {
            Cell cell = row.createCell(colNum++);
            if (field instanceof String) {
                cell.setCellValue((String) field);
            } else if (field instanceof Integer) {
                cell.setCellValue((Integer) field);
            }
        }
    }

    try {
        FileOutputStream outputStream = new FileOutputStream(FILE_NAME);
        workbook.write(outputStream);
        workbook.close();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

}

Не могли бы вы уточнить вторую часть вопроса?

lucid 21.03.2018 02:31
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
1
869
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
/**
 * Opens an existing sheet or creates a new one if the given sheet name doesn't exist. 
 * Appends values after the last existing row.
 */
public static void main(String[] args) throws IOException {
    XSSFWorkbook workbook = new XSSFWorkbook("C:\\Users\\Administrator\\Desktop\\test.xlsx");
    Sheet sheet = workbook.getSheet("Sheet1");
    if (sheet == null)
        sheet = workbook.createSheet("Sheet1");

    Object[][] values = {{"A2", "B2", "C2"}, {"A3","B3","C3","D3"}};
    int initRow = sheet.getLastRowNum() + 1;
    int initCol = 0;
    for (int i = 0; i < values.length; i++) {
        Object[] rowValues = values[i];
        for (int j = 0; j < rowValues.length; j++) {
            Object value = rowValues[j];
            writeValueToCell(value, initRow + i, initCol + j, sheet);
        }
    }

    try {
        FileOutputStream fos = new FileOutputStream("C:\\Users\\Administrator\\Desktop\\output.xlsx");
        workbook.write(fos);
        fos.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

public static void writeValueToCell(Object value, int rowIdx, int colIdx, Sheet sheet) {
    Row row = sheet.getRow(rowIdx);
    Cell cell;
    if (row == null) {
        cell = sheet.createRow(rowIdx).createCell(colIdx);
    } else {
        cell = row.getCell(colIdx);
        if (cell == null)
            cell = row.createCell(colIdx);
    }

    if (value == null)
        cell.setCellType(Cell.CELL_TYPE_BLANK);
    else if (value instanceof String)
        cell.setCellValue(value.toString());
    else if (value instanceof Integer)
        cell.setCellValue((Integer) value);
    else if (value instanceof Double)
        cell.setCellValue((Double) value);
    else if (value instanceof Date) {
        cell.setCellValue((Date) value);
        CellStyle style = sheet.getWorkbook().createCellStyle();
        style.setDataFormat(sheet.getWorkbook().getCreationHelper().createDataFormat().getFormat(("yyyy/m/d")));
        cell.setCellStyle(style);
    } else {
        cell.setCellValue("Unknown type");
    }
}

Другие вопросы по теме