POIのHSSFWorkbookなどクラスを利用するとJavaでデータをエクセルに出力することはできますが、毎回自分でエクセルのシートを作成して、データをセルにセットしなければいけないです。ちょっと面倒じゃないかと思ってます。

その問題を解決するため、以下の共通できるJavaクラスを作りました。データを格納しているリストとシート名を指定して、エクセルを作れます。

※POIとは、Jakarta POIは総称であり、JavaアプリケーションからExcelなどのMicrosoft製品のフォーマットファイルを読み書きすることができます(Excelだけではなくて、Wordなども操作可能ということです)。Excelファイルを取り扱う場合はその中のHSSFを使います(Wordの場合はHWPFのようです)。

では、以下は該当クラスのソースコード(ここにクリックしてダウンロードできます):

  1. package com.cthq.crm.account.common;
  2.  
  3. import java.util.List;
  4. import org.apache.poi.hssf.usermodel.HSSFCell;
  5. import org.apache.poi.hssf.usermodel.HSSFCellStyle;
  6. import org.apache.poi.hssf.usermodel.HSSFFont;
  7. import org.apache.poi.hssf.usermodel.HSSFRow;
  8. import org.apache.poi.hssf.usermodel.HSSFSheet;
  9. import org.apache.poi.hssf.usermodel.HSSFWorkbook;
  10.  
  11. public class ExcelUtil { 
  12.  
  13.     /**
  14.      * Excelファイルにエクスポート
  15.      *
  16.      * @param list データ集
  17.      * @param sheetname エクセルシート名
  18.      * @return
  19.      */
  20.     public synchronized HSSFWorkbook getWorkbook(List list,String sheetname){
  21.         HSSFWorkbook hwb = new HSSFWorkbook();// 新しいHSSFWorkbookインスタンス作成
  22.         HSSFSheet hs = hwb.createSheet();// 新しいシート対象を作成する
  23.         hwb.setSheetName(0, sheetname);// 作成したシートの名称
  24.  
  25.         List excellist=list;
  26.         HSSFFont font = hwb.createFont();
  27.         font.setColor((short) 12);
  28.         HSSFCellStyle style = hwb.createCellStyle();
  29.         style.setFont(font);
  30.  
  31.         HSSFRow hr = hs.createRow((short) 3);// ヘッダー
  32.         List headerlist=(List)excellist.get(0);
  33.         for (int i = 0; i < headerlist.size(); i++) {
  34.             HSSFCell cell = hr.createCell((short) i);// セル
  35.             //cell.setEncoding(HSSFCell.ENCODING_UTF_16);// 必要であればコマンドアウト
  36.             cell.setCellValue((String)headerlist.get(i));// セル文字列型のセット
  37.             cell.setCellStyle(style);
  38.         }
  39.         for(int i = 1; i < excellist.size(); i++){
  40.             List valuelist=(List)excellist.get(i);
  41.             hr = hs.createRow((short) i);// 新しい行
  42.             for (int ii = 0; ii < valuelist.size(); ii++) {
  43.                 HSSFCell cell = hr.createCell((short) ii);// セル
  44.                 //cell.setEncoding(HSSFCell.ENCODING_UTF_16);// 必要であればコマンドアウト
  45.                 cell.setCellValue((String)valuelist.get(ii));// セル文字列型のセット
  46.             }
  47.         }
  48.         return hwb;
  49.     }
  50.     /**
  51.      * Excelファイルデータにエクスポートする
  52.      *
  53.      * @param lists データ集
  54.      * @param namesエクセルシート名
  55.      * @return
  56.      */
  57.     public synchronized HSSFWorkbook getWorkbook(List[] lists, String[] names){ 
  58.  
  59.         HSSFWorkbook hwb = new HSSFWorkbook();// 新しいHSSFWorkbookインスタンス作成
  60.         //シートをワークブックに追加する
  61.         for(int j=0; j<lists.length; j++){
  62.             HSSFSheet hs1 = hwb.createSheet();// 新しいシート対象を作成する
  63.             hwb.setSheetName(j, names[j]);    // 作成したシートの名称
  64.  
  65.             List excellist=lists[j];
  66.             HSSFFont font = hwb.createFont();
  67.             font.setColor((short) 12);
  68.             HSSFCellStyle style = hwb.createCellStyle();
  69.             style.setFont(font);
  70.  
  71.             HSSFRow hr = hs1.createRow((short) 0);// ヘッダー
  72.             List headerlist=(List)excellist.get(0);
  73.             for (int i = 0; i < headerlist.size(); i++) {
  74.                 HSSFCell cell = hr.createCell((short) i);// セル
  75.                 //cell.setEncoding(HSSFCell.ENCODING_UTF_16);// 必要であればコマンドアウト
  76.                 cell.setCellValue((String)headerlist.get(i));// セル文字列型のセット
  77.                 cell.setCellStyle(style);
  78.             }
  79.             for(int i = 1; i < excellist.size(); i++){
  80.                 List valuelist=(List)excellist.get(i);
  81.                 hr = hs1.createRow((short) i);// 新しい行
  82.                 for (int ii = 0; ii < valuelist.size(); ii++) {
  83.                     HSSFCell cell = hr.createCell((short) ii);// セル
  84.                     //cell.setEncoding(HSSFCell.ENCODING_UTF_16);// 必要であればコマンドアウト
  85.                     cell.setCellValue((String)valuelist.get(ii));// セル文字列型のセット
  86.                 }
  87.             }   
  88.         }       
  89.         return hwb;
  90.     }
  91.     public static void main(String[] args) throws Exception {
  92.     }
  93. }

