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ワークシートごとに記録される最大数.コードは次のとおりです.
Java Aspose Cells
Java Aspose Cellsは、純粋なJavaライセンスのExcel API、開発、サプライヤーAsposeのリリースです.このAPIの最新バージョンは8.1.2で、2014年7月にリリースされ、スプレッドシートExcelのコンポーネントを読み取り、書き込み、操作できる豊富で重厚なAPI(通常のJavaクラスとAWTクラスの組み合わせ)設計です.このAPIの一般的な用途は次のとおりです.
JXLはSeleniumサードパーティ向けのフレームワークで、Webブラウザ(データはWebブラウザが自動的に更新する)に基づくデータ駆動の自動化をサポートしています.しかし、基本的な機能はスプレッドシートの作成、読み取り、書き込みが可能であるため、JExcel APIの共通のサポートライブラリとしても使用されています.基本的な特徴は次のとおりです.
JExcel
JExcelはTeam Devが開発・提供する純ラインAPIです.この点でプログラマは、.xlsと.XLSXの2つのフォーマットを簡単に読み取り、書き込み、表示、変更できます.このAPIはJavaのSwingとAWTを容易に埋め込むことができる.このAPIの最新バージョンはJexcel-2.6.12で、2009年に発表されました.主な特徴は以下の通りです.
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チュートリアルを見てみましょう.私もそれを参考に勉強しました.