ps
用Java处理Excel,是Java很重要的一个应用,关于它网上也有很多大神发布了自己封装的ExcelUtil,阿里也有强大的EasyExcel。但是想要用好,还是要从最基础的poi学起。这篇博客只涉及了Excel的读写操作,没有高级操作,是一个入门。
准备工作
导入jar包
用Java处理Excel文件(.xls,.xlsx)现在主流使用的解决方法是使用poi。使用poi需要下载与之相关的jar包,这里我下载了当时最新的版本4.1.2,官方下载:poi-bin-4.1.2-20200217.tar.gz。下载之后解压缩能得到poi的所有jar包,但并不是所有都是需要的,只需要导入下几个:
- commons-collections4-4.4.jar
- commons-compress-1.19.jar
- commons-math3-3.6.1.jar
- poi-ooxml-4.1.2.jar
- poi-ooxml-schemas-4.1.2.jar
- poi-4.1.2.jar
- xmlbeans-3.1.0.jar
关于导入jar包:参考相关博客
用到的类
- Workbook
- Sheet
- Row
- Cell
- HSSFWorkbook
- XSSFWorkbook
Workbook / HSSFWorkbook / XSSFWorkbook 三个类是关于整个表格的,即每个Excel文件对应一个类对象。HSSFWorkbook 和 XSSFWorkbook 分别对应 .xls 和 .xlsx 文件,继承了Workbook类,故两种Excel均可以保存在 Workbook 对象中。
Sheet类对应的是Excel里面的工作簿,同样是一个工作簿就需要一个Sheet对象。Sheet类也有两个子类HSSFSheet 和 XSSFSheet ,所以在同时处理两种格式的Excel文件时也只需要使用Sheet类,无需分类讨论,因为Workbook对象对应的是什么类型,其getSheet方法就返回对应的Sheet类型。
同理,对应每一行的Row和对应每一个单元格的Cell类也无需区分是HSSF还是XSSF类型,都可以通过上一级的getRow或getCell函数获得。
具体思路
读入:通过输入流用Excel文件初始化Workbook对象,利用get层层递进,创建出Cell对象,得到单元格的内容,存入二维数组(代表一个sheet),方便对数据进行操作。
写入:建立新的Workbook对象,利用creat层层递进,创建出Cell,将二维数组所对应的内容赋给单元格,用Workbook.write(OutputStream)方法输出。
读入
流读入和解析工作表
static Object[][] value =null;
static void readExcel() throws IOException {
try {
//数据流
//使用到的Excel文件路径 D:\\eclipse\\eclipse-workspace\\poi_demo\\student.xls
String filePath="D:\\test.xlsx";
InputStream inp = new FileInputStream(new File(filePath));//输入流
System.out.println("1.工作流,路径:"+filePath);
//解析工作簿
System.out.println("2.解析生成工作簿");
String extString = filePath.substring(filePath.lastIndexOf("."));
Workbook workbook=null;
if(extString.equals(".xls")) workbook = new HSSFWorkbook(inp);//一个excel用一个HSSFWorkbook
else if(extString.equals(".xlsx"))