2015-07-21 61 views
0

PersonDAO.java:如何導出JDBC模板結果Excel工作表

public List<Map<String, Object>> searchPersons(Person person) 
    String sql = "SELECT * FROM PERSON"; 
    List<Map<String, Object>> result = jdbcTemplate.queryForList(sql); 
    return result; 
} 

如何將數據轉換在result下載爲Excel工作表。

試圖用Apache POI:

Workbook workbook = new HSSFWorkbook(); 
Sheet sheet = workbook.createSheet("Person Detail"); 

Object[][] persons = { 
    {"PersonNAmeA", 1001}, 
    {"PersonNAmeB", 1002}, 
    {"PersonNAmeC", 1003}, 
}; 

int rowCount = 0; 

for (Object[] person : persona) { 
Row row = sheet.createRow(++rowCount); 

int columnCount = 0; 

for (Object field : person) { 
    Cell cell = row.createCell(++columnCount); 
    if (field instanceof String) { 
     cell.setCellValue((String) field); 
    } else if (field instanceof Integer) { 
     cell.setCellValue((Integer) field); 
    } 
} 

} 


try (FileOutputStream outputStream = new FileOutputStream("PersonDetail.xlsx")) { 
workbook.write(outputStream); 
} catch (FileNotFoundException e) { 
// TODO Auto-generated catch block 
e.printStackTrace(); 
} catch (IOException e) { 
// TODO Auto-generated catch block 
e.printStackTrace(); 
} 

沒有錯誤,但PersonDetail.xlsx尚未創建。代碼中可能有什麼錯誤。

任何人都可以幫助解決這個問題。 謝謝

+0

如何將結果集寫入平面文件例如CSV文件?沒有需要的API。 Excel有能力將文本轉換爲列 – jmcg

+0

@jmcg。感謝您的建議。我沒有試過,但只是寫入一個CSV文件將打開Excel文件呢? –

+1

是啊Excel可以打開一個csv文件。然後您可以使用excel的文本列功能將每個數據排列到相應的列中。看看這個鏈接http://superuser.com/questions/407082/easiest-way-to-open-csv-with-commas-in-excel – jmcg

回答

2

您可以使用Apache POIJexcelAPI。後者是更輕量級的解決方案。這是一個很好的tutorial如何生成一個Excel表。

你甚至可以生成HTML表格,並用HTTP頭爲它服務:

Content-Type: application/msexcel 
Content-Disposition: attachment; filename=NAMEOFWORKSHEET.xls 

然後打開,瀏覽器會提示保存頁面爲Excel文檔。

How to format data in html

如果你不需要格式化你的數據寫入考慮到普通的CSV流。

+0

謝謝康斯坦丁帕夫洛夫。這是否爲用戶創建了一個視圖?我有一個導出按鈕(用戶從用戶界面中的表中選擇多行)可以獲取用戶選擇的數據的更多信息(包含個人信息),並且必須以excel的形式導出和下載。同時,我嘗試了Apache poi,編輯了quesstion ... –

+0

不,它沒有。您需要創建一個控制器,並可以選擇創建一個視圖。您應該從控制器調用一個服務/ DAO並在控制器中創建一個簡單的html表或委託它進行查看。 –

+0

謝謝。我可以要求最新版本的JexcelAPI maven dependency。 –