public ActionResult excelPrint() { HSSFWorkbook workbook = new HSSFWorkbook();// 創建一個Excel文件 HSSFSheet sheet = workbook.createSheet();// 創建一個Excel的Sheet sheet.createFreezePane(1, 3);// 凍結 // 設置列寬 sheet.setColumnWidth(0, 1000); sheet.setColumnWidth(1, 3500); sheet.setColumnWidth(2, 3500); sheet.setColumnWidth(3, 6500); sheet.setColumnWidth(4, 6500); sheet.setColumnWidth(5, 6500); sheet.setColumnWidth(6, 6500); sheet.setColumnWidth(7, 2500); // Sheet樣式 HSSFCellStyle sheetStyle = workbook.createCellStyle(); // 背景色的設定 sheetStyle.setFillBackgroundColor(HSSFColor.GREY_25_PERCENT.index); // 前景色的設定 sheetStyle.setFillForegroundColor(HSSFColor.GREY_25_PERCENT.index); // 填充模式 sheetStyle.setFillPattern(HSSFCellStyle.FINE_DOTS); // 設置列的樣式 for (int i = 0; i <= 14; i++) { sheet.setDefaultColumnStyle((short) i, sheetStyle); } // 設置字體 HSSFFont headfont = workbook.createFont(); headfont.setFontName("黑體"); headfont.setFontHeightInPoints((short) 22);// 字體大小 headfont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);// 加粗 // 另一個樣式 HSSFCellStyle headstyle = workbook.createCellStyle(); headstyle.setFont(headfont); headstyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 左右居中 headstyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 上下居中 headstyle.setLocked(true); headstyle.setWrapText(true);// 自動換行 // 另一個字體樣式 HSSFFont columnHeadFont = workbook.createFont(); columnHeadFont.setFontName("宋體"); columnHeadFont.setFontHeightInPoints((short) 10); columnHeadFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); // 列頭的樣式 HSSFCellStyle columnHeadStyle = workbook.createCellStyle(); columnHeadStyle.setFont(columnHeadFont); columnHeadStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 左右居中 columnHeadStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 上下居中 columnHeadStyle.setLocked(true); columnHeadStyle.setWrapText(true); columnHeadStyle.setLeftBorderColor(HSSFColor.BLACK.index);// 左邊框的顏色 columnHeadStyle.setBorderLeft((short) 1);// 邊框的大小 columnHeadStyle.setRightBorderColor(HSSFColor.BLACK.index);// 右邊框的顏色 columnHeadStyle.setBorderRight((short) 1);// 邊框的大小 columnHeadStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); // 設置單元格的邊框為粗體 columnHeadStyle.setBottomBorderColor(HSSFColor.BLACK.index); // 設置單元格的邊框顏色 // 設置單元格的背景顏色(單元格的樣式會覆蓋列或行的樣式) columnHeadStyle.setFillForegroundColor(HSSFColor.WHITE.index); HSSFFont font = workbook.createFont(); font.setFontName("宋體"); font.setFontHeightInPoints((short) 10); // 普通單元格樣式 HSSFCellStyle style = workbook.createCellStyle(); style.setFont(font); style.setAlignment(HSSFCellStyle.ALIGN_LEFT);// 左右居中 style.setVerticalAlignment(HSSFCellStyle.VERTICAL_TOP);// 上下居中 style.setWrapText(true); style.setLeftBorderColor(HSSFColor.BLACK.index); style.setBorderLeft((short) 1); style.setRightBorderColor(HSSFColor.BLACK.index); style.setBorderRight((short) 1); style.setBorderBottom(HSSFCellStyle.BORDER_THIN); // 設置單元格的邊框為粗體 style.setBottomBorderColor(HSSFColor.BLACK.index); // 設置單元格的邊框顏色. style.setFillForegroundColor(HSSFColor.WHITE.index);// 設置單元格的背景顏色. // 另一個樣式 HSSFCellStyle centerstyle = workbook.createCellStyle(); centerstyle.setFont(font); centerstyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 左右居中 centerstyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 上下居中 centerstyle.setWrapText(true); centerstyle.setLeftBorderColor(HSSFColor.BLACK.index); centerstyle.setBorderLeft((short) 1); centerstyle.setRightBorderColor(HSSFColor.BLACK.index); centerstyle.setBorderRight((short) 1); centerstyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); // 設置單元格的邊框為粗體 centerstyle.setBottomBorderColor(HSSFColor.BLACK.index); // 設置單元格的邊框顏色. centerstyle.setFillForegroundColor(HSSFColor.WHITE.index);// 設置單元格的背景顏色. try { // 創建第一行 HSSFRow row0 = sheet.createRow(0); // 設置行高 row0.setHeight((short) 900); // 創建第一列 HSSFCell cell0 = row0.createCell(0); cell0.setCellValue(new HSSFRichTextString("中非發展基金投資項目調度會工作落實情況對照表")); cell0.setCellStyle(headstyle); /** * 合並單元格 * 第一個參數:第一個單元格的行數(從0開始) * 第二個參數:第二個單元格的行數(從0開始) * 第三個參數:第一個單元格的列數(從0開始) * 第四個參數:第二個單元格的列數(從0開始) */ CellRangeAddress range = new CellRangeAddress(0, 0, 0, 7); sheet.addMergedRegion(range); // 創建第二行 HSSFRow row1 = sheet.createRow(1); HSSFCell cell1 = row1.createCell(0); cell1.setCellValue(new HSSFRichTextString("本次會議時間:2009年8月31日 前次會議時間:2009年8月24日")); cell1.setCellStyle(centerstyle); // 合並單元格 range = new CellRangeAddress(1, 2, 0, 7); sheet.addMergedRegion(range); // 第三行 HSSFRow row2 = sheet.createRow(3); row2.setHeight((short) 750); HSSFCell cell = row2.createCell(0); cell.setCellValue(new HSSFRichTextString("責任者")); cell.setCellStyle(columnHeadStyle); cell = row2.createCell(1); cell.setCellValue(new HSSFRichTextString("成熟度排序")); cell.setCellStyle(columnHeadStyle); cell = row2.createCell(2); cell.setCellValue(new HSSFRichTextString("事項")); cell.setCellStyle(columnHeadStyle); cell = row2.createCell(3); cell.setCellValue(new HSSFRichTextString("前次會議要求/n/新項目的項目概要")); cell.setCellStyle(columnHeadStyle); cell = row2.createCell(4); cell.setCellValue(new HSSFRichTextString("上周工作進展")); cell.setCellStyle(columnHeadStyle); cell = row2.createCell(5); cell.setCellValue(new HSSFRichTextString("本周工作計划")); cell.setCellStyle(columnHeadStyle); cell = row2.createCell(6); cell.setCellValue(new HSSFRichTextString("問題和建議")); cell.setCellStyle(columnHeadStyle); cell = row2.createCell(7); cell.setCellValue(new HSSFRichTextString("備 注")); cell.setCellStyle(columnHeadStyle); // 訪問數據庫,得到數據集 List deitelVOList = getEntityManager().queryDeitelVOList(); int m = 4; int k = 4; for (int i = 0; i < deitelVOList.size(); i++) { DeitelVO vo = deitelVOList.get(i); String dname = vo.getDname(); List workList = vo.getWorkInfoList(); HSSFRow row = sheet.createRow(m); cell = row.createCell(0); cell.setCellValue(new HSSFRichTextString(dname)); cell.setCellStyle(centerstyle); // 合並單元格 range = new CellRangeAddress(m, m + workList.size() - 1, 0, 0); sheet.addMergedRegion(range); m = m + workList.size(); for (int j = 0; j < workList.size(); j++) { Workinfo w = workList.get(j); // 遍歷數據集創建Excel的行 row = sheet.getRow(k + j); if (null == row) { row = sheet.createRow(k + j); } cell = row.createCell(1); cell.setCellValue(w.getWnumber()); cell.setCellStyle(centerstyle); cell = row.createCell(2); cell.setCellValue(new HSSFRichTextString(w.getWitem())); cell.setCellStyle(style); cell = row.createCell(3); cell.setCellValue(new HSSFRichTextString(w.getWmeting())); cell.setCellStyle(style); cell = row.createCell(4); cell.setCellValue(new HSSFRichTextString(w.getWbweek())); cell.setCellStyle(style); cell = row.createCell(5); cell.setCellValue(new HSSFRichTextString(w.getWtweek())); cell.setCellStyle(style); cell = row.createCell(6); cell.setCellValue(new HSSFRichTextString(w.getWproblem())); cell.setCellStyle(style); cell = row.createCell(7); cell.setCellValue(new HSSFRichTextString(w.getWremark())); cell.setCellStyle(style); } k = k + workList.size(); } // 列尾 int footRownumber = sheet.getLastRowNum(); HSSFRow footRow = sheet.createRow(footRownumber + 1); HSSFCell footRowcell = footRow.createCell(0); footRowcell.setCellValue(new HSSFRichTextString(" 審 定:XXX 審 核:XXX 匯 總:XX")); footRowcell.setCellStyle(centerstyle); range = new CellRangeAddress(footRownumber + 1, footRownumber + 1, 0, 7); sheet.addMergedRegion(range); HttpServletResponse response = getResponse(); HttpServletRequest request = getRequest(); String filename = "未命名.xls";//設置下載時客戶端Excel的名稱 // 請見:http://zmx.javaeye.com/blog/622529 filename = Util.encodeFilename(filename, request); response.setContentType("application/vnd.ms-excel"); response.setHeader("Content-disposition", "attachment;filename=" + filename); OutputStream ouputStream = response.getOutputStream(); workbook.write(ouputStream); ouputStream.flush(); ouputStream.close(); } catch (Exception e) { e.printStackTrace(); } return null; } -------------------------------->>其他應用參考指南: 你可以使用開源的jexcel 的jar包里面有 Java == excel 的相互讀寫。 導入到Java后再寫入數據庫就方便了 附上使用方法: 下面這些是在開發中用到的一些東西,有的代碼貼的不是完整的,只是貼出了關於操作EXCEL的代碼: 使用如下: 搭建環境 將下載后的文件解包,得到jxl.jar,放入classpath,安裝就完成了。 基本操作 一、創建文件 擬生成一個名為“test.xls”的Excel文件,其中第一個工作表被命名為 “第一頁”,大致效果如下: Java代碼 1. package test; 2. 3. // 生成Excel的類 4. import java.io.File; 5. 6. import jxl.Workbook; 7. import jxl.write.Label; 8. import jxl.write.WritableSheet; 9. import jxl.write.WritableWorkbook; 10. 11. public class CreateExcel { 12. public static void main(String args[]) { 13. try { 14. // 打開文件 15. WritableWorkbook book = Workbook.createWorkbook( new File( " test.xls " )); 16. // 生成名為“第一頁”的工作表,參數0表示這是第一頁 17. WritableSheet sheet = book.createSheet( " 第一頁 " , 0 ); 18. // 在Label對象的構造子中指名單元格位置是第一列第一行(0,0) 19. // 以及單元格內容為test 20. Label label = new Label( 0 , 0 , " test " ); 21. 22. // 將定義好的單元格添加到工作表中 23. sheet.addCell(label); 24. 25. /**/ /* 26. * 生成一個保存數字的單元格 必須使用Number的完整包路徑,否則有語法歧義 單元格位置是第二列,第一行,值為789.123 27. */ 28. jxl.write.Number number = new jxl.write.Number( 1 , 0 , 555.12541 ); 29. sheet.addCell(number); 30. 31. // 寫入數據並關閉文件 32. book.write(); 33. book.close(); 34. 35. } catch (Exception e) { 36. System.out.println(e); 37. } 38. } 39. 編譯執行后,會產生一個Excel文件。 三、讀取文件 以剛才我們創建的Excel文件為例,做一個簡單的讀取操作,程序代碼如下: Java代碼 1. package test; 2. 3. // 讀取Excel的類 4. import java.io.File; 5. 6. import jxl.Cell; 7. import jxl.Sheet; 8. import jxl.Workbook; 9. 10. public class ReadExcel { 11. public static void main(String args[]) { 12. try { 13. Workbook book = Workbook.getWorkbook( new File( " test.xls " )); 14. // 獲得第一個工作表對象 15. Sheet sheet = book.getSheet( 0 ); 16. // 得到第一列第一行的單元格 17. Cell cell1 = sheet.getCell( 0 , 0 ); 18. String result = cell1.getContents(); 19. System.out.println(result); 20. book.close(); 21. } catch (Exception e) { 22. System.out.println(e); 23. } 24. } 25. 程序執行結果:test 四、修改文件 利用jExcelAPI可以修改已有的Excel文件,修改Excel文件的時候,除了打開文件的方式不同之外, 其他操作和創建Excel是一樣的。下面的例子是在我們已經生成的Excel文件中添加一個工作表: Java代碼 1. package test; 2. 3. import java.io.File; 4. 5. import jxl.Workbook; 6. import jxl.write.Label; 7. import jxl.write.WritableSheet; 8. import jxl.write.WritableWorkbook; 9. 10. public class UpdateExcel { 11. public static void main(String args[]) { 12. try { 13. // Excel獲得文件 14. Workbook wb = Workbook.getWorkbook( new File( " test.xls " )); 15. // 打開一個文件的副本,並且指定數據寫回到原文件 16. WritableWorkbook book = Workbook.createWorkbook( new File( " test.xls " ), 17. wb); 18. // 添加一個工作表 19. WritableSheet sheet = book.createSheet( " 第二頁 " , 1 ); 20. sheet.addCell( new Label( 0 , 0 , " 第二頁的測試數據 " )); 21. book.write(); 22. book.close(); 23. } catch (Exception e) { 24. System.out.println(e); 25. } 26. } 27. 其他操作 一、 數據格式化 在Excel中不涉及復雜的數據類型,能夠比較好的處理字串、數字和日期已經能夠滿足一般的應用。 1、 字串格式化 字符串的格式化涉及到的是字體、粗細、字號等元素,這些功能主要由WritableFont和 WritableCellFormat類來負責。假設我們在生成一個含有字串的單元格時,使用如下語句, 為方便敘述,我們為每一行命令加了編號: Java代碼 1. WritableFont font1 = 2. new WritableFont(WritableFont.TIMES, 16 ,WritableFont.BOLD); ① 3. 4. WritableCellFormat format1 = new WritableCellFormat(font1); ② 5. 6. Label label = new Label( 0 , 0 ,”data 4 test”,format1) ③ 7. 8. 9. 其中①指定了字串格式:字體為TIMES,字號16,加粗顯示。WritableFont有非常豐富的 10. 構造子,供不同情況下使用,jExcelAPI的java-doc中有詳細列表,這里不再列出。 11. 12. ②處代碼使用了WritableCellFormat類,這個類非常重要,通過它可以指定單元格的各種 13. 屬性,后面的單元格格式化中會有更多描述。 14. 15. ③處使用了Label類的構造子,指定了字串被賦予那種格式。 16. 17. 在WritableCellFormat類中,還有一個很重要的方法是指定數據的對齊方式,比如針對我們 18. 上面的實例,可以指定: 19. 20. // 把水平對齊方式指定為居中 21. format1.setAlignment(jxl.format.Alignment.CENTRE); 22. 23. // 把垂直對齊方式指定為居中 24. format1.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE); 二、單元格操作 Excel中很重要的一部分是對單元格的操作,比如行高、列寬、單元格合並等,所幸jExcelAPI 提供了這些支持。這些操作相對比較簡單,下面只介紹一下相關的API。 1、 合並單元格 Java代碼 1. WritableSheet.mergeCells( int m, int n, int p, int q); 2. 3. // 作用是從(m,n)到(p,q)的單元格全部合並,比如: 4. WritableSheet sheet = book.createSheet(“第一頁”, 0 ); 5. 6. // 合並第一列第一行到第六列第一行的所有單元格 7. sheet.mergeCells( 0 , 0 , 5 , 0 ); 合並既可以是橫向的,也可以是縱向的。合並后的單元格不能再次進行合並,否則會觸發異常。 3、用於Excel視圖的視圖子類化 為了在生成輸出文檔的過程中實現定制的行為,我們將繼承合適的抽象類。對於Excel,這包括提供一個 org.springframework.web.servlet.view.document.AbstractExcelView的子類,並實現 buildExcelDocument方法。 Java代碼 1. public class ViewExcel extends AbstractExcelView { 2. 3. public void buildExcelDocument( 4. Map model, HSSFWorkbook workbook, 5. HttpServletRequest request, HttpServletResponse response) 6. throws Exception { 7. 8. HSSFSheet sheet = workbook.createSheet("list"); 9. sheet.setDefaultColumnWidth((short) 12); 10. 11. 12. HSSFCell cell = getCell(sheet, 0, 0); 13. setText(cell, "Spring Excel test"); 14. 15. HSSFCellStyle dateStyle = workbook.createCellStyle(); 16. dateStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("m/d/yy")); 17. cell = getCell(sheet, 1, 0); 18. cell.setCellValue(new Date()); 19. cell.setCellStyle(dateStyle); 20. getCell(sheet, 2, 0).setCellValue(458); 21. 22. HSSFRow sheetRow = sheet.createRow(3); 23. for (short i = 0; i < 10; i++) { 24. sheetRow.createCell(i).setCellValue(i * 10); 25. } 26. 27. } 28. 29. }
- public ActionResult excelPrint() {
- HSSFWorkbook workbook = new HSSFWorkbook();// 創建一個Excel文件
- HSSFSheet sheet = workbook.createSheet();// 創建一個Excel的Sheet
- sheet.createFreezePane(1, 3);// 凍結
- // 設置列寬
- sheet.setColumnWidth(0, 1000);
- sheet.setColumnWidth(1, 3500);
- sheet.setColumnWidth(2, 3500);
- sheet.setColumnWidth(3, 6500);
- sheet.setColumnWidth(4, 6500);
- sheet.setColumnWidth(5, 6500);
- sheet.setColumnWidth(6, 6500);
- sheet.setColumnWidth(7, 2500);
- // Sheet樣式
- HSSFCellStyle sheetStyle = workbook.createCellStyle();
- // 背景色的設定
- sheetStyle.setFillBackgroundColor(HSSFColor.GREY_25_PERCENT.index);
- // 前景色的設定
- sheetStyle.setFillForegroundColor(HSSFColor.GREY_25_PERCENT.index);
- // 填充模式
- sheetStyle.setFillPattern(HSSFCellStyle.FINE_DOTS);
- // 設置列的樣式
- for (int i = 0; i <= 14; i++) {
- sheet.setDefaultColumnStyle((short) i, sheetStyle);
- }
- // 設置字體
- HSSFFont headfont = workbook.createFont();
- headfont.setFontName("黑體");
- headfont.setFontHeightInPoints((short) 22);// 字體大小
- headfont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);// 加粗
- // 另一個樣式
- HSSFCellStyle headstyle = workbook.createCellStyle();
- headstyle.setFont(headfont);
- headstyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 左右居中
- headstyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 上下居中
- headstyle.setLocked(true);
- headstyle.setWrapText(true);// 自動換行
- // 另一個字體樣式
- HSSFFont columnHeadFont = workbook.createFont();
- columnHeadFont.setFontName("宋體");
- columnHeadFont.setFontHeightInPoints((short) 10);
- columnHeadFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
- // 列頭的樣式
- HSSFCellStyle columnHeadStyle = workbook.createCellStyle();
- columnHeadStyle.setFont(columnHeadFont);
- columnHeadStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 左右居中
- columnHeadStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 上下居中
- columnHeadStyle.setLocked(true);
- columnHeadStyle.setWrapText(true);
- columnHeadStyle.setLeftBorderColor(HSSFColor.BLACK.index);// 左邊框的顏色
- columnHeadStyle.setBorderLeft((short) 1);// 邊框的大小
- columnHeadStyle.setRightBorderColor(HSSFColor.BLACK.index);// 右邊框的顏色
- columnHeadStyle.setBorderRight((short) 1);// 邊框的大小
- columnHeadStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); // 設置單元格的邊框為粗體
- columnHeadStyle.setBottomBorderColor(HSSFColor.BLACK.index); // 設置單元格的邊框顏色
- // 設置單元格的背景顏色(單元格的樣式會覆蓋列或行的樣式)
- columnHeadStyle.setFillForegroundColor(HSSFColor.WHITE.index);
- HSSFFont font = workbook.createFont();
- font.setFontName("宋體");
- font.setFontHeightInPoints((short) 10);
- // 普通單元格樣式
- HSSFCellStyle style = workbook.createCellStyle();
- style.setFont(font);
- style.setAlignment(HSSFCellStyle.ALIGN_LEFT);// 左右居中
- style.setVerticalAlignment(HSSFCellStyle.VERTICAL_TOP);// 上下居中
- style.setWrapText(true);
- style.setLeftBorderColor(HSSFColor.BLACK.index);
- style.setBorderLeft((short) 1);
- style.setRightBorderColor(HSSFColor.BLACK.index);
- style.setBorderRight((short) 1);
- style.setBorderBottom(HSSFCellStyle.BORDER_THIN); // 設置單元格的邊框為粗體
- style.setBottomBorderColor(HSSFColor.BLACK.index); // 設置單元格的邊框顏色.
- style.setFillForegroundColor(HSSFColor.WHITE.index);// 設置單元格的背景顏色.
- // 另一個樣式
- HSSFCellStyle centerstyle = workbook.createCellStyle();
- centerstyle.setFont(font);
- centerstyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 左右居中
- centerstyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 上下居中
- centerstyle.setWrapText(true);
- centerstyle.setLeftBorderColor(HSSFColor.BLACK.index);
- centerstyle.setBorderLeft((short) 1);
- centerstyle.setRightBorderColor(HSSFColor.BLACK.index);
- centerstyle.setBorderRight((short) 1);
- centerstyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); // 設置單元格的邊框為粗體
- centerstyle.setBottomBorderColor(HSSFColor.BLACK.index); // 設置單元格的邊框顏色.
- centerstyle.setFillForegroundColor(HSSFColor.WHITE.index);// 設置單元格的背景顏色.
- try {
- // 創建第一行
- HSSFRow row0 = sheet.createRow(0);
- // 設置行高
- row0.setHeight((short) 900);
- // 創建第一列
- HSSFCell cell0 = row0.createCell(0);
- cell0.setCellValue(new HSSFRichTextString("中非發展基金投資項目調度會工作落實情況對照表"));
- cell0.setCellStyle(headstyle);
- /**
- * 合並單元格
- * 第一個參數:第一個單元格的行數(從0開始)
- * 第二個參數:第二個單元格的行數(從0開始)
- * 第三個參數:第一個單元格的列數(從0開始)
- * 第四個參數:第二個單元格的列數(從0開始)
- */
- CellRangeAddress range = new CellRangeAddress(0, 0, 0, 7);
- sheet.addMergedRegion(range);
- // 創建第二行
- HSSFRow row1 = sheet.createRow(1);
- HSSFCell cell1 = row1.createCell(0);
- cell1.setCellValue(new HSSFRichTextString("本次會議時間:2009年8月31日 前次會議時間:2009年8月24日"));
- cell1.setCellStyle(centerstyle);
- // 合並單元格
- range = new CellRangeAddress(1, 2, 0, 7);
- sheet.addMergedRegion(range);
- // 第三行
- HSSFRow row2 = sheet.createRow(3);
- row2.setHeight((short) 750);
- HSSFCell cell = row2.createCell(0);
- cell.setCellValue(new HSSFRichTextString("責任者"));
- cell.setCellStyle(columnHeadStyle);
- cell = row2.createCell(1);
- cell.setCellValue(new HSSFRichTextString("成熟度排序"));
- cell.setCellStyle(columnHeadStyle);
- cell = row2.createCell(2);
- cell.setCellValue(new HSSFRichTextString("事項"));
- cell.setCellStyle(columnHeadStyle);
- cell = row2.createCell(3);
- cell.setCellValue(new HSSFRichTextString("前次會議要求/n/新項目的項目概要"));
- cell.setCellStyle(columnHeadStyle);
- cell = row2.createCell(4);
- cell.setCellValue(new HSSFRichTextString("上周工作進展"));
- cell.setCellStyle(columnHeadStyle);
- cell = row2.createCell(5);
- cell.setCellValue(new HSSFRichTextString("本周工作計划"));
- cell.setCellStyle(columnHeadStyle);
- cell = row2.createCell(6);
- cell.setCellValue(new HSSFRichTextString("問題和建議"));
- cell.setCellStyle(columnHeadStyle);
- cell = row2.createCell(7);
- cell.setCellValue(new HSSFRichTextString("備 注"));
- cell.setCellStyle(columnHeadStyle);
- // 訪問數據庫,得到數據集
- List deitelVOList = getEntityManager().queryDeitelVOList();
- int m = 4;
- int k = 4;
- for (int i = 0; i < deitelVOList.size(); i++) {
- DeitelVO vo = deitelVOList.get(i);
- String dname = vo.getDname();
- List workList = vo.getWorkInfoList();
- HSSFRow row = sheet.createRow(m);
- cell = row.createCell(0);
- cell.setCellValue(new HSSFRichTextString(dname));
- cell.setCellStyle(centerstyle);
- // 合並單元格
- range = new CellRangeAddress(m, m + workList.size() - 1, 0, 0);
- sheet.addMergedRegion(range);
- m = m + workList.size();
- for (int j = 0; j < workList.size(); j++) {
- Workinfo w = workList.get(j);
- // 遍歷數據集創建Excel的行
- row = sheet.getRow(k + j);
- if (null == row) {
- row = sheet.createRow(k + j);
- }
- cell = row.createCell(1);
- cell.setCellValue(w.getWnumber());
- cell.setCellStyle(centerstyle);
- cell = row.createCell(2);
- cell.setCellValue(new HSSFRichTextString(w.getWitem()));
- cell.setCellStyle(style);
- cell = row.createCell(3);
- cell.setCellValue(new HSSFRichTextString(w.getWmeting()));
- cell.setCellStyle(style);
- cell = row.createCell(4);
- cell.setCellValue(new HSSFRichTextString(w.getWbweek()));
- cell.setCellStyle(style);
- cell = row.createCell(5);
- cell.setCellValue(new HSSFRichTextString(w.getWtweek()));
- cell.setCellStyle(style);
- cell = row.createCell(6);
- cell.setCellValue(new HSSFRichTextString(w.getWproblem()));
- cell.setCellStyle(style);
- cell = row.createCell(7);
- cell.setCellValue(new HSSFRichTextString(w.getWremark()));
- cell.setCellStyle(style);
- }
- k = k + workList.size();
- }
- // 列尾
- int footRownumber = sheet.getLastRowNum();
- HSSFRow footRow = sheet.createRow(footRownumber + 1);
- HSSFCell footRowcell = footRow.createCell(0);
- footRowcell.setCellValue(new HSSFRichTextString(" 審 定:XXX 審 核:XXX 匯 總:XX"));
- footRowcell.setCellStyle(centerstyle);
- range = new CellRangeAddress(footRownumber + 1, footRownumber + 1, 0, 7);
- sheet.addMergedRegion(range);
- HttpServletResponse response = getResponse();
- HttpServletRequest request = getRequest();
- String filename = "未命名.xls";//設置下載時客戶端Excel的名稱
- // 請見:http://zmx.javaeye.com/blog/622529
- filename = Util.encodeFilename(filename, request);
- response.setContentType("application/vnd.ms-excel");
- response.setHeader("Content-disposition", "attachment;filename=" + filename);
- OutputStream ouputStream = response.getOutputStream();
- workbook.write(ouputStream);
- ouputStream.flush();
- ouputStream.close();
- } catch (Exception e) {
- e.printStackTrace();
- }
- return null;
- }
- -------------------------------->>其他應用參考指南:
- 你可以使用開源的jexcel 的jar包里面有 Java == excel 的相互讀寫。
導入到Java后再寫入數據庫就方便了
附上使用方法:
下面這些是在開發中用到的一些東西,有的代碼貼的不是完整的,只是貼出了關於操作EXCEL的代碼:
使用如下:
搭建環境
將下載后的文件解包,得到jxl.jar,放入classpath,安裝就完成了。
基本操作
一、創建文件
擬生成一個名為“test.xls”的Excel文件,其中第一個工作表被命名為
“第一頁”,大致效果如下:
Java代碼
1. package test;
2.
3. // 生成Excel的類
4. import java.io.File;
5.
6. import jxl.Workbook;
7. import jxl.write.Label;
8. import jxl.write.WritableSheet;
9. import jxl.write.WritableWorkbook;
10.
11. public class CreateExcel {
12. public static void main(String args[]) {
13. try {
14. // 打開文件
15. WritableWorkbook book = Workbook.createWorkbook( new File( " test.xls " ));
16. // 生成名為“第一頁”的工作表,參數0表示這是第一頁
17. WritableSheet sheet = book.createSheet( " 第一頁 " , 0 );
18. // 在Label對象的構造子中指名單元格位置是第一列第一行(0,0)
19. // 以及單元格內容為test
20. Label label = new Label( 0 , 0 , " test " );
21.
22. // 將定義好的單元格添加到工作表中
23. sheet.addCell(label);
24.
25. /**/ /*
26. * 生成一個保存數字的單元格 必須使用Number的完整包路徑,否則有語法歧義 單元格位置是第二列,第一行,值為789.123
27. */
28. jxl.write.Number number = new jxl.write.Number( 1 , 0 , 555.12541 );
29. sheet.addCell(number);
30.
31. // 寫入數據並關閉文件
32. book.write();
33. book.close();
34.
35. } catch (Exception e) {
36. System.out.println(e);
37. }
38. }
39.
編譯執行后,會產生一個Excel文件。
三、讀取文件
以剛才我們創建的Excel文件為例,做一個簡單的讀取操作,程序代碼如下:
Java代碼
1. package test;
2.
3. // 讀取Excel的類
4. import java.io.File;
5.
6. import jxl.Cell;
7. import jxl.Sheet;
8. import jxl.Workbook;
9.
10. public class ReadExcel {
11. public static void main(String args[]) {
12. try {
13. Workbook book = Workbook.getWorkbook( new File( " test.xls " ));
14. // 獲得第一個工作表對象
15. Sheet sheet = book.getSheet( 0 );
16. // 得到第一列第一行的單元格
17. Cell cell1 = sheet.getCell( 0 , 0 );
18. String result = cell1.getContents();
19. System.out.println(result);
20. book.close();
21. } catch (Exception e) {
22. System.out.println(e);
23. }
24. }
25.
程序執行結果:test
四、修改文件
利用jExcelAPI可以修改已有的Excel文件,修改Excel文件的時候,除了打開文件的方式不同之外,
其他操作和創建Excel是一樣的。下面的例子是在我們已經生成的Excel文件中添加一個工作表:
Java代碼
1. package test;
2.
3. import java.io.File;
4.
5. import jxl.Workbook;
6. import jxl.write.Label;
7. import jxl.write.WritableSheet;
8. import jxl.write.WritableWorkbook;
9.
10. public class UpdateExcel {
11. public static void main(String args[]) {
12. try {
13. // Excel獲得文件
14. Workbook wb = Workbook.getWorkbook( new File( " test.xls " ));
15. // 打開一個文件的副本,並且指定數據寫回到原文件
16. WritableWorkbook book = Workbook.createWorkbook( new File( " test.xls " ),
17. wb);
18. // 添加一個工作表
19. WritableSheet sheet = book.createSheet( " 第二頁 " , 1 );
20. sheet.addCell( new Label( 0 , 0 , " 第二頁的測試數據 " ));
21. book.write();
22. book.close();
23. } catch (Exception e) {
24. System.out.println(e);
25. }
26. }
27.
其他操作
一、 數據格式化
在Excel中不涉及復雜的數據類型,能夠比較好的處理字串、數字和日期已經能夠滿足一般的應用。
1、 字串格式化
字符串的格式化涉及到的是字體、粗細、字號等元素,這些功能主要由WritableFont和
WritableCellFormat類來負責。假設我們在生成一個含有字串的單元格時,使用如下語句,
為方便敘述,我們為每一行命令加了編號:
Java代碼
1. WritableFont font1 =
2. new WritableFont(WritableFont.TIMES, 16 ,WritableFont.BOLD); ①
3.
4. WritableCellFormat format1 = new WritableCellFormat(font1); ②
5.
6. Label label = new Label( 0 , 0 ,”data 4 test”,format1) ③
7.
8.
9. 其中①指定了字串格式:字體為TIMES,字號16,加粗顯示。WritableFont有非常豐富的
10. 構造子,供不同情況下使用,jExcelAPI的java-doc中有詳細列表,這里不再列出。
11.
12. ②處代碼使用了WritableCellFormat類,這個類非常重要,通過它可以指定單元格的各種
13. 屬性,后面的單元格格式化中會有更多描述。
14.
15. ③處使用了Label類的構造子,指定了字串被賦予那種格式。
16.
17. 在WritableCellFormat類中,還有一個很重要的方法是指定數據的對齊方式,比如針對我們
18. 上面的實例,可以指定:
19.
20. // 把水平對齊方式指定為居中
21. format1.setAlignment(jxl.format.Alignment.CENTRE);
22.
23. // 把垂直對齊方式指定為居中
24. format1.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);
二、單元格操作
Excel中很重要的一部分是對單元格的操作,比如行高、列寬、單元格合並等,所幸jExcelAPI
提供了這些支持。這些操作相對比較簡單,下面只介紹一下相關的API。
1、 合並單元格
Java代碼
1. WritableSheet.mergeCells( int m, int n, int p, int q);
2.
3. // 作用是從(m,n)到(p,q)的單元格全部合並,比如:
4. WritableSheet sheet = book.createSheet(“第一頁”, 0 );
5.
6. // 合並第一列第一行到第六列第一行的所有單元格
7. sheet.mergeCells( 0 , 0 , 5 , 0 );
合並既可以是橫向的,也可以是縱向的。合並后的單元格不能再次進行合並,否則會觸發異常。
3、用於Excel視圖的視圖子類化
為了在生成輸出文檔的過程中實現定制的行為,我們將繼承合適的抽象類。對於Excel,這包括提供一個 org.springframework.web.servlet.view.document.AbstractExcelView的子類,並實現 buildExcelDocument方法。
Java代碼
1. public class ViewExcel extends AbstractExcelView {
2.
3. public void buildExcelDocument(
4. Map model, HSSFWorkbook workbook,
5. HttpServletRequest request, HttpServletResponse response)
6. throws Exception {
7.
8. HSSFSheet sheet = workbook.createSheet("list");
9. sheet.setDefaultColumnWidth((short) 12);
10.
11.
12. HSSFCell cell = getCell(sheet, 0, 0);
13. setText(cell, "Spring Excel test");
14.
15. HSSFCellStyle dateStyle = workbook.createCellStyle();
16. dateStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("m/d/yy"));
17. cell = getCell(sheet, 1, 0);
18. cell.setCellValue(new Date());
19. cell.setCellStyle(dateStyle);
20. getCell(sheet, 2, 0).setCellValue(458);
21.
22. HSSFRow sheetRow = sheet.createRow(3);
23. for (short i = 0; i < 10; i++) {
24. sheetRow.createCell(i).setCellValue(i * 10);
25. }
26.
27. }
28.
29. }