2010-09-08 46 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