2 apbbbbb apbbbbb 于 2017.01.17 14:49 提问

java POI3.8 Excel 下载 发现不可读取内容 解决办法??

图片说明

图片说明

 /**
     * 导出历史记录
     */
    @SuppressWarnings({ "deprecation", "unchecked" })
    @RequestMapping("export-TrainHistoryRecord")
    @ResponseBody
    protected void buildExcelDocument(EmployeeTrainHistoryQuery query,ModelMap model,
            SXSSFWorkbook workbook, HttpServletRequest request,
            HttpServletResponse response) throws Exception {
        //这里使用SXSSFWorkbook对象,支持1048576条数据
        try {
            response.reset();
            // 获得国际化语言
            RequestContext requestContext = new RequestContext(request);
            String CourseCompany = requestContext
                    .getMessage("manage-student-trainRecods");
            response.setContentType("APPLICATION/vnd.ms-excel;charset=UTF-8");
            // 注意,如果去掉下面一行代码中的attachment; 那么也会使IE自动打开文件。
            response.setHeader(
                    "Content-Disposition",
                    "attachment; filename="
                            + java.net.URLEncoder.encode(
                                    DateUtil.getExportDate() + ".xlsx", "UTF-8"));//Excel 扩展名指定为xlsx  SXSSFWorkbook对象只支持xlsx格式
            OutputStream os = response.getOutputStream();// new 

            CellStyle style = workbook.createCellStyle();
            // 设置样式
            style.setFillForegroundColor(HSSFColor.SKY_BLUE.index);
            style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
            style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
            style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
            style.setBorderRight(HSSFCellStyle.BORDER_THIN);
            style.setBorderTop(HSSFCellStyle.BORDER_THIN);
            style.setAlignment(HSSFCellStyle.ALIGN_CENTER);

            String employeeCode = requestContext.getMessage("employeeCode");
            String employeeName = requestContext.getMessage("employeeName");
            String orgName = requestContext.getMessage("orgName");
            String startDate = requestContext.getMessage("start.date");
            String endDate = requestContext.getMessage("end.date");
            String courseCode = requestContext.getMessage("courseCode");
            String courseName = requestContext.getMessage("courseName");
            String sessionName = requestContext.getMessage("sessionName");
            String hoursNunber = requestContext.getMessage("hoursNunber");

            // FileOutputStream(filePath);
            List<EmployeeTrainHistoryModel> list = null;
             query.setNeedQueryAll(true);
            try {

//          if("0".equals(query.getTrainFlag())){
                query.setTotalItem(employeeTrainHistoryService.fetchCountEmployeeTrainHistoryByQuery(query));

                    int page_size = 100000;// 数据库中存储的数据行数
                    int list_count =query.getTotalItem();
                    int export_times = list_count % page_size > 0 ? list_count / page_size
                            + 1 : list_count / page_size;
                    for (int m = 0; m < export_times; m++) {
                        query.setNeedQueryAll(false);
                        query.setPageSize(100000);//每页显示多少条数据
                        query.setCurrentPage(m+1);//设置第几页
                         list=employeeTrainHistoryService.getEmployeeTrainHistoryByQuery(query);
                         int len = list.size() < page_size ? list.size() : page_size;
                        //新建sheet
                         Sheet sheet = null;
                            sheet = workbook.createSheet(System.currentTimeMillis()
                                    + CourseCompany+m);
//                       for (int n = 0; n < len; n++) {
                            // 迭代数据
                            if (list != null && list.size() > 0) {

                                int rowNum = 1;
                                int max_row=300000;
                                int sheet_count=0;

                                for (int i = 0; i < list.size(); i++) {
                                    EmployeeTrainHistoryModel history=list.get(i);
                                    //如果当前行超过单页签可容纳最大行则换页签
//                                  if(i==0||i==(max_row*sheet_count+1)){


                                        sheet.setDefaultColumnWidth((short) 17);
                                        // 创建属于上面Sheet的Row,参数0可以是0~65535之间的任何一个,
                                        Row header = sheet.createRow(0); // 第0行

                                        // 产生标题列
                                        Cell cell;
                                            String[] headerArr = new String[] { employeeCode, employeeName,
                                                    orgName, startDate, endDate, courseCode, courseName, sessionName,
                                                    hoursNunber };
                                            for (int j = 0; j < headerArr.length; j++) {
                                                cell = header.createCell((short) j);
                                                cell.setCellStyle(style);
                                                cell.setCellValue(headerArr[j]);
                                            }

                                    Row row = sheet.createRow(rowNum++);
                                    row.createCell((short) 0).setCellValue(
                                            history.getEmployeeCode());
                                    row.createCell((short) 1).setCellValue(
                                            history.getEmployeeName());
                                    row.createCell((short) 2)
                                            .setCellValue(history.getOrgName());
                                    if (history.getTrainBeginTime() != null) {
                                        row.createCell((short) 3).setCellValue(
                                                DateUtil.toString(history.getTrainBeginTime()));
                                    } else {
                                        row.createCell((short) 3).setCellValue("");
                                    }
                                    if (history.getTrainEndTime() != null) {
                                        row.createCell((short) 4).setCellValue(
                                                DateUtil.toString(history.getTrainEndTime()));
                                    } else {
                                        row.createCell((short) 4).setCellValue("");
                                    }
                                    row.createCell((short) 5).setCellValue(
                                            history.getCourseCode());
                                    row.createCell((short) 6).setCellValue(
                                            history.getCourseName());
                                    row.createCell((short) 7).setCellValue(
                                            history.getSessionName());
                                    if (history.getHoursNumber() != null)
                                        row.createCell((short) 8).setCellValue(
                                                history.getHoursNumber().toString());
                                }
                            }

                            list.clear();
                         }

            } catch (Exception e) {
                e.printStackTrace();
            }

            try {
                workbook.write(os);
                model.put("msg", "1");
                os.close();
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

2个回答

seven_7small
seven_7small   2017.01.17 14:55

版本对不上,本地安装的excel版本跟开发使用的版本不一致

seven_7small
seven_7small 回复479925485: 最好不要一个项目有相同的jar,不然会报错的
一年多之前 回复
apbbbbb
apbbbbb 如果我添加新的jar包,那以前用老版本写的poi还能用么
一年多之前 回复
apbbbbb
apbbbbb 老的是这样<!--xls parse denpendency --> <dependency> <groupId>net.sourceforge.jexcelapi</groupId> <artifactId>jxl</artifactId> </dependency>
一年多之前 回复
u014427391
u014427391   2017.01.17 15:53
apbbbbb
apbbbbb 你这个使用的还是老版本的HSSFWorkbook 对象,excel每个sheet页只支持6万多条,新版SXSSFWorkbook,我老的可以下载,使用新的打开excel就开始有上面的提示框
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
java下载的excel显示发现不可读取的内容。是否恢复此工作薄的内容?如果信任此工作薄的来源,请单击‘是’。”
启用编辑后,sheet表名被更改,原因是sheet表名中含有“/”,不能被识别,去掉就好了
ExcelLibrary 导出Excel报 “excel发现不可读取的内容”错误
今天使用ExcelLibrary 做导出Excel,可是导出的数据用Excel2007以上版本打开的时候,总是报 “excel发现不可读取的内容”错误,令人非常费解,至今不知道是什么原因。 解决办法: 那就是通过限制导出数据的最少列数,在这段代码里限制为9,其实这个数字也不是准确的,但是是可以的,比如其它数字7,8也是可以,也就是通过这样一个技巧解决了,   ExcelLibrary.Sp
java 从后台下载xlsx格式excel 发现不可读取内容的解决方案
这种问题是因为没加 Content-Length需求1:从服务端下载excel模板这个好办,找到服务端保存的模板,getResourceAsStream拿到输入流,设置Content-length注意输入流的大小是 public int available() throws IOException { return 0; }这个方法response.setHeader(&quot;Content-L...
excel文件中发现不可读取的内容【样式丢失】
java生成excel文件时,文件对应的样式要同步创建,不能使用全局的样式
Java Excel在“xxx.xlsx”中发现不可读取的内容。是否恢复此工作薄的内容?如果信任此工作簿的来源,请点击"是"
具体解决方法参见: http://blog.csdn.net/jiankunking/article/details/75213798个人微信公众号: 作者:jiankunking 出处:http://blog.csdn.net/jiankunking
web工程导出Excel文件打开时显示“Excel在 ** 中发现不可读取的内容。是否恢复此工作簿的内容?....”
一开始以为代码上的问题,调试了很久都没发现问题出在哪里。无意中发现原来是部署时忘了项目的War包权限没有写的权限,导致生成Excel文件时出现以上情况。 解决方法是把war包赋予写权限即可。
EXCEL中发现不可读的内容。是否恢复此工作薄的内容?如果信任此工作薄的来源,请单击”是“
由于业务需要,之前的EXCEL导出方法不能满足需求,因为2003只支持最多256列,但是2007就没有256列这个限制,因此升级NPOI到2.0 使用XSSFWorkbook生成xlsx,等下载下来之后总是提示:EXCEL中发现不可读的内容。是否恢复此工作薄的内容?如果信任此工作薄的来源,请单击”是“ 追求完美的同时无法忍受每次打开都来这么个提示,所以花了些时间来研究,经过不懈努力,以下代码终
excle 由于一些内容不可读取。excle无法打开,提示需要修复
今天在用java进行数据导出,结果数据导出来了,但是excle打开报的有错误信息,如图:             点击打开并修复,查看数据也没问题。开始的时候一直没注意什么不可读取,最后发现 sheel里面的我设置的名称,加了一个时间,估计是有特殊字符的问题。把这个时间去掉,打开excle就没问题,
poi 3.8读取excel表格
读取excel表格是poi中一种常用的方式,一开始没有基础不会写。后来慢慢查了一些,然后给自己也总结一些,想着以后会用到的。 这次用poi是3.8的版本。 本方法在main方法里做个试验。数据是自己普通建的一个表 public static void main(String[] args) {   try {     File excelFile = new File("D:/Excel
NPOI中出现“是否要恢复此工作薄的内容?如果信任此工作薄的来源。。。”的问题的解决方法
把几个ASP.NET中制作Excel报表用NPOI改写后(原来用COM方式),立即有人反映,打开下载的Excel报表时,有提示“是否要恢复此工作薄的内容?如果信任此工作薄的来源,请单击“是”。。。的提示信息,如果选“时”则打印时第二页开始没有(重复的)标题行。         仔细检查发现,俺用Excel2000制作的报表模板文件,使用NPOI中RemoveSheetAt()函数删除表单后,在E