Вопрос

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

Редактировать:

Ответ таков:

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

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

Это было полезно?

Решение

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

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

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

Вы можете напрямую загрузить файл .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();

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

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

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();

Вы можете создать 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} |
------------------------------------

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

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

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

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

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();
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top