博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用Java 导入/导出 Excel ----Jakarta POI
阅读量:4137 次
发布时间:2019-05-25

本文共 3124 字,大约阅读时间需要 10 分钟。

导入jar包: org.apache.poi.poi-3.13.jar

HSSF(用于操作Excel的组件)提供给用户使用的对象在rg.apache.poi.hssf.usermodel包中,主要部分包括Excel对象,样式和格式,还有辅助操作。有以下几种对象:

常用组件:HSSFWorkbook                      excel的文档对象HSSFSheet                         excel的表单HSSFRow                           excel的行HSSFCell                          excel的格子单元HSSFFont                          excel字体HSSFDataFormat                    日期格式HSSFHeader                        sheet头HSSFFooter                        sheet尾(只有打印的时候才能看到效果)样式:HSSFCellStyle                       cell样式辅助操作包括:HSSFDateUtil                        日期HSSFPrintSetup                      打印HSSFErrorConstants                  错误信息表

2.3 基本操作步骤

首先,理解一下一个Excel的文件的组织形式,一个Excel文件对应于一个workbook(HSSFWorkbook),一个workbook可以有多个sheet(HSSFSheet)组成,一个sheet是由多个row(HSSFRow)组成,一个row是由多个cell(HSSFCell)组成。

基本操作步骤:

//创建HSSFWorkbook对象(excel的文档对象)HSSFWorkbook wb = new HSSFWorkbook();//建立新的sheet对象(excel的表单)HSSFSheet sheet=wkb.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");wkb.write(output);output.close();retrun null;

设置单元格行高、列宽

HSSFSheet sheet=wb.createSheet();sheet.setDefaultRowHeightInPoints(10);//设置缺省列高sheet.setDefaultColumnWidth(20);//设置缺省列宽//设置指定列的列宽,256 * 50这种写法是因为width参数单位是单个字符的256分之一sheet.setColumnWidth(cell.getColumnIndex(), 256 * 50);

导入Excel应用实例

实现将已存在的Excel文件中的数据导入到系统中的基本步骤同导出十分的类似,关键在于要了解要导入Excel文件的结构,比如数据有哪些列、读取数据起始位置(有效数据从第几行几列开始)等。在实际项目中由于这些数据(Excel文件)往往来自于日常办公人员或其他系统平台产生的业务数据,因此这些Excel文件的数据格式要有统一的要求,并提供访问接口(指访问途径),这样在所需数据的系统中就可通过提供这个访问接口调用方法,从而获得数据。解决方案采用Web Service是不错的选择。这里,我们就以导入excel表为例,重点掌握如何编写导入Excel代码

public List
loadScoreInfo(String xlsPath) throws IOException{List temp = new ArrayList();FileInputStream fileIn = new FileInputStream(xlsPath);//根据指定的文件输入流导入Excel从而产生Workbook对象Workbook wb0 = new HSSFWorkbook(fileIn);//获取Excel文档中的第一个表单Sheet sht0 = wb0.getSheetAt(0);//对Sheet中的每一行进行迭代for (Row r : sht0) {//如果当前行的行号(从0开始)未达到2(第三行)则从新循环If(r.getRowNum()<1){continue;}//创建实体类ScoreInfo info=new ScoreInfo();//取出当前行第1个单元格数据,并封装在info实体stuName属性上info.setStuName(r.getCell(0).getStringCellValue());info.setClassName(r.getCell(1).getStringCellValue());info.setRscore(r.getCell(2).getNumericCellValue());info.setLscore(r.getCell(3).getNumericCellValue());temp.add(info);}fileIn.close();return temp;}

 

 

 

转载地址:http://hxqvi.baihongyu.com/

你可能感兴趣的文章
自己开发机编译出来的库没问题, 但公共编译机上编译出来的库有问题, 也是醉了!
查看>>
多了一个int, 导致成员变量值异常, 定位问题花费15分钟(后来又遇到此bug, 1分钟解决)
查看>>
linux中split命令的重要用途------文件分割
查看>>
如何让你的linux程序在后台静默执行?
查看>>
戏说年末盘点后台数据的获取思路------很多时候, 思路比执行更重要!
查看>>
严禁在log中改变变量的值
查看>>
Linux文件的三个时间详解
查看>>
protobuf repeated类型的使用
查看>>
protobuf简览
查看>>
php urlencode和urldecode
查看>>
使用strings命令时需要小心gcc/g++的优化选项
查看>>
google protocol buffer协议文件转为.cc文件和.h文件之大坑爹------居然故意把大写转成了小写
查看>>
json error: Use of overloaded operator [] is ambiguous
查看>>
百万分之一颗粒度灰度策略
查看>>
提前预防了一个低概率core
查看>>
代码中一个字符串用了中文, 定位问题浪费半小时
查看>>
整形溢出导致的bug, 前后耗费至少10分钟
查看>>
浏览器cookie入门
查看>>
string也可以用 <<和>>吗?
查看>>
C++ string的+=与append, 小程序欣赏
查看>>