Создание листа Excel из шаблона на Java, новые версии Excel - PullRequest
7 голосов
/ 26 января 2012

Я нашел следующий код для создания листа Excel из существующего шаблона с форматами, добавления данных в него и сохранения его в новый файл

POIFSFileSystem fs = new POIFSFileSystem(
            new FileInputStream("template.xls"));
HSSFWorkbook wb = new  HSSFWorkbook(fs, true);
Will load an xls, preserving its structure (macros included). You can then modify it,

HSSFSheet sheet1 = wb.getSheet("Data"); ...

, а затем сохраните его.

FileOutputStream fileOut = new FileOutputStream("new.xls"); 
wb.write(fileOut);
fileOut.close();

Это работает абсолютно нормально. Но моя проблема в том, что я сейчас имею дело с новыми версиями Excel. Поэтому мне нужно разработать аналогичный код для обработки новой версии шаблона. Может кто-нибудь подсказать, как мне это сделать? Я попытался изменить HSSWorkbook на XSSFWorkbook. однако XSSFWorkbook не имеет конструктора, который позволяет мне передавать логическое значение. Также. когда я пробовал, он копирует данные, но строки с данными не сохраняют форматирование столбцов, которые есть в шаблоне.

Ответы [ 2 ]

8 голосов
/ 26 января 2012

Это должно работать нормально (хотя всегда лучше использовать последнюю версию POI для всех исправлений ошибок):

Workbook wb = new XSSFWorkbook( OPCPackage.open("template.xlsx") );
Sheet sheet = wb.getSheetAt(0);

// Make changes to the sheet
sheet.getRow(2).getCell(0).setCellValue("Changed value"); // For example

// All done
FileOutputStream fileOut = new FileOutputStream("new.xls"); 
wb.write(fileOut);
fileOut.close();

Если вы кодируете против интерфейсов, то вы можете просто переключаться между HSSF иXSSF в вашем конструкторе, и ваш код работает для обоих форматов

1 голос
/ 09 января 2017

Я использовал XSSF, и он работает нормально.

        XSSFWorkbook wb = new XSSFWorkbook(new FileInputStream("template.xlsx"));           
        FileOutputStream fileOut = new FileOutputStream("new.xlsx");
        //Sheet mySheet = wb.getSheetAt(0);
        XSSFSheet sheet1 = wb.getSheet("Summary");
        XSSFRow row = sheet1.getRow(15);
        XSSFCell cell = row.getCell(3);
        cell.setCellValue("Bharthan");

        wb.write(fileOut);
        log.info("Written xls file");
        fileOut.close();

Просто нужно добавить эту зависимость в pom.xml из maven

<dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml</artifactId>
        <version>3.8-beta4</version>
    </dependency>
...