通过编程从模板创建Excel报告。

5
我正在使用“Apache POI”生成Excel报告。我有一个设计良好的Excel模板。我想通过将数据填充到模板的预定义位置来创建报告。也就是说,我不想关心报告的格式。这是否可能?您能给我一些指导吗?
4个回答

5

我找到了答案。我可以使用Microsoft Excel中的“单元格命名”实用程序,然后使用以下代码定位单元格并执行操作。

    CellReference[] crefs = this.getCellsByName(wb, cName);

    // Locate the cell position
    Sheet sheet = wb.getSheet(crefs[0].getSheetName());
    Row row = sheet.getRow(crefs[0].getRow());
    Cell cell = row.getCell(crefs[0].getCol());

    // Write in data
    cell.setCellValue(cellRegion.getContent());

"

"cName"是Microsoft Excel中预定义的单元格名称。

"

这个 this.getCellsByName 是什么? - Rodmar Conde

3
你可以看看jXLS,我认为那是你要找的东西。它以Excel为模板,你可以编写Java应用程序来填充数据:

http://jxls.sourceforge.net/


1

您可以像加载其他XLS文件一样加载模板文件。然后对特定单元格进行所需更改,并将其写入另一个文件。

以下是一些示例代码:

加载文件

InputStream inputStream = new FileInputStream ("D:\\book_original.xls");
            POIFSFileSystem fileSystem = new POIFSFileSystem (inputStream);

            HSSFWorkbook      workBook = new HSSFWorkbook (fileSystem);

做一些事情

HSSFSheet         sheet1    = workBook.getSheetAt (0);
            Iterator<Row> rows     = sheet1.rowIterator ();

while (rows.hasNext ())
{
Row row = rows.next ();

// do stuff
if (row.getCell(0).getCellType() == HSSFCell.CELL_TYPE_NUMERIC)
    System.out.println ("Row No.: " + row.getRowNum ()+ " " + row.getCell(0).getNumericCellValue());
HSSFCell cell = row.createCell(0);
cell.setCellValue("100"); 

}

将输出写入文件

 FileOutputStream fileOut1 = new FileOutputStream("D:\\book_modified.xls");
            workBook.write(fileOut1);
            fileOut1.close();

1
嗨~我的数据没有放在固定的单元格中。它们可能会移动到其他行或单元格。我只想在Excel模板中做一个标记,并将数据插入到该位置。这可行吗? - Sefler
@Sefler:根据模板中您如何识别目标行和列(即单元格),应该是可行的。如果您知道编号,可以使用sheet1.getRow(rownum)和row1.getCell(cellnum)。您打算通过单元格类型或单元格样式来确定目标吗? - JoseK

0

您也可以看一下Xylophone。这是一个基于Apache POI构建的Java库。它使用XLS(X)格式的电子表格模板,并以XML格式消耗数据。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接