簡體   English   中英

如何使用JSP / JSTL創建CSV文件

[英]How to use JSP/JSTL to create a CSV file

我創建了一個jsp文件,上面有一個簡單的表。

我想創建另一個用戶可以在Excel中打開或另存為xls的jsp文件。

這是我的整個jsp文件,它將創建一個csv文件,該文件在單擊鏈接時將在Excel中打開:

<%@ 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" ); %>

<jsp:useBean id="ReportInfo" class="com.reports.ReportLister"  scope="request" />
${ReportInfo.reportType},M,W,Other
<c:forEach var="rrow" items="${ReportInfo.list}"  varStatus="rowCounter">
    ${rrow.subjectCode},${rrow.MCount},${rrow.WCount},${rrow.OCount}
</c:forEach>
Totals,${ReportInfo.totalMSections},${ReportInfo.totalWSections},${ReportInfo.totalOSections}

當我在Excel中打開它時,每行由2行分隔。

有沒有一種簡單的方法可以這樣創建excel文件?

有沒有簡單的方法來添加一些格式(例如列標題的粗體文本)?

更好的方法是Spring及其JExcelView

空行的原因是JSP在循環內渲染了空行。 您可以通過將循環打包到一行來消除它們:

<c:forEach var="rrow" items="${ReportInfo.list}"  varStatus="rowCounter">${rrow.subjectCode},${rrow.MCount},${rrow.WCount},${rrow.OCount}</c:forEach>

或者,您可以添加一個Servlet過濾器,該過濾器將從響應中刪除空行。

但是,如果您要添加特殊格式,我相信這超出了逗號分隔的值格式,並且您需要生成其他人建議的excel本機文件。

編輯:而不是將循環打包到一行中,請嘗試將以下指令添加到您的頁面:

<%@page trimDirectiveWhitespaces="true"%>

一種簡單的方法是利用Excel可以理解HTML的事實。 因此,只需將數據格式化為HTML表格並將其作為XLS文件發送即可。 就像是

<table>
<c:forEach var="rrow" items="${ReportInfo.list}"  varStatus="rowCounter">
<tr><td><b>${rrow.subjectCode}</b></td>
    <td>${rrow.MCount}</td>
    <td>${rrow.WCount}</td>
    <td>${rrow.OCount}</td></tr>
</c:forEach>
</table>

為了創建.xls文件,您將需要比JSTL更重的工作。 Apache POIJExcelApi是用於生成本機Excel格式文件的兩個開源庫。 POI可以同時生成.xls和.xlsx; 我沒有JExcelApi的經驗,但它似乎僅支持.xls。

正如duffymo提到的那樣,Spring具有AbstractExcelView ,您可以擴展它並與任何一個庫一起使用。 但是,如果您不使用Spring,則仍然可以使用其中一個庫來生成Workbook對象,並將其內容寫入ServletResponse的OutputStream。 它們還將使您以各種方式(包括粗體文本)格式化數據,甚至創建注釋和其他Excel元素。

對於.xls文件,您需要將content-type設置為application/vnd.ms-excel ,對於.xlsx application/vnd.openxmlformats-officedocument.spreadsheetml.sheet

JSP並不是完全正確的工具。 使用Servlet類。 為了將某些字節保存在Stackoverflow的數據庫中,這只是我之前在主題上發布的答案的鏈接: 使用JSP導出到excel


也就是說,我對您的代碼和其他答案有幾點評論:

  1. 返回CSV時不要使用XLS內容類型。 這將在打開文件期間導致警告。 使用CSV內容類型: text/csv Excel完全理解這一點。

  2. 請勿使用錯誤的內容類型(表示XLS(X)文件的一種)呈現HTML。 然后,您基本上是在欺騙Excel。 從Excel 2007版開始,它將顯示有關此的警告。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM