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

Java 通过从模板编程创建Excel报告,java,excel,apache-poi,Java,Excel,Apache Poi,我正在使用“ApachePOI”生成Excel报告。我有一个精心设计的Excel模板。我想通过将数据填充到模板的预定义位置来创建报告。也就是说,我不想关心报告的格式。可能吗?您能给我一些说明吗?您可以像其他XLS一样加载模板文件。然后对特定单元格进行更改,并将其写入另一个文件 一些示例代码: 加载文件 InputStream inputStream = new FileInputStream ("D:\\book_original.xls"); POIFSFileSyst

我正在使用“ApachePOI”生成Excel报告。我有一个精心设计的Excel模板。我想通过将数据填充到模板的预定义位置来创建报告。也就是说,我不想关心报告的格式。可能吗?您能给我一些说明吗?

您可以像其他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"); 

}

我得到了答案。我可以使用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中预定义的单元格名称。

您可以查看jXLS,我想这就是您要查找的内容

它以Excel为模板,您可以编写Java应用程序来填充数据:


您也可以看看。这是构建在ApachePOI之上的Java库。它使用XLS(X)格式的电子表格模板,并使用XML格式的数据。

Hi~我的数据不放在固定的单元格中。它们可能会移动到其他行或单元格。我只想在Excel模板中做一个标记,并将数据插入该位置。这可能吗?@Sefler:这应该是可能的,这取决于您如何识别模板中的目标行和列(即单元格)?如果知道数字,可以执行sheet1.getRow(rownum)和row1.getCell(cellnum)。根据单元格类型或单元格样式识别目标的方法是什么?这是什么。getCellsByName?
    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());