开发者社区> 问答> 正文

Excel模板导出报错?报错

Excel模板导出时报错,后台打印路径是对的,模板文件也读取到了,但是报这个错误:

Unable to read entire block; 88 bytes read; expected 512 bytes“”

‘无法读取整个模块,读取88字节;预期为512字节;’百度了下,不知道该怎么修改;

代码如下:

package com.bky.excel.poi;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.bky.excel.Excel;
import com.bky.excel.ExcelEnum;
import com.bky.excel.ExcelUtil;
import com.bky.excel.ExcelVo;


public class PoiCxgl {
    private static Logger logger = LoggerFactory.getLogger(PoiCxgl.class);

    public static String exportExcel(Map<String, Object> map, HttpServletRequest request) {
        int status =  (Integer) map.get("status");
        List<?> list = (List<?>) map.get("list");
        BigDecimal je = (BigDecimal) map.get("sum");
        String time = (String) map.get("time");
        String sOut = "";// 导出路径
        String sMould = "";// Excel模板名
        if (ExcelEnum.FYPZ.getCode() == status) {
            sMould = ExcelEnum.FYPZ.getExcel();
            System.out.println("sMould:"+sMould);
        }
        String url = request.getSession().getServletContext().getRealPath("/") + Excel.EXCEL_URL;
        System.out.println("url:"+url);
        File file = new File(url + sMould + Excel.FILE_TYPE_EXCEL);// 读取模板文件
        System.out.println("file:"+file);
        POIFSFileSystem fs;
        try {
            fs = new POIFSFileSystem(new FileInputStream(file));
            HSSFWorkbook wb = new HSSFWorkbook(fs);
            ExcelVo eVo = ExcelUtil.setCellInfo(list, wb, je);
            if (list != null && list.size() > 0) {
                if (status == ExcelEnum.FYPZ.getCode()) {
                    CxglExcel.PzExcel(eVo,je,time);
                }
            }
            // 修改模板内容导出新模板
            sOut = sMould + Excel.FILE_TYPE_EXCEL;
            FileOutputStream out = new FileOutputStream(sOut);
            wb.write(out);
            out.close();
        } catch (FileNotFoundException e) {
            logger.error("模板文件未找到");
        } catch (IOException e) {
            System.out.println("messgae:"+e.getMessage());
            logger.error(e.getMessage());
        }
        return sOut;
    }

}
 

求大神指点!!

 

展开
收起
爱吃鱼的程序员 2020-06-07 17:37:43 619 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB
                        <p>试试 pageoffice 把. pageoffice 已经把接口封装好了.不需要文档的上传下载就可以实现在线打开文档. 代码调用非常简单.</p>
    
                    
    
                        <p>pageOffice引出excel文档,不容易出错</p>
    
    2020-06-07 17:38:01
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
大批量处理excel文件到ODPS中方案 立即下载
JCLI使用说明文档 立即下载
低代码开发师(初级)实战教程 立即下载