我正在使用ApachePOI,我创建了一个XSSF工作簿,并尝试打开一个xlsx文件。它在当地的一个地方很有效。但是,当我用Excel打开真正服务器(AWS EC2、Tomcat8、JDK 1.8)上的Excel文件时,它显示文件已损坏(.xls工作)。这是我的代码:
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.web.servlet.view.document.AbstractXlsxView;
protected void buildExcelDocument(Map<String, Object> model, Workbook workbook, HttpServletRequest request, HttpServletResponse response) throws Exception {
@SuppressWarnings("unchecked")
List<BoardArticleDto> list = (List<BoardArticleDto>)model.get("data");
String filename = HttpUtils.uriEncoding("문의내역리스트.xlsx", StandardCharsets.UTF_8);
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setHeader("Content-Disposition", "attachment; filename=\"" + filename + "\";");
response.setHeader("Content-Type", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
int cnt = 0, rowNum = 0;
Workbook wb = new XSSFWorkbook();
Sheet sheet = wb.createSheet("문의내역리스트");
Row row = null;
row = sheet.createRow(rowNum++);
row.createCell(cnt++).setCellValue( "유형" );
sheet.setColumnWidth(cnt, 30 * 256);
row.createCell(cnt++).setCellValue( "첨부파일" );
sheet.setColumnWidth(cnt, 40 * 256);
row.createCell(cnt++).setCellValue( "제목" );
sheet.setColumnWidth(cnt, 20 * 256);
row.createCell(cnt++).setCellValue( "작성자" );
sheet.setColumnWidth(cnt, 26 * 256);
row.createCell(cnt++).setCellValue( "등록일자" );
row.createCell(cnt++).setCellValue( "답변여부" );
int rownum = 1;
if( null != list ){
for( BoardArticleDto bda : list ){
cnt = 0;
row = sheet.createRow(rownum);
row.createCell(cnt++).setCellValue( Converter.toStr(bda.getCSC_NAME1()) );
row.createCell(cnt++).setCellValue( Converter.toStr(bda.getBDA_FILE1()) );
row.createCell(cnt++).setCellValue( Converter.toStr(bda.getBDA_NAME()) );
row.createCell(cnt++).setCellValue( Converter.toStr(bda.getMB_NAME()) );
row.createCell(cnt++).setCellValue( Converter.toStr(bda.getBDA_INDATE()).substring(0, 10) );
row.createCell(cnt++).setCellValue( Converter.toStr(bda.getBDA_REPLYYN()) );
rownum++;
}
}
OutputStream fileOut = response.getOutputStream();
wb.write(fileOut);
fileOut.close();
}
}
本地Spring4, jdk1.8, tomcat 8.0, maven
真正的AWS EC2亚马逊linux2,jdk1。8、tomcat 8.0(不含Apache Web服务器)
Apache POI版本3.10.1
我不确定这是否能解决你的问题,但总是wb。当您不再需要工作簿时,请关闭()。
我不能看到整个代码,但我建议检查这个response.getOutputStream()
调试,看看这个返回什么,如果值不是你想要的,看看你的响应可能有什么问题。
如果是正确的,试着用正常字符(不是韩语)创建一个简单的文件。如果创建这个文件没有问题,那么这是一个编码问题。通过这种方式,你可以找到问题的根本原因。
我已经在中创建了工作簿/Excel。使用ApachePOIAPI成功实现了xlsx格式与Java的结合。我的代码如下,它是在D驱动器中创建的一个名为“RiponAlWasim.xlsx”的文件: 当我试图打开"RiPonAlWasim.xlsx"时,显示文件已损坏。怎么了?
我正在使用apache poi,我创建了一个HSSF工作簿,并尝试打开一个xlsx文件。但当我用excel打开时,它显示文件已损坏。这是我的密码。
我有一段代码,目前正在写入一个
Docx4J生成的Excel工作簿总是说损坏了,但我无法确定Excel不喜欢底层XML的什么,更不用说如何修复它了。 我的用例如下:我试图定期自动生成一个带有图表和图形的excel工作簿。只有原始数据会改变,但随着原始数据的改变,其他一切都会动态更新。 null null 在我的空白工作簿之前和之后 欢迎所有的想法。
问题内容: 我正在使用角度$ http从服务器下载文件。文件类型可以不同。我应该设置请求标头以进行身份验证。下载完成后,文件已损坏!这是我在客户端保存文件的代码: 问题答案: 我最终通过将以下配置添加到ajax请求中解决了该问题: 并将Blob类型更改为 “应用程序/八位字节流”
我正在尝试重命名现有XLSX文件的标题。这个想法是使用一个excel文件将数据从XML导出到excel,并在某个用户进行调整后重新导入XML。 目前,我们已经用Excel创建了一个“模板”xlsx-sheet,其中已经包含了一个可排序表(poi中的XSSFTable)和一个到XSD-Source的映射。然后通过POI进行导入,将XML数据映射到其中并保存。为了根据用户调整工作表,我们希望将现有表的