Подтвердить что ты не робот

Использование шаблонов Excel с помощью Apache POI

Основной вопрос: как загрузить шаблон Excel для использования с POI, а затем сохранить его в файл XLS?

Edit:

Ответ:

FileInputStream inputStream = new FileInputStream(new File(templateFile));
Workbook workbook = new HSSFWorkbook(inputStream);

(Просто загрузите шаблон в качестве рабочей книги, а затем напишите книгу как файл XLS в другом месте.)

4b9b3361

Ответ 1

Вы пытались загрузить его в качестве стандартного .xls с помощью POI, внеся изменения и затем сохраните его?

Это подход, который я использовал для вставки макросов в генерируемый POI.xls. Я создаю файл с макросом (по общему признанию, как .xls), а затем загружаю его в свое приложение, заполняю данными и сохраняю как недавно созданный .xls. Все работало нормально.

Ответ 2

Вы можете напрямую загрузить .xls, который будет действовать как шаблон, и изменить его.

POIFSFileSystem fs = new POIFSFileSystem(
                new FileInputStream("template.xls"));
HSSFWorkbook wb = new  HSSFWorkbook(fs, true);

Будет загружен xls, сохранив его структуру (включая макросы). Затем вы можете изменить его,

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

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

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

Надеюсь, что это поможет.

Ответ 3

Вы также можете использовать внутренний шаблон в качестве ресурса.

InputStream fis = ChartSample.class.getResourceAsStream("/templates.xls");
HSSFWorkbook wb = new HSSFWorkbook(fis);        
fis.close();
HSSFSheet sh = wb.getSheetAt(0); 
//Here you go

И сохраните это:

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

Ответ 4

Вы можете создать XLS файл из шаблона XLS.

Но для этого вам нужно создать копию шаблона каждый раз, когда вам нужно использовать шаблон. Если нет, вы отредактируете исходный шаблон (чего вы не хотите).

Итак, сначала нужно получить файл шаблона:

URL url = Thread.currentThread().getContextClassLoader().getResource("templates/template.xls");
File file = new File(url.getPath());

Скопируйте файл шаблона:

try (FileOutputStream fileOutputStream = new FileOutputStream("/home/jake/fileCopiedFromTemplate.xls")) {

    Files.copy(file.toPath(), fileOutputStream);

    Workbook workbook = new HSSFWorkbook();
    workbook.write(fileOutputStream);
}

Доступ к новому скопированному файлу:

FileInputStream inp = new FileInputStream("/home/jake/fileCopiedFromTemplate.xls");

Создайте Workbook, чтобы вы могли записать в свой новый файл:

Workbook workbook = WorkbookFactory.create(inp);

После записи в вашей книге:

try (FileOutputStream fileOut = new FileOutputStream("/home/jake/fileCopiedFromTemplate.xls")) {
    workbook.write(fileOut);
}

Совет для создания файла шаблона XLS помещает шаблон с некоторой переменной, чтобы вы локализовали позицию, которую хотите заполнить. Как:

------------------------------------
|   | Columna A     | Column B     |
------------------------------------
| 1 |  Some description            | 
------------------------------------
| 2 | {person.name} | {person.age} |
------------------------------------

Ответ 5

Для excel файлов с .xlsx используйте следующее:

FileInputStream inputStream = new FileInputStream(new File("template.xlsx"));
        @SuppressWarnings("resource")
        Workbook wb = new XSSFWorkbook(inputStream);  
        Sheet sheet = wb.getSheet("sheet1");

Ответ 6

Вы можете использовать XSSF, добавив зависимость poi-ooxml в свой maven pom.xml, если вы хотите сохранить его в формате 2007+.

Если у вас есть файл template.xlsx с итоговым листом в этом xmls, и вы хотите изменить конкретную ячейку, вы можете сделать это как:

XSSFWorkbook wb = new XSSFWorkbook(new FileInputStream("template.xlsx"));           
FileOutputStream fileOut = new FileOutputStream("new.xlsx");
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();