JAVA處理Excel檔案---生成簡單的Excel檔案
在現實的辦公中,我們常常會有這樣一個要求:要求把報表直接用excel開啟。在實習中有這樣一個需求。根據所選擇的資源查詢使用者所提供附件的全部資訊並生成excel供下載。但是在查詢的時候我們需要來檢測使用者所提供的附件裡面的資訊是否有錯誤(身份證)。有錯誤的生成錯誤資訊excel。
Apache的POI專案,是目前比較成熟的HSSF介面,用來處理Excel物件。其實POI不僅僅只能處理excel,它還可以處理word、PowerPoint、Visio、甚至Outlook。
這裡我先介紹利用POI如何生成excel。
首先在生成Excel前,我們需要理解一下Excel檔案的組織形式。在POI中,是這樣理解的:一個Excel檔案對應一個workbook,一個workerbook是有若干個sheet組成的。一個sheet有多個row,一個row一般存在多個cell。
對於上面的四個名詞我們可以在下圖理解
對於生成Excel,POI提供瞭如下幾個基本物件:
HSSFWorkbook excel 的文件物件
HSSFSheet excel 的表單
HSSFRow excel 的行
HSSFCell excel 的格子單元
從上面的圖片和Excel的組織結構,我們就可以明白建立Excel的步驟。
1、生成文件物件HSSHWorkbook。
2、通過HSSFWorkbook生成表單HSSFSheet。
3、通過HSSFSheet生成行HSSFRow
4、通過HSSFRow生成單元格HSSFCell。
下面是展示程式碼:
身份證錯誤Bean(ErrorCondition.java)
[java] view plain copy print?- /**
- *@Project: excel
- *@Author: chenssy
- *@Date: 2013-4-4
- *@Copyright: chenssy All rights reserved.
- */
- publicclass ErrorCondition {
- private String name; // 姓名
-
private String idCard;
- private String status; // 錯誤狀態
- private String message; // 錯誤資訊
- ErrorCondition(String name,String idCard,String status,String message){
- this.name = name;
- this.idCard = idCard;
- this.status = status;
- this.message = message;
- }
- public String getName() {
- return name;
- }
- publicvoid setName(String name) {
- this.name = name;
- }
- public String getIdCard() {
- return idCard;
- }
- publicvoid setIdCard(String idCard) {
- this.idCard = idCard;
- }
- public String getStatus() {
- return status;
- }
- publicvoid setStatus(String status) {
- this.status = status;
- }
- public String getMessage() {
- return message;
- }
- publicvoid setMessage(String message) {
- this.message = message;
- }
- }
- /**
- *@Project: excel
- *@Author: chenssy
- *@Date: 2013-4-4
- *@Copyright: chenssy All rights reserved.
- */
- publicclass ExportErrorExcel {
- publicstaticvoid main(String[] args) {
- //第一步建立workbook
- HSSFWorkbook wb = new HSSFWorkbook();
- //第二步建立sheet
- HSSFSheet sheet = wb.createSheet("身份證錯誤資訊");
- //第三步建立行row:新增表頭0行
- HSSFRow row = sheet.createRow(0);
- HSSFCellStyle style = wb.createCellStyle();
- style.setAlignment(HSSFCellStyle.ALIGN_CENTER); //居中
- //第四步建立單元格
- HSSFCell cell = row.createCell(0); //第一個單元格
- cell.setCellValue("姓名"); //設定值
- cell.setCellStyle(style); //內容居中
- cell = row.createCell(1); //第二個單元格
- cell.setCellValue("身份證");
- cell.setCellStyle(style);
- cell = row.createCell(2); //第三個單元格
- cell.setCellValue("錯誤狀態");
- cell.setCellStyle(style);
- cell = row.createCell(3); //第四個單元格
- cell.setCellValue("錯誤資訊");
- cell.setCellStyle(style);
- //第五步插入資料
- List<ErrorCondition> list = ExportErrorExcel.getErrorCondition();
- for (int i = 0; i < list.size(); i++) {
- ErrorCondition errorCondition = list.get(i);
- //建立行
- row = sheet.createRow(i+1);
- //建立單元格並且新增資料
- row.createCell(0).setCellValue(errorCondition.getName());
- row.createCell(1).setCellValue(errorCondition.getIdCard());
- row.createCell(2).setCellValue(errorCondition.getStatus());
- row.createCell(3).setCellValue(errorCondition.getMessage());
- }
- //第六步將生成excel檔案儲存到指定路徑下
- try {
- FileOutputStream fout = new FileOutputStream("D:\\errorCondition.xls");
- wb.write(fout);
- fout.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- System.out.println("Excel檔案生成成功...");
- }
- publicstatic List<ErrorCondition> getErrorCondition(){
- List<ErrorCondition> list = new ArrayList<ErrorCondition>();
- ErrorCondition r1 = new ErrorCondition("張三", "4306821989021611", "L", "長度錯誤");
- ErrorCondition r2 = new ErrorCondition("李四", "430682198902191112","X", "校驗錯誤");
- ErrorCondition r3 = new ErrorCondition("王五", "", "N", "身份證資訊為空");
- list.add(r1);
- list.add(r2);
- list.add(r3);
- return list;
- }
- }