博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用POI进行Excel操作的总结一——创建Workbook,Sheet,Row以及Cell
阅读量:4967 次
发布时间:2019-06-12

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

前段时间,看在其他的网站上给出Excel文档的导入与导出操作,感觉很酷的样子,所以就学习了一下如何使用POI进行Excel的操作,现在对之前的学习过程进行一个总结。

一、现在普遍使用的Excel文档有xls以及xlsx这两种Excel文档,其中xls格式的Excel文档又分为5.0/95工作簿以及97-2003工作簿这两种。需要注意的是,由于5.0/95工作簿的版本太低,现在的POI文档不再支持这种类型的Excel文档的读取工作,当试图读取这种类型的Excel文档的时候,POI会抛出一个异常(OldExcelFormatException)。我现在使用的POI是3.14版本。

二、Workbook的创建

1、由于Excel中存在xls以及xlsx这两种格式,所以创建方式也有所不同。其中对于xls格式的文档,需要使用HSSFWorkbook来创建工作簿对象,而对于xlsx格式的Excel文档,则需要使用XSSFWrokbook来创建工作簿。有一点需要注意的是,HSSFWorkbook与XSSFWorkbook这两个类其实都是Workbook接口的一个实现类。好了,下面就是创建工作簿对象的代码:

//创建一个不存在的excel文件    private static Workbook createWorkbookIfNotExist(String fileName) throws Exception {        Workbook wb = null;                if(fileName.endsWith(".xls")) {            wb = new HSSFWorkbook();        } else if(fileName.endsWith(".xlsx")) {            wb = new XSSFWorkbook();        } else {            throw new Exception("文件类型错误!");        }                try{            OutputStream output = new FileOutputStream(fileName);            wb.write(output);        }catch(FileNotFoundException e) {            System.out.println("文件创建失败,失败原因为:" + e.getMessage());            throw new FileNotFoundException();        }        System.out.println(fileName + "文件创建成功!");                return wb;    }        //创建一个新的或者已存在的Excel文档的Workbook    public static Workbook createWorkbook(String fileName) throws Exception {        InputStream input = null;        Workbook wb = null;                try{            input = new FileInputStream(fileName);            wb = WorkbookFactory.create(input);        } catch(FileNotFoundException e) {            System.out.println("要打开的文件不存在,正试图创建该文件,请稍后……!");            wb = createWorkbookIfNotExist(fileName);        } catch(OldExcelFormatException e) {            System.out.println("文件打开失败,原因:要打开的Excel文件版本过低!");            throw new OldExcelFormatException("文件版本过低");        } finally {            if(input != null) {                input.close();            }        }                return wb;    }

2、创建Sheet的时候,同样的也存在HSSFSheet以及XSSHSheet这两种类型。同样的HSSFSheet以及XSSFSheet这两个类也是Sheet接口的实现类。如果直接使用实现类进行创建Sheet的话,那么,对于不同的格式,需要使用不同的实现方式,尽管实现的方式都一致。由于Java的多态关系,在这里,我使用Sheet接口进行处理。代码:

//创建sheet    public static Sheet createSheet(Workbook wb , String sheetName) {        Sheet sheet = wb.getSheet(sheetName);                if(sheet == null) {            System.out.println("表单" + sheetName + "不存在,试图创建该sheet,请稍后……");            sheet = wb.createSheet(sheetName);            System.out.println("名为" + sheetName +"的sheet创建成功!");        }                return sheet;    }

3、对于Row的创建,也是一样,也是使用Row这个接口进行实现。代码:

//创建行row    public static Row createRow(Sheet sheet , int rowNum) {        Row row = sheet.getRow(rowNum);                if(row == null) {            System.out.println("行号为:" + rowNum + "的行不存在,正试图创建该行,请稍后……");            row = sheet.createRow(rowNum);            System.out.println("行号为:" + rowNum + "的行创建成功!");        }                return row;    }

4、对于Cell也是一样,同样使用Cell接口进行编程。代码:

//创建单元格cell    public static Cell createCell(Row row , int cellNum) {        Cell cell = row.getCell(cellNum);                if(cell == null) {            System.out.println("该单元格不存在,正在试图创建该单元格,请稍后……");            cell = row.createCell(cellNum);            System.out.println("该单元格创建成功!");        }                return cell;    }

以上几个操作就是Workbook、Sheet、Row以及Cell的创建工作。另外,当对Excel文档操作完成之后,需要使用Workbook的write方法保存一下,然后上述的改动才会保存在你创建的Excel文档中。代码:

wb03.write(new FileOutputStream("C:\\Users\\Administrator\\Desktop\\03styleExcel.xls"));wb07.write(new FileOutputStream("C:\\Users\\Administrator\\Desktop\\07styleExcel.xlsx"));

其中wb03就是使用上述方法创建的xls格式的Excel文档,wb07则是xlsx格式的文档。

好了,这篇博文到这里就结束了。如果文章中有什么错误或不足的地方,希望各位大侠多多指点。后面的博文,会陆续介绍如何往Excel文档中写入不同格式的数据,以及边框、图片、合并单元格、隐藏与显示行等操作。

转载于:https://www.cnblogs.com/jiang2016/p/5728102.html

你可能感兴趣的文章
Babel 是干什么的
查看>>
cocos2dx-3.0(8)------Label、LabelTTF、LabelAtlas、LabelBMFont使用之法
查看>>
CODE[VS] 1842 递归第一次
查看>>
20180418小测
查看>>
数字三角形
查看>>
NGUI 减少drawcall规则
查看>>
三元表达,匿名函数
查看>>
前端笔记-基础笔记
查看>>
【LeetCode & 剑指offer刷题】查找与排序题6:33. Search in Rotated Sorted Array(系列)
查看>>
GNU/Linux超级本ZaReason Ultralap 440体验
查看>>
将github上托管的代码 在我的域名下运行
查看>>
【Manthan, Codefest 18 (rated, Div. 1 + Div. 2) C】Equalize
查看>>
【codeforces 767A】Snacktower
查看>>
【MemSQL Start[c]UP 3.0 - Round 1 C】 Pie Rules
查看>>
Ognl中“%”、“#”、“$”详解
查看>>
我对应用软件——美团的看法
查看>>
执行了的程序,才是你的程序.
查看>>
struts2.x + Tiles2.x读取多个xml 配置文件
查看>>
表单校验之datatype
查看>>
python第六篇文件处理类型
查看>>