以下は該当クラスをサブレート上の使用例です。

  1. private void exportList(List numberList,String numType, HttpServletResponse response) throws Exception { 
  2. List excellist = new ArrayList();
  3. String docName = "exp189CDMA.xls";
  4. String sheetname ="";
  5. ExcelUtil excelutil = new ExcelUtil();
  6. try { 
  7. List headerlist = new ArrayList();
  8.  
  9. headFont(headerlist);
  10. headerList(headerlist,numType);
  11. excellist.add(headerlist);
  12. if (numberList.size() > 0) { 
  13. for (int i = 0; i < numberList.size(); i++) { 
  14. Map map =new HashMap();
  15. if(numberList.get(i) instanceof Map){ 
  16. map = (Map)numberList.get(i);
  17. List lineDataList = new ArrayList();
  18. lineDataList.add(map.get("province"));
  19. lineDataList.add(map.get("localname"));
  20. lineDataList.add(map.get("telCode"));
  21. for(int k=0;k<=9;k++){ 
  22. lineDataList.add(map.get("hcode"+k));
  23. } 
  24. excellist.add(lineDataList);
  25. } 
  26. } 
  27. } 
  28. } catch (Exception e) { 
  29. throw e;
  30. } 
  31. response.reset();
  32. response.setCharacterEncoding("UTF-8");
  33. docName = URLEncoder.encode(docName, "UTF-8");
  34. response.setContentType("application/x-msdownload;charset=UTF-8");
  35. response.setHeader("Content-disposition", "attachment; filename=" 
  36. + new String(docName.getBytes("UTF-8"), "UTF-8"));
  37. OutputStream outStream = response.getOutputStream();
  38. excelutil.getWorkbook(excellist, sheetname).write(outStream);
  39. } 
  40.  
  41.  
  42. /**
  43. * エクセルにエクスポート
  44. *
  45. * @param mapping
  46. * @param form
  47. * @param request
  48. * @param response
  49. * @throws Exception
  50. * @throws Exception
  51. */ 
  52. private void exportList(List[] numberList,String[] reportSel, HttpServletResponse response) throws Exception { 
  53. int length = reportSel.length;
  54. String docName = "exp189CDMA.xls";
  55. List[] excellist = new ArrayList[length];//データ配列
  56. String[] sheetnames = new String[length];
  57. for(int i=0;i<length;i++){ 
  58. sheetnames[i] =reportSel[i];
  59. } 
  60. if(StringUtils.isEmpty("")){} 
  61. ExcelUtil excelutil = new ExcelUtil();
  62. for(int n = 0;n<reportSel.length;n++){ 
  63. String selValue = reportSel[n];
  64. if("189H".equals(selValue)){ 
  65. try { 
  66. //新規
  67. excellist[n] = new ArrayList();
  68. List headerlist = new ArrayList();
  69. headFont(headerlist);
  70. //ヘッダコード
  71. headerList(headerlist,"189");
  72. excellist[n].add(headerlist);
  73. List list1 = numberList[n];
  74. if (list1.size() > 0) { 
  75. for (int i = 0; i < list1.size(); i++) { 
  76. Num189CDMAExpVO vo = (Num189CDMAExpVO)list1.get(i);
  77. List lineDataList = new ArrayList();
  78. lineDataList.add(vo.getProvince());
  79. excellist[n].add(lineDataList);
  80. } 
  81. } 
  82. } catch (Exception e) { 
  83. throw e;
  84. } 
  85. } 
  86. response.reset();
  87. response.setCharacterEncoding("UTF-8");
  88. docName = URLEncoder.encode(docName, "UTF-8");
  89. response.setContentType("application/x-msdownload;charset=UTF-8");
  90. response.setHeader("Content-disposition", "attachment; filename=" 
  91. + new String(docName.getBytes("UTF-8"), "UTF-8"));
  92. OutputStream outStream = response.getOutputStream();
  93. excelutil.getWorkbook(excellist, sheetnames).write(outStream);
  94. }
メインコンテンツEND ■
1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
Loading ... Loading ...

Posted on Friday, 15th May 2009 by admin

Tags: , , ,
Posted in Java | Comments (1) | 7,016 views

Related Posts

One Response to “Javaでデータをエクセルにエクスポートするクラスと使用例”

  1. Javaでデータをエクセルにエクスポートするクラスと使用例 … photoshop Says:

    [...] Read the original:  Javaでデータをエクセルにエクスポートするクラスと使用例 … By admin | category: データ書き出し | tags: del, poi, stmt-file, データ書き出し | Palm Desktop の予定データ [...]

Leave a Reply