java excel 写入与下载实现 (解决乱码问题)
情况描述:
Excel的默认编码格式是 ANSI,但是 office 版本有很多
旧版本的excel无法打开utf-8编码的文件,只能打开ANSI编码的文件 (如office2007版本)
新版本的excel可以打开utf-8编码的文件,也能打开ANSI编码的文件 (如office2010版本)
因此,不能只是输出一个文件然后给它命名为 .csv/.xlx 这样无法做到版本兼容
解决方式:
生成一个excel然后再输出,这样就可以做到版本兼容
代码:
1,2,3
4,5,6
7,8,9
文件内容如上所示,然后写入到excel并输出
/*** 将文本内容写入Excel,然后下载该Excel* @param pathfile 待读取的文本路径* @param response 响应* @param fileName 生成的Excel文件名称 (XXX.xls)*/public void downLoadFile(String pathfile, HttpServletResponse response, String fileName) {try {//解决下载后的文件中文名乱码问题fileName = new String(fileName.getBytes("GBK"), "iso-8859-1");} catch (UnsupportedEncodingException e) {logger.error("", e);view.viewString(ParamUtils.errorParam("不支持iso-8859-1编码格式"), response);}//声明一个工作薄HSSFWorkbook workbook = new HSSFWorkbook();//生成一个表格HSSFSheet sheet = workbook.createSheet(fileName);//向excel中写入内容FileInputStream fis = null;InputStreamReader isr = null;BufferedReader br = null;try {fis = new FileInputStream(pathfile);isr = new InputStreamReader(fis,"utf-8");br = new BufferedReader(isr);String line;int i = 0;//按行读取文件中的内容,然后写入Excel中(PIO也可以设置Excel的样式)while((line = br.readLine()) != null){String str = line;String[] splits = str.split(",");HSSFRow nrow = sheet.createRow(i);for (int j = 0; j < splits.length; j++) {HSSFCell nCell = nrow.createCell(j);nCell.setCellValue(splits[j]);}i++;}} catch (FileNotFoundException e) {logger.error("指定的读取文件不存在\"", e);} catch (UnsupportedEncodingException e) {logger.error("文本内容不能转成 utf-8", e);} catch (IOException e) {logger.error("写入内容出错", e);} finally {try {fis.close();isr.close();br.close();} catch (IOException e) {logger.error("读取流关闭异常", e);}}//输出excelresponse.reset();response.setCharacterEncoding("utf-8");// Content-disposition 告诉浏览器以下载的形式打开response.setHeader("Content-disposition", "attachment; filename=" + fileName);// application/ms-excel;charset=utf-8 告诉浏览器下载的文件是excelresponse.setContentType("application/ms-excel");OutputStream out = null;try {out = new BufferedOutputStream(response.getOutputStream());workbook.write(out);} catch (IOException e) {logger.error("excel导出有误", e);} finally {try {out.close();} catch (IOException e) {logger.error("读取内容有误", e);}}}
java excel 写入与下载实现 (解决乱码问题)相关推荐
- inputstream读取html乱码,java InputStream 读取汉语言内容的解决乱码
java InputStream 读取中文内容的解决乱码 String suffix=file.substring(file.lastIndexOf('.')+1,file.length()); if ...
- Asp.net生成Excel文件并下载(解决使用迅雷下载页面而不是文件的问题)
这里采用的是在服务端先生成Excel文件,然后利用文件地址下载的方法. 先试用Response.WriteFile的方法: FileInfo fi = new FileInfo(excelFile); ...
- vue 二进制文件的下载(解决乱码和解压报错)
问题描述:项目中使用的是vue框架进行开发,因为文件下载存在权限问题,所以并不能通过 a 链接的 href 属性直接赋值 URL进行下载, (如果你的文件没有下载权限,可以直接通过href属性赋值UR ...
- java excel导出并下载
在使用时,直接传递参数并调用该方法即可 import java.io.BufferedOutputStream; import java.io.ByteArrayOutputStream; impor ...
- Java excel大批量图片数据导出解决内存溢出问题
如果使用poi直接将所有图片一张张写到excel里,最后excel里图片达到10000张之后,内存就快爆掉了,所以,使用该方法将图片写到磁盘里,最后一次性替换掉,目前没有找到更好的方法,暂时使用该方法 ...
- java 批量写入文件_Java批量写入文件和下载图片的示例代码
很久没有在WhitMe上写日记了,因为觉着在App上写私密日记的话肯定是不安全的,但是想把日记存下来.,然后看到有导出日记的功能,就把日记导出了(还好可以直接导出,不然就麻烦点).导出的是一个html ...
- java迅雷下载excel,Asp.net生成Excel文件并下载(更新:解决使用迅雷下载页面而不是文件的问题)...
(一) 如果在迅雷的下载对话框中点取消,则会使用IE的下载,这里的文件又是正确的了: 怀疑迅雷是根据下载对话框中的网址重新请求下载,与发起请求的页面已经无关,而IE又不会把ViewState信息传到迅 ...
- java下载乱码怎么解决_java下载文件出现乱码怎么解决
java下载文件出现乱码怎么解决 发布时间:2020-06-24 13:12:27 来源:亿速云 阅读:108 作者:Leah 这期内容当中的小编将会给大家带来有关java下载文件出现乱码的解决方法, ...
- 【原】Asp.net生成Excel文件并下载(更新:解决使用迅雷下载页面而不是文件的问题)...
这里采用的是在服务端先生成Excel文件,然后利用文件地址下载的方法. 生成Excel文件的方法,见:[原].Net创建Excel文件(插入数据.修改格式.生成图表)的方法 先试用Response.W ...
最新文章
- 怎么知道一名研究生有没有科研潜力?
- django-Modelform
- 给定2个字符串,如何计算变化(插入、删除、替换)?【levenshtein distance 算法】
- tomcat启动占了12g_windows server tomcat服务器部署内存占用高问题
- boost::callable_traits的is_const_member的测试程序
- [SDOI2013]直径 (树的直径,贪心)
- Swift调用第三方OC项目
- 排序算法(5)----堆排序
- pycharm的background task一直更新index,速度慢的解决方法
- 为什么java button 不能用 显示红色_Java中的整型包装类值的比较为什么不能用==比较?原因是因为缓存...
- uRPF Unicast Reverse Path Forwarding
- macOS Mac10.15修改登录界面背景
- 《python 计算机视觉编程》教程+图片+代码
- 使用高德地图自定义marker、infowindow
- 字符串练习:手机号码屏蔽,身份证号码信息查看,游戏骂人敏感词替换
- android 7.0 漏洞利用,谷歌 Android 移动操作系统中的零日漏洞被攻击者利用
- 大数据高级开发工程师——Spark学习笔记(9)
- 数据集特征提取_特征提取和选择
- 鸿蒙系统新平板,华为官宣新款MatePad Pro,首款鸿蒙系统平板
- CUDA学习之CUDA执行模型--part3
热门文章
- android设置edittext字数,Android EditText最大字数限制并提示
- 如何下载丰台区卫星地图高清版大图
- 中兴c300业务板_全新中兴C300 OLT ETGO板卡 业务板 EPON PON板 GTGO板卡
- 梁少爷的前端之旅(3)
- 国际通信出入口局管理办法—中华人民共和国信息产业部令第22号
- 考研英语长难句(刘晓燕)笔记 第三课 名词(短语)和名词性从句
- JScrollPane中添加组件时滚动条不出现或添加组件显示不全解决方案
- thymeleaf:字符串Strings常见的使用方法
- 汽车防振橡胶隔离器安装座的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
- 你给我的感悟,我读懂了文字