- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
据我了解,AbstractExcelView 类函数 buildExcelDocument 不支持 XSSFWorkbook ( https://jira.spring.io/browse/SPR-6898 )。
我正在尝试通过如下实现 buildExcelDocument 函数来解决此问题:
Workbook workbook = null;
protected void buildExcelDocument(Map model,
HSSFWorkbook wbook,
HttpServletRequest request,
HttpServletResponse response) throws Exception {
if(request.getRequestURL().toString().contains("xlsx")){
workbook = new XSSFWorkbook();
workbook.createSheet();
excelVersion = "xlsx"; //Used to determine response
}else{
workbook = wbook;
}
buildBothExcelDocument(model,workbook,request,response);
}
在这里,我的 buildBothExcelDocument 函数将使用 Apache SS 用户模型生成和创建两个 excel 版本、HSSFWorkbook 和 XSSFWorkbook。创建工作簿后,我将创建一个标题,提示用户保存或打开 excel 文件:
if(excelVersion.equals("xlsx")){
response.setHeader("Pragma", "public");
response.setHeader("Cache-Control", "max-age=0");
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setHeader("Content-Disposition", "attachment; filename=test.xlsx");
}else{
response.setHeader("Pragma", "public");
response.setHeader("Cache-Control", "max-age=0");
response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-Disposition", "attachment; filename=\"test.xls\"");
}
上述所有代码在使用 HSSFWorkbook 时均有效。工作簿的数据可以正确创建、可以下载,并且可以使用 Microsoft Excel 2003 或 Microsoft Excel 2007 正确打开。
当我尝试创建 .xlsx 文件时,我在打开时收到错误消息“Excel 无法打开文件‘test.xlsx’,因为文件格式或文件扩展名无效。请确认文件未损坏并且文件扩展名与文件格式匹配”。这让我相信 Spring 的某个地方损坏了我的文件。我的问题是:
1 - 我的响应内容类型和标题是否正确? (来源:What is correct content-type for excel files?)
2 - 有什么方法可以使用 Spring 和 AbstractExcelView 创建 xlsx excel 文件吗?
3 - Spring 完全支持 XSSFWorkbook 吗?
一些补充说明:
Apache POI 版本 - v3.9
我在创建标题时尝试了以下方法:
response.setHeader("Content-Disposition", "attachment; filename=\"test.xlsx\"");
和
response.setHeader("Content-Disposition", "attachment; filename='test.xlsx'");
都产生相同的失败结果。
我使用以下链接帮助转换我的旧 HSSF 代码以使用 SS 用户模型,http://poi.apache.org/spreadsheet/converting.html .我在没有 Spring 干扰的情况下测试了这个转换过程,并且能够成功创建 xls 和 xlsx 文件。感谢您的帮助。
最佳答案
您可以创建自定义 AbstractExcelView 并从该类扩展您的 View 。请参阅下面的示例代码。
import java.io.ByteArrayOutputStream;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.web.servlet.view.AbstractView;
public abstract class CustomAbstractExcelView extends AbstractView {
@Override
protected boolean generatesDownloadContent() {
return true;
}
@Override
protected final void renderMergedOutputModel(Map<String, Object> model, HttpServletRequest request, HttpServletResponse response) throws Exception {
final ByteArrayOutputStream baos = createTemporaryOutputStream();
final Workbook workbook = new XSSFWorkbook();
this.buildExcelDocument(model, workbook, request, response);
workbook.write(baos);
this.writeToResponse(response, baos);
}
protected abstract void buildExcelDocument(Map<String, Object> model, Workbook workbook, HttpServletRequest request, HttpServletResponse response) throws Exception;
}
关于java - 使用 XSSFWorkbook 和 AbstractExcelView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22311771/
我使用此代码将 Excel 中的字体更改为我定义的颜色 Color sColor = new Color (value,0,0); XSSFColor userColo
我创建 CSV 到 XLSX 应用程序 - My first question Exception in thread "main" java.lang.NoClassDefFoundError: o
我正在尝试制作这样的 XSSFWorkbook File file = new File(fileName); Workbook workbook = new XSSFWorkbook(file);
我创建 CSV 到 XLSX 应用程序 - My first question Exception in thread "main" java.lang.NoClassDefFoundError: o
我正在使用以下代码: File file = new File("abc.xlsx"); InputStream st = new FileInputStream(file); XSSFWorkboo
我正在尝试以 excel 格式保存用户定义对象的列表,即来自 REST API 的 .xlsx 格式。这会创建一个 XSSF 工作簿 并将数据存储在工作簿中。返回 字节数组输入流 .在我的实体类中,我
我目前有一个 XSSFWorkbook,并且想将其转换或以某种方式将其更改为 Java 代码中的 File。有什么办法可以做到吗? 最佳答案 使用XSSFWorkbook.write(java.io.
我正在开发一个程序,该程序从 Excel 电子表格中读取每一行和单元格,然后从特定行的每个单元格中获取数据,并使用该数据进行 Web 服务调用。一旦我收到 Web 服务 XML 响应的返回,我就会解析
我编写了一些 Java 代码,它从三个电子表格中获取信息,并在具有 4GB 内存的机器上生成一个大型电子表格(10 列,26,950 行)。它在生成电子表格时崩溃了(内存不足),但是通过重写代码以一次
我在创建新的 xlsx 文件时遇到 XSSFWorkbook api 问题。 场景:我的 gui 菜单中有一个菜单项“新建文件”,它从流创建新的 xlsx 文件。第一次当我单击菜单项“新建文件”时,会
使用 POI 时,Excel 文档中的单元格和字体包含颜色信息,这些信息并不总是返回 rgb 值,而且通常只提供索引值。必须根据某些内容查找索引值以获得颜色。在 HSSFWorkbook (xls)
如果我通过构造函数 XSSFWorkbook() 创建 XSSFWorkbook,是否可以创建空主题?我可以创建新主题,但不能完全创建。我可以在文件 content_types.xml 和/xl/_r
我正在使用 Spring 3 AbstractExcelView使用导出到 Excel 功能将文件下载到 .xls格式,但当我的行大于 65536 时,它会引发异常: Invalid row numb
我需要密码保护 XSSFWorkBook。对于 HSSF,我可以轻松完成,但相同的实现不适用于 XSSFWorkBook。 我正在使用 Apache POI 3.6 和 3.9。我的意思是我尝试使用
我在共享访问由 JAVA 程序追加的 EXCEL 文件时遇到问题。一切正常,直到文件未被其他人访问且仍处于打开状态,同时程序再次运行 - 至少每 10 分钟一次。 API 告诉我类似文件正在使用且无法
我正在尝试使用 Jersey 生成 XSSFWorkbook。 我已经尝试了以下 header ,但似乎没有任何效果: @Produces("应用程序/xml") @Produces("applica
我有这个网页单击按钮时,它会读取数据并将文件保存到位置 xyz。 我不想要这样。我想通过 chrome 浏览器下载它。 如何发送下面的回复? 给出错误的行是response.getOutputStre
package apsel5; import java.io.FileInputStream; import java.util.Iterator; import org.apache.poi.sl.
据我了解,AbstractExcelView 类函数 buildExcelDocument 不支持 XSSFWorkbook ( https://jira.spring.io/browse/SPR-6
我们有一个预先创建的 excel 文件,其中包含交叉引用工作表的精美图表和公式。它还包含宏。源数据应该复制粘贴到一张纸上,工作簿的其余部分从预先存在的布线中填充。 注意:我真的不关心阅读/修改这个工作
我是一名优秀的程序员,十分优秀!