Java WorkBook对Excel的基本操作
1、异常java.lang.NoClassDefFoundError: org/apache/poi/UnsupportedFileFormatException
解决方法:使用的poi的相关jar包一定版本一定要相同!!!!!
2、maven所使用jar包,没有使用maven的话,就用poi-3.9.jar和poi-ooxml-3.9.jar(这个主要是用于Excel2007以后的版本)两个jar包就行()
<dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>3.9</version>
</dependency>
<dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>3.9</version>
</dependency>
3、java导入Excel
先上传Excel
//上传Excel
@RequestMapping("/uploadExcel")
public boolean uploadExcel(@RequestParam MultipartFile file,HttpServletRequest request) throws IOException {if(!file.isEmpty()){String filePath = file.getOriginalFilename();//windowsString savePath = request.getSession().getServletContext().getRealPath(filePath);//linux//String savePath = "/home/odcuser/webapps/file";File targetFile = new File(savePath);if(!targetFile.exists()){targetFile.mkdirs();}file.transferTo(targetFile);return true;}return false;
}
在读取Excel里面的内容
public static void readExcel() throws Exception{InputStream is = new FileInputStream(new File(fileName));Workbook hssfWorkbook = null;if (fileName.endsWith("xlsx")){hssfWorkbook = new XSSFWorkbook(is);//Excel 2007}else if (fileName.endsWith("xls")){hssfWorkbook = new HSSFWorkbook(is);//Excel 2003}// HSSFWorkbook hssfWorkbook = new HSSFWorkbook(is);// XSSFWorkbook hssfWorkbook = new XSSFWorkbook(is);User student = null;List<User> list = new ArrayList<User>();// 循环工作表Sheetfor (int numSheet = 0; numSheet <hssfWorkbook.getNumberOfSheets(); numSheet++) {//HSSFSheet hssfSheet = hssfWorkbook.getSheetAt(numSheet);Sheet hssfSheet = hssfWorkbook.getSheetAt(numSheet);if (hssfSheet == null) {continue;}// 循环行Rowfor (int rowNum = 1; rowNum <= hssfSheet.getLastRowNum(); rowNum++) {//HSSFRow hssfRow = hssfSheet.getRow(rowNum);Row hssfRow = hssfSheet.getRow(rowNum);if (hssfRow != null) {student = new User();//HSSFCell name = hssfRow.getCell(0);//HSSFCell pwd = hssfRow.getCell(1);Cell name = hssfRow.getCell(0);Cell pwd = hssfRow.getCell(1);//这里是自己的逻辑student.setUserName(name.toString());student.setPassword(pwd.toString());list.add(student);}}}
}
4、导出Excel
//创建Excel
@RequestMapping("/createExcel")
public String createExcel(HttpServletResponse response) throws IOException {//创建HSSFWorkbook对象(excel的文档对象)HSSFWorkbook wb = new HSSFWorkbook();//建立新的sheet对象(excel的表单)HSSFSheet sheet=wb.createSheet("成绩表");//在sheet里创建第一行,参数为行索引(excel的行),可以是0~65535之间的任何一个HSSFRow row1=sheet.createRow(0);//创建单元格(excel的单元格,参数为列索引,可以是0~255之间的任何一个HSSFCell cell=row1.createCell(0);//设置单元格内容cell.setCellValue("学员考试成绩一览表");//合并单元格CellRangeAddress构造参数依次表示起始行,截至行,起始列, 截至列sheet.addMergedRegion(new CellRangeAddress(0,0,0,3));//在sheet里创建第二行HSSFRow row2=sheet.createRow(1);//创建单元格并设置单元格内容row2.createCell(0).setCellValue("姓名");row2.createCell(1).setCellValue("班级");row2.createCell(2).setCellValue("笔试成绩");row2.createCell(3).setCellValue("机试成绩");//在sheet里创建第三行HSSFRow row3=sheet.createRow(2);row3.createCell(0).setCellValue("李明");row3.createCell(1).setCellValue("As178");row3.createCell(2).setCellValue(87);row3.createCell(3).setCellValue(78);//.....省略部分代码//输出Excel文件OutputStream output=response.getOutputStream();response.reset();response.setHeader("Content-disposition", "attachment; filename=details.xls");response.setContentType("application/msexcel");wb.write(output);output.close();return null;
}
补充说明乱码问题
1、文件名乱码(我发现只要解决了文件名乱码,其他乱码也会跟着解决)response.setHeader("Content-disposition", "attachment; filename=中文.xls");
这个方法可以当做一个公用方法来使用,以后有乱码的都可以调用此方法
public static String toUtf8String(String s){ StringBuffer sb = new StringBuffer(); for (int i=0;i<s.length();i++){ char c = s.charAt(i); if (c >= 0 && c <= 255){sb.append(c);} else{ byte[] b; try { b = Character.toString(c).getBytes("utf-8");} catch (Exception ex) { System.out.println(ex); b = new byte[0]; } for (int j = 0; j < b.length; j++) { int k = b[j]; if (k < 0) k += 256; sb.append("%" + Integer.toHexString(k).toUpperCase()); } } } return sb.toString();
}
调用的时候,response.setHeader("Content-disposition", "attachment; filename="+toUtf8String("中文.xls"));
我上网查的时候,网上是说
今天要说的是在创建工作表时,用中文做文件名和工作表名会出现乱码的问题,先说以中文作为工作表名,大家创建工作表的代码一般如下:
HSSFWorkbook workbook = new HSSFWorkbook();//创建EXCEL文件
HSSFSheet sheet= workbook.createSheet(sheetName); //创建工作表
这样在用英文名作为工作表名是没问题的,但如果sheetName是中文字符,就会出现乱码,解决的方法如下代码:
HSSFSheet sheet= workbook.createSheet();
workbook.setSheetName(0, sheetName,(short)1); //这里(short)1是解决中文乱码的关键;而第一个参数是工作表的索引号。 但是我发现根本没有这个方法,只需要改了文件名的乱码,其他乱码自然就解决了!!!
Java WorkBook对Excel的基本操作相关推荐
- workbook需要引入的包_用Java玩转Excel,竟然如此easy~
1.POI是什么 Apache POI - the Java API for Microsoft Documents,顾名思义,Apache的三方包,用来操作微软office文档的,多数时候用来操作e ...
- JAVA导入/出EXCEL表格 POI
POI简介: 目前最新版本是Apache POI 4.1.0(Apache POI团队于2019年4月9日宣布发布),个人觉得旧版本中的3.6版比较稳定. 自版本POI 4.0.1起,POI需要Jav ...
- java导入导出excel操作(jxl)
java导入导出excel操作(jxl) Java解释Excel数据(jxl.jar包的使用) 关键字: java excel jxl.jar jxl.jar 包 下载地址: http://www.a ...
- Java - Poi 操作 Excel
Java - Poi 操作 Excel 关注 "弋凡"(YiFan)微信公众号吧 记录简单笔记 做你的最爱 注意 XSSFWorkbook 对象是操作 .xlsx 格式的表格 HS ...
- java实现导出Excel的功能
这篇文章主要为大家详细介绍了java实现导出Excel的功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 导出excel是咱Java开发的必备技能啦,之前项目有这个功能,现在将其独立出来,分享一 ...
- java poi 读取excel 编码_Java使用POI 读取和写入Excel指南
做项目时经常有通过程序读取Excel数据,或是创建新的Excel并写入数据的需求:网上很多经验教程里使用的POI版本都比较老了,一些API在新版里已经废弃,这里基于最新的Apache POI 4.0. ...
- java 简单获取Excel表格内容(初学者)
java 简单获取Excel表格内容(初学者) 代码: package cn.ccaih.read;import org.apache.poi.ss.usermodel.Cell; import or ...
- Java中操作Excel的3种方法,太好用了!
一.介绍 在平时的业务系统开发中,少不了需要用到导出.导入excel功能,今天我们就一起来总结一下,如果你正为此需求感到困惑,那么阅读完本文,你一定会有所收获! 二.poi 大概在很久很久以前,微软的 ...
- java 导入导出excel表格
java 导入导出excel表格 业务上有需求上传excel表格并读取内容,本文记录一下该方法 表格导入 引入相应的工具包 <dependency><groupId>cn.af ...
最新文章
- 利用组策略防止计算机访问共享资源
- 专家首次释疑“接触传播”:手污染到病毒后,再揉眼睛可能会感染
- IPC之哲学家进餐问题
- linux 进程防火墙连接管理,Linux系统管理初步(五)系统防火墙控制程序firewalld...
- QT教程4:基本窗口实现
- android中的相对路径
- WIN10 查看已经连接的wifi的密码
- SPH(光滑粒子流体动力学)流体模拟实现二:SPH算法(1)-数学原理
- ajax显示失败信息,javascript
- centos7安装RabbitMQ详细过程
- 最全Pycharm教程(5)——Python快捷键相关设置
- 监督学习的基本假设——联合概率分布,独立同分布
- IE报证书错误提示页面,如何屏蔽?
- 树莓派4b 3.5inch显示屏+远程+FTP+建站
- ROS进阶学习的过程
- python去除\u3000,空格,\n等
- 任务3-1 基于控制台的购书系统
- Hello‘s P2P—一个普通程序出生入死的一生
- 通过1997年拓荒者号飞行器事件理解优先级反转
- 不高兴的津津【NOIP2004普及组第1题】
热门文章
- 前端自动生成Change Log的实现
- HP 5820打印机无法驱动,总有一个惊叹号,是系统文件不正常所致
- Python基础语法入门篇(一)
- hello.c的一生
- Franka Emika Panda连接真实机械臂(二)
- 教你阅读 Cpython 的源码(一)
- 第十届蓝桥杯JavaC组省赛真题
- 用selenium全自动化爬取教务系统作业清单
- error C2041: illegal digit ‘9‘ for base ‘8‘ | error C2059: syntax error: ‘bad suffix on number‘
- 【Spring教程】框架体系介绍