最近、Java を使用して Excel を制御するオープンソースをインターネットで見つけて、Weblogic で試してみましたが、非常に優れていることがわかりました。
まずhttp://www.andykhan.com/jexcelapi/index.htmlにアクセスして最新の JExcelApi をダウンロードし、jxl.jar をクラスパスに追加します。
ここでは、JavaBean を記述し、JExcelApi を使用して Excel ドキュメントを動的に生成します。複雑な場合は、データベースなどにクエリを実行する必要があるかもしれません。
/////////////////////////////Test.java///////////////// ///// ////////////////////////
パッケージcom.jagie.test;
java.io.* をインポートします。
jxl.* をインポートします。
インポート jxl.write.*;
jxl.format.* をインポートします。
java.util.* をインポートします。
インポート java.awt.Color
;
public static void writeExcel(OutputStream os) が例外をスローする {
jxl.write.WritableWorkbook wwb = Workbook.createWorkbook(os);
jxl.write.WritableSheet ws = wwb.createSheet("TestSheet1", 0);
jxl.write.Label labelC = new jxl.write.Label(0, 0, "中国大好き");
ws.addCell(labelC);
jxl.write.WritableFont wfc = new jxl.write.WritableFont(WritableFont.ARIAL,20, WritableFont.BOLD, false,
UnderlineStyle.NO_UNDERLINE、jxl.format.Colour.GREEN);
jxl.write.WritableCellFormat wcfFC = 新しい jxl.write.WritableCellFormat(wfc);
wcfFC.setBackground(jxl.format.Colour.RED);
labelC = new jxl.write.Label(6, 0, "中国は私を愛しています",wcfFC);
ws.addCell(labelC);
// Excel ワークシートに書き込みます wwb.write();
// Excel ワークブック オブジェクトを閉じる wwb.close();
}
//クラスが適切に記述されているかどうかをテストするには、このような main メソッドを作成するのが最善です。
public static void main(String[] args)throws Exception{
ファイル f=新しいファイル("kk.xls");
f.createNewFile();
writeExcel(new FileOutputStream(f));
}
Javabean テストを使用して Excel ドキュメントを出力するための jsp を作成します
。
////////////////////////////test_excel.jsp////////////////// //// //////
< %@page import="com.jagie.test.Test" %>
<%
応答.リセット();
response.setContentType("application/vnd.ms-excel");
Test.writeExcel(response.getOutputStream());
%>
これで、IE を使用して test_excel.jsp にアクセスし、動的に生成された Excel ドキュメントを IE で開くことができます。まったく意味不明なことはありません。
「response.reset(); この文は省略できますか?」と尋ねる人もいるかもしれません。応答バッファに他に何もないことが保証できない限り、この文を記述する必要があります。
< %@page contentType="application/vnd.ms-excel;charset=GBK" %> を jsp の先頭に追加し、response.setContentType("application/vnd.ms-excel" ); を削除します。大丈夫ですか? この質問に対する答えは非常に簡単です。jsp のコンパイル後に jsp サーバーによって生成された Java コードを確認するだけです。これに変更されている場合、test_excel.jsp のコンパイル後に welogic7 によって生成された Java ファイルの概略コードは次のようになります。次のように:
public void _jspService(javax.servlet.http.HttpServletRequest request,
javax.servlet.http.HttpServletResponse 応答) java.io.IOException をスローします。
javax.servlet.ServletException {
// 既知の変数を宣言して設定します。
javax.servlet.ServletConfig config = getServletConfig();
javax.servlet.ServletContext アプリケーション = config.getServletContext();
javax.servlet.jsp.tagext.Tag _activeTag = null;
// タグ拡張プロトコルの変数
オブジェクト ページ = this;
javax.servlet.jsp.JspWriter 出力;
javax.servlet.jsp.PageContext pageContext =
javax.servlet.jsp.JspFactory.getDefaultFactory().getPageContext(this,
リクエスト、レスポンス、null、true、8192、true);
response.setHeader("Content-Type", "application/vnd.ms-excel; charset=GBK");
out = pageContext.getOut();
JspWriter _originalOut = out
javax.servlet.http.HttpSession session = request.getSession(true);
// エラー ページ try ブロック;
response.setContentType("application/vnd.ms-excel;charset=GBK");
out.print("rnrnrnrn");
out.print("rn");
//[ /test_excel.jsp 行: 6]
応答.reset(); //[/test_excel.jsp 行: 7]
//response.setContentType("application/vnd.ms-excel");
//[ /test_excel.jsp 行: 8]
Test.writeExcel(response.getOutputStream()); //[ /test_excel.jsp 行: 9]
} catch (Throwable __ee) {
while (out != null && out != _originalOut) out = pageContext.popBody();
((weblogic.servlet.jsp.PageContextImpl)pageContext).handlePageException((Throwable)__ee);
}
//最後の閉じ中括弧の前...
明らか
に、response.setContentType("application/vnd.ms-excel"); をブロックした後、Test.writeExcel(response.getOutputStream()); の前、および response.reset(); の後の、応答 contenttype の正しいタイプは次のとおりです。設定されていない場合、もちろん出力は文字化けします。 Excel を正しく出力する jsp のコンパイル済みソース コードは次のとおりです。
public void _jspService(javax.servlet.http.HttpServletRequest request,
javax.servlet.http.HttpServletResponse 応答) java.io.IOException をスローします。
javax.servlet.ServletException
{
// 既知の変数を宣言して設定します。
javax.servlet.ServletConfig config = getServletConfig();
javax.servlet.ServletContext アプリケーション = config.getServletContext();
javax.servlet.jsp.tagext.Tag _activeTag = null;
// タグ拡張プロトコルの変数
オブジェクト ページ = this;
javax.servlet.jsp.JspWriter 出力;
javax.servlet.jsp.PageContext pageContext =
、
リクエスト、レスポンス、null、true、8192、true);
JspWriter _originalOut = out
javax.servlet.http.HttpSession session = request.getSession(true);
// エラー ページ try ブロック;
out.print("rn");
//[ /test_excel.jsp 行: 2]
応答.reset(); //[ /test_excel.jsp 行: 3]
response.setContentType("application/vnd.ms-excel"); //[ /test_excel.jsp; 行: 4]
Test.writeExcel(response.getOutputStream()); //[ /test_excel.jsp; 行: 5]
} catch (Throwable __ee) {
while (out != null && out != _originalOut) out = pageContext.popBody();
((weblogic.servlet.jsp.PageContextImpl)pageContext).handlePageException((Throwable)__ee);
}
//最後の閉じ中括弧の前...
response.reset(); の後と Test.writeExcel(response.getOutputStream()); の前に、応答の出力コンテンツが正しく設定されていることがわかります
。
したがって、出力は正常です。
最後に、この記事があなたのインスピレーションになれば幸いです。間違いがあれば、批判して修正してください。