基本的问题:如何加载Excel模板与POI使用,然后将其保存到一个XLS文件

编辑:

答案是:

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

(只是加载模板作为一个工作簿,然后写入工作簿如别处XLS文件。)

有帮助吗?

解决方案

您是否尝试过使用POI加载它作为一个标准的.xls,修改它,然后将其保存?

这是我已经用于在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");

您可以通过在你的Maven pom.xml中添加POI-OOXML的相关性,如果你想将其保存在2007+格式使用XSSF。

如果你有一个汇总表,在这个XML文件template.xlsx,你想改变你可以做到这一点作为一个特定的细胞:

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