JAVAでExcelのエクスポートを実現

6971 ワード

JavaでデータをExcelにエクスポートする機能を完成させ、まずどのJava ExcelAPIがあるかを知ります.
Java Aspose Cells
        Java Aspose Cellsは、純粋なJavaライセンスのExcel API、開発、サプライヤーAsposeのリリースです.このAPIの最新バージョンは8.1.2で、2014年7月にリリースされ、スプレッドシートExcelのコンポーネントを読み取り、書き込み、操作できる豊富で重厚なAPI(通常のJavaクラスとAWTクラスの組み合わせ)設計です.このAPIの一般的な用途は次のとおりです.
  • Excelレポートを作成し、動的Excelレポート
  • の高忠実なExcelレンダリングと印刷
  • Excelスプレッドシートからデータをインポートおよびエクスポート
  • 生成、編集、変換、スプレッドシート
  • JXL
            JXLはSeleniumサードパーティ向けのフレームワークで、Webブラウザ(データはWebブラウザが自動的に更新する)に基づくデータ駆動の自動化をサポートしています.しかし、基本的な機能はスプレッドシートの作成、読み取り、書き込みが可能であるため、JExcel APIの共通のサポートライブラリとしても使用されています.基本的な特徴は次のとおりです.
  • Excelファイル
  • を生成し、ワークブックおよびスプレッドシートからデータ
  • をインポートし、行および列の合計
  • を取得します.ただし、JXLはxlsファイル形式のみをサポートし、ビッグデータ量を処理できません.

  • JExcel
            JExcelはTeam Devが開発・提供する純ラインAPIです.この点でプログラマは、.xlsと.XLSXの2つのフォーマットを簡単に読み取り、書き込み、表示、変更できます.このAPIはJavaのSwingとAWTを容易に埋め込むことができる.このAPIの最新バージョンはJexcel-2.6.12で、2009年に発表されました.主な特徴は以下の通りです.
  • Excelアプリケーション、ワークブックの自動化ワークシート等の
  • は、Java Swingアプリケーションで通常のSwingコンポーネントとしてワークブック
  • に埋め込まれたイベントリスナーがワークブック及びスプレッドシート
  • に追加するイベントハンドラを追加して処理するワークブック及びスプレッドシートイベントの挙動
  • にローカルピア開発カスタム機能
  • を追加する.
    Apache POI
            Apache POIは、Apacheソフトウェア財団が提供する100%オープンソースライブラリです.ほとんどの中小規模のアプリケーション開発は主にApache POI(HSSF+XSSF)に依存している.Excelライブラリのすべての基本機能をサポートします.しかし、プレゼンテーションとテキスト抽出が主な特徴です.
            今回私が使ったのは最後のApache POIです.まずは総合的な方法exportExcel_2007年には、sheetNameワークシートの名前と4つの主要パラメータが入力されました.Datasetデータソース;FieldMapクラスの英語属性とExcelの中国語列名の対応関係;sheetSizeワークシートごとに記録される最大数.コードは次のとおりです.
    /**
       * @param sheetName       
       * @param dataset    
       * @param fieldMap        Excel           
       * @param sheetSize              
       * @return
       * @throws Exception
       */
      public  Workbook exportExcel_2007(String sheetName, List dataset,
                                                 LinkedHashMap fieldMap, int sheetSize, List modelAttrs) throws Exception {
        if(dataset==null || dataset.size()==0) {
          throw new RuntimeException("      ");
        }
    
        SXSSFWorkbook wb = new SXSSFWorkbook(1000);
    
        //1.           
        double sheetNum = Math.ceil(dataset.size()/new Integer(sheetSize).doubleValue());
    
        //2.        ,        
        for(int i=0; idataset.size()-1 ? dataset.size()-1 : (i+1)*sheetSize-1;
            //     
            fillSheet(sheet, dataset, fieldMap, firstIndex, lastIndex,modelAttrs);
            setColumnBorderAndColor(wb,sheet);
          }
        }
        return wb;
      }
    
            ワークシートを作成するには、ヘッダーとテーブルボディを塗りつぶす必要があります.ここのヘッダはダイナミックなので、パラメータを1つ多く入力して相関判断を行います.ヘッダーとボディを埋める関数はfillSheetです.コードは次のとおりです:
    /**
       * @MethodName  : fillSheet
       * @Description :          
       * @param sheet          
       * @param list           
       * @param fieldMap              Map
       * @param firstIndex      
       * @param lastIndex       
       */
      private  void fillSheet(
              Sheet sheet,
              List list,
              LinkedHashMap fieldMap,
              int firstIndex,
              int lastIndex,
              List modelAttrs
      )throws Exception{
    
        //                  
        String[] enFields=new String[fieldMap.size()];
        String[] cnFields=new String[fieldMap.size()];
    
        //    
        int count=0;
        for(Map.Entry entry:fieldMap.entrySet()){
          enFields[count]=entry.getKey();
          cnFields[count]=entry.getValue();
          count++;
        }
    
        //    
        Row firstRow = sheet.createRow(0);
        for(int i=0;i item= (Map) list.get(index);
          for(int i=0;i
            まず、ヘッダーのデータを2つの配列に入れます.1つは中国語のヘッダーで、1つは英語のcodeで、表体を一致させるために使用されます.その後、新しいfirstRowに中国語の表体が埋め込まれます.        ヘッダが完了すると、データソースに基づいてテーブルを埋め込むが、データソースは複雑なmapListであるため、埋め込まれたvalueを抽出処理する必要がある.私はここでいくつかの方法を書いて、その中で異なるタイプのデータ処理に対して1つのセンサを書いて、センサのタイプ処理を使わないコードが多すぎて、貼らない.とにかく欲しいデータを取り出せばいいので、複雑に書かなくてもいいです.コードは次のとおりです:
    /**
       * @MethodName  : getFieldValueByNameSequence
       * @Description :
       *           
       *
       * @param fieldNameSequence       
       * @param o   
       * @return     
       * @throws Exception
       */
      private String getFieldValueByNameSequence(String fieldNameSequence, Map o,ModelAttrType type) throws Exception{
        String value=null;
        return value = getFieldValueByName(fieldNameSequence,o,type);
      }
    
    
    /**
       * @MethodName  : getFieldValueByName
       * @Description :           
       * @param fieldName    
       * @param o   
       * @return     
       */
      private String getFieldValueByName(String fieldName, Map o,ModelAttrType type) throws Exception{
        Object value=null;
        value=getFieldByName(fieldName, o);
        String valueStr = insAttrValueAwareProcessor.convertToExcel(type, value);
        return valueStr;
      }
    
    
      /**
       * @MethodName  : getFieldByName
       * @Description :          
       * @param fieldName    
       * @param
       * @return   
       */
      private static Object getFieldByName(String fieldName, Map  o){
        if(o == null){
          return null;
        }
        return o.get(fieldName);
      }
    
            データを入力したら、ワークシートのスタイルを簡単に設定し、実際の状況を具体的に見る必要があります.コードは次のとおりです:
      /**
       * @MethodName  : setColumnAutoSize
       * @Description :               
       * @param ws
       */
      private static void setColumnAutoSize(Sheet ws,int extraWith){
        //             
        for(int i=0;i
            Apache POIを深く知りたい方は、このチュートリアルApache POIチュートリアルを見てみましょう.私もそれを参考に勉強しました.