Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Apache Poi Excel(.xlsx)文件已损坏。(使用XSSF)_Java_Spring_Amazon Ec2_Apache Poi - Fatal编程技术网

Java Apache Poi Excel(.xlsx)文件已损坏。(使用XSSF)

Java Apache Poi Excel(.xlsx)文件已损坏。(使用XSSF),java,spring,amazon-ec2,apache-poi,Java,Spring,Amazon Ec2,Apache Poi,我正在使用并创建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

我正在使用并创建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();
    }

}
import org.apache.poi.ss.usermodel.Row;
导入org.apache.poi.ss.usermodel.Sheet;
导入org.apache.poi.ss.usermodel.工作簿;
导入org.apache.poi.xssf.usermodel.xssf工作簿;
导入org.springframework.web.servlet.view.document.AbstractXlsxView;
受保护的void buildExcelDocument(映射模型、工作簿工作簿、HttpServletRequest请求、HttpServletResponse响应)引发异常{
@抑制警告(“未选中”)
List=(List)model.get(“数据”);
字符串文件名=HttpUtils.uriEncoding(“문의내역리스트.xlsx”,标准字符集,UTF_8);
setContentType(“application/vnd.openxmlformats of icedocument.spreadsheetml.sheet”);
setHeader(“内容处置”、“附件;文件名=\”“+filename+“\”;”;
setHeader(“内容类型”、“应用程序/vnd.openxmlformats of icedocument.spreadsheetml.sheet”);
int cnt=0,rowNum=0;
工作簿wb=新XSSFWorkbook();
工作表=wb.createSheet(“문의내역리스트");
行=空;
row=sheet.createRow(rowNum++);
row.createCell(cnt++).setCellValue(“유형" );
板材.设置柱宽(cnt,30*256);
row.createCell(cnt++).setCellValue(“첨부파일" );
页。设置柱宽(cnt,40*256);
row.createCell(cnt++).setCellValue(“제목" );
板材.设置柱宽(cnt,20*256);
row.createCell(cnt++).setCellValue(“작성자" );
页。设置柱宽(cnt,26*256);
row.createCell(cnt++).setCellValue(“등록일자" );
row.createCell(cnt++).setCellValue(“답변여부" );
int rownum=1;
如果(空!=列表){
对于(董事会条款至bda:列表){
cnt=0;
行=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.写入(文件输出);
fileOut.close();
}
}
本地 Spring4、jdk1.8、Tomcat8.0、maven

Real AWS EC2 Amazon linux2、jdk1.8、tomcat 8.0(不含Apache Web服务器)


3.10.1版

我看不到整个代码, 但是我建议检查这个
响应。getOutputStream()
调试并查看返回的内容,如果该值不是您想要的值,请检查您的响应中可能存在的错误

如果正确,请尝试使用普通字符(非韩语)创建一个简单文件 如果您在创建这个方面没有问题,那么这是一个编码问题。
通过这种方式,您可以找到问题的根本原因。

我不确定这是否能解决您的问题,但当您不再需要工作簿时,总是
wb.close()