2


1

JSP / JSTLを使用してCSVファイルを作成する方法

単純なテーブルを含むjspファイルを作成しました。

ユーザーがExcelで開くか、xlsとして保存できる別のjspファイルを作成したいと思います。

これは私のjspファイル全体です。リンクをクリックするとExcelで開くcsvファイルが作成されます。

<%@ page contentType="text/html;charset=windows-1252"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt"uri="http://java.sun.com/jsp/jstl/fmt" %>
<% response.setContentType("application/vnd.ms-excel");
   response.setHeader("Content-Disposition","attachment; filename=" + "online-dashboard.csv" ); %>


${ReportInfo.reportType},M,W,Other

    ${rrow.subjectCode},${rrow.MCount},${rrow.WCount},${rrow.OCount}

Totals,${ReportInfo.totalMSections},${ReportInfo.totalWSections},${ReportInfo.totalOSections}

Excelで開くと、各行が2行で区切られています。

この方法でExcelファイルを簡単に作成する方法はありますか?

書式設定(列ヘッダーの太字テキストなど)を追加する簡単な方法はありますか?

5 Answer


2


より良い方法は、Springとそのhttp://zhoupengylx.blogspot.com/2010/02/how-to-use-jexcel-with-spring-3-on.html[JExcelView]です。


1


空行を取得する理由は、JSPがループ内で空行をレンダリングしているためです。 ループを1行にまとめることで、それらを削除できます。

${rrow.subjectCode},${rrow.MCount},${rrow.WCount},${rrow.OCount}

または、応答から空の行を取り除くサーブレットフィルターを追加することもできます。

ただし、特別な書式設定を追加する場合は、コンマ区切り値の形式を超えており、他の人が提案するExcelネイティブファイルを生成する必要があると思います。

*編集:*ループを1行にパックする代わりに、次のディレクティブをページに追加してみてください。

<%@page trimDirectiveWhitespaces="true"%>


1


*簡単な方法*は、ExcelがHTMLを理解できるという事実を使用することです。 したがって、データをHTMLテーブルとしてフォーマットし、XLSファイルとして送信します。 何かのようなもの

${rrow.subjectCode}

$ \ {rrow.MCount}

$ \ {rrow.WCount}

$ \ {rrow.OCount}


0


xlsファイルを作成するには、JSTLよりも頑丈なものが必要です。 Apache POIおよびhttp://jexcelapi.sourceforge.net/[JExcelApi]は、ネイティブExcel形式ファイルを生成するための2つのオープンソースライブラリです。 POIは.xlsと.xlsxの両方を生成できます。 JExcelApiの経験はありませんが、.xlsのみをサポートしているようです。

duffymoが示唆しているように、Springにはhttp://static.springsource.org/spring/docs/2.0.8/reference/view.html#view-document-configsubclasses[AbstractExcelView]があり、これを拡張していずれかのライブラリで使用できます。 ただし、Springを使用していない場合でも、いずれかのライブラリを使用してWorkbookオブジェクトを生成し、そのコンテンツをServletResponseのOutputStreamに書き込むことができます。 また、さまざまな方法(太字テキストを含む)でデータをフォーマットし、コメントやその他のExcel要素を作成することもできます。


0


JSPはこれに完全に適したツールではありません。 サーブレットクラスを使用します。 Stackoverflowのデータベースにいくつかのバイトを保存するために、このテーマについて以前に投稿した回答へのリンクを次に示します。https://stackoverflow.com/questions/1755509/jsp-page-without-html-code-for-exporting-data- to-excel-sheet / 1755605#1755605 [JSPを使用してExcelにエクスポート]。

'' '' '

そうは言っても、あなたのコードと他の答えにいくつかコメントがあります:

  1. CSVを返すときにXLSコンテンツタイプを使用しないでください。 これは ファイルを開く際の警告。 CSVコンテンツタイプを使用します: text / csv。 Excelはこれを完全に理解しています。

  2. 間違ったコンテンツタイプ(HTML XLS(X)ファイル)。 基本的にExcelをだましています。 Excelバージョン2007以降、それに関する警告が表示されます。