2010-09-08 45 views
3

我使用“Apache POI”生成Excel报表。我有一个精心设计的Excel模板。我想通过将数据填充到模板的预定义位置来创建报告。也就是说,我不想关心报告的格式。那可能吗?你能给我一些指示吗?通过模板编程创建Excel报表

回答

4

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

+0

什么是_this.getCellsByName_? – 2014-03-19 23:51:42

0

您可以像加载其他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(); 
+0

嗨〜我的数据没有放在固定的单元格中。他们可能会移动到另一行或单元格。我只想在Excel模板中创建一个标记并将数据插入到该位置。那可能吗? – Sefler 2010-09-08 12:39:36

+0

@Sefler:根据你将如何识别模板中的目标行和列(即单元格)应该是可能的? 如果你知道这个数字,你可以做sheet1.getRow(rownum)和row1.getCell(cellnum)。基于说单元格类型或单元格样式来确定目标的目标是什么? – JoseK 2010-09-08 12:45:53

2

你可以看看jXLS,我想这就是你要找的。

它需要的Excel为模板,你可以写一个Java应用程序,以填补数据:

http://jxls.sourceforge.net/

0

我习惯simreport库在这个环节http://jsimreport.com/。我发现制作excel报告非常简单,快捷。

+0

链接无法正常工作 – 2017-11-25 09:24:04