对于一个程序员来说,文件操作是经常遇到的,尤其是对Excel文件的操作。

在这里介绍一下我在项目中用到的一个操作Excel的工具——POI。关于POI的一些概念,网络上很多,详细信息大家可以自行百度,我在这里只做简单介绍。POI是apache的类库,主要是为Java开发人员提供对Office文件(word、ppt、Excel)处理的支持。我这里主要给出几个例子来说明演示一下。

准备工作

我用的版本是3.10.1,需要的jar有:

  • dom4j.jar
  • log4j-1.2.13.jar
  • poi-3.10.1-20140818.jar
  • poi-ooxml-3.10.1-20140818.jar
  • poi-ooxml-schemas-3.10.1-20140818.jar
  • poi-scratchpad-3.10.1-20140818.jar
       代码示例1.读取Excel
  1. public void testReadExcel() {
  2. try {
  3. // 读取Excel
  4. Workbook wb = new HSSFWorkbook(new FileInputStream("d:\\2.xls"));
  5. // 获取sheet数目
  6. for (int t = 0; t < wb.getNumberOfSheets(); t++) {
  7. Sheet sheet = wb.getSheetAt(t);
  8. Row row = null;
  9. int lastRowNum = sheet.getLastRowNum();
  10. // 循环读取
  11. for (int i = 0; i <= lastRowNum; i++) {
  12. row = sheet.getRow(i);
  13. if (row != null) {
  14. // 获取每一列的值
  15. for (int j = 0; j < row.getLastCellNum(); j++) {
  16. Cell cell = row.getCell(j);
  17. String value = getCellValue(cell) ;
  18. if(!value.equals("")){
  19. System.out.print(value + " | ");
  20. }
  21. }
  22. System.out.println();
  23. }
  24. }
  25. }
  26. } catch (Exception e) {
  27. e.printStackTrace();
  28. }
  29. }

用到了一个方法:

  1. /***
  2. * 读取单元格的值
  3. *
  4. * @Title: getCellValue
  5. * @Date : 2014-9-11 上午10:52:07
  6. * @param cell
  7. * @return
  8. */
  9. private String getCellValue(Cell cell) {
  10. Object result = "";
  11. if (cell != null) {
  12. switch (cell.getCellType()) {
  13. case Cell.CELL_TYPE_STRING:
  14. result = cell.getStringCellValue();
  15. break;
  16. case Cell.CELL_TYPE_NUMERIC:
  17. result = cell.getNumericCellValue();
  18. break;
  19. case Cell.CELL_TYPE_BOOLEAN:
  20. result = cell.getBooleanCellValue();
  21. break;
  22. case Cell.CELL_TYPE_FORMULA:
  23. result = cell.getCellFormula();
  24. break;
  25. case Cell.CELL_TYPE_ERROR:
  26. result = cell.getErrorCellValue();
  27. break;
  28. case Cell.CELL_TYPE_BLANK:
  29. break;
  30. default:
  31. break;
  32. }
  33. }
  34. return result.toString();
  35. }

解释一下,首先将文件读入到工作簿Workbook中,Workbook是一个接口,他有2个实现:HSSFWorkbook和XSSFWorkbook。前者是用来读取97-03版的Excel,扩展名为xls,后者是读取07及以后的版本,扩展名为xlsx。读入到workbook中,然后循环所有的sheet,在sheet循环所有的有效行和有效列。其中sheet.getLastRowNum()获得最后一行的索引值(从0开始),而sheet.getPhysicalNumberOfRows()则是获取的最后一行的行号(从1开始)。这里要注意的是循环列不是在sheet中循环,而是在row中循环。

 
       效果图如下:
 
       代码示例2. 写入Excel文件
  1. public void testWriteExcel() {
  2. String excelPath = "d:/3.xls";
  3. Workbook workbook = null;
  4. try {
  5. // XSSFWorkbook used for .xslx (>= 2007), HSSWorkbook for 03 .xsl
  6. workbook = new HSSFWorkbook();// XSSFWorkbook();//WorkbookFactory.create(inputStream);
  7. } catch (Exception e) {
  8. System.out.println("创建Excel失败: ");
  9. e.printStackTrace();
  10. }
  11. if (workbook != null) {
  12. Sheet sheet = workbook.createSheet("测试数据");
  13. Row row0 = sheet.createRow(0);
  14. for (int i = 0; i < 6; i++) {
  15. Cell cell = row0.createCell(i, Cell.CELL_TYPE_STRING);
  16. cell.setCellValue("列标题" + i );
  17. //sheet.autoSizeColumn(i);//自动调整宽度
  18. }
  19. for (int rowNum = 1; rowNum < 10; rowNum++) {
  20. Row row = sheet.createRow(rowNum);
  21. for (int i = 0; i < 6; i++) {
  22. Cell cell = row.createCell(i, Cell.CELL_TYPE_STRING);
  23. cell.setCellValue("单元格" + String.valueOf(rowNum + 1)
  24. + String.valueOf(i + 1));
  25. }
  26. }
  27. try {
  28. FileOutputStream outputStream = new FileOutputStream(excelPath);
  29. workbook.write(outputStream);
  30. outputStream.flush();
  31. outputStream.close();
  32. } catch (Exception e) {
  33. System.out .println("写入Excel失败: ");
  34. e.printStackTrace();
  35. }
  36. }
  37. }

效果图如下:

 

怎么样,很简单吧。只要你使用了poi,不管你有没有安装Office,都可以完美的操作Office文件,小伙伴们,都快来试试看吧。

使用poi读写Excel的更多相关文章

  1. jxl读写excel, poi读写excel,word, 读取Excel数据到MySQL

    这篇blog是介绍: 1. java中的poi技术读取Excel数据,然后保存到MySQL数据中. 2. jxl读写excel 你也可以在 : java的poi技术读取和导入Excel了解到写入Exc ...

  2. [转]POI读写Excel 修改

    [转]POI读写Excel 修改 一.Excel基础 二.HSSF概况 三.通过usermodel读取文件 四.通过usermodel写入文件 五.通过eventusermodel读取文件 六.HSS ...

  3. poi读写Excel

    poi读写Excel 对于一个程序员来说,文件操作是经常遇到的,尤其是对Excel文件的操作. 在这里介绍一下我在项目中用到的一个操作Excel的工具——POI.关于POI的一些概念,网络上很多,详细 ...

  4. Apache POI 读写 Excel 文件

    目录 写入 Excel 文件 读取 Excel 文件 遍历 Excel 文件 需要的 maven 依赖 完整代码 写入 Excel 文件 // 写入 Excel 文件 // ============= ...

  5. POI读写Excel简述之写入

    二.POI写入Excel文件(以Excel2003版为例,2007版就是根据文件扩展名xlsx将HSSFWorkbook换为XSSFWorkbook,及其Sheet.Row.Cell也相应替换) 1. ...

  6. POI读写Excel简述之读取

    一.POI读取Excel文件(以Excel2003版为例,2007版就是根据文件扩展名xlsx将HSSFWorkbook换为XSSFWorkbook,及其Sheet.Row.Cell也相应替换) // ...

  7. 使用poi读写excel文件

    使用poi库测试了一下读取excel文件,效果不错,跟大家分享一下. 第一列是数值型,第二列是字符型,代码如下: package poi; import java.io.FileInputStream ...

  8. Apache POI读写Excel

    Apache POI是Apache软件基金会的开放源码函式库,POIAPI给Java程序对Microsoft Office格式档案读和写的功能. 官方文档 [https://poi.apache.or ...

  9. poi读写Excel文件

    jxl 只有excel基本的操作,代码操作比较方便,一般使用jxl就够了,对图片支持较好 poi功能比jxl强大但是比较吃内存,支持计算公式        关于jxl具体可以参考    http:// ...

随机推荐

  1. php开启openssl的方法,openssl安装

    php开启openssl的方法,openssl安装 2014年10月10日 8312次浏览 什么是openssl? 关于openssl,我说的不如百度百科齐全,还是看看百度百科的解释吧!http:// ...

  2. c# 之抽象工厂模式

    Email整体项目 Email类 using System; using System.Collections.Generic; using System.Linq; using System.Tex ...

  3. bootstrap弹出层效果

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-type" content ...

  4. The Cow Lexicon

    The Cow Lexicon Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 8815 Accepted: 4162 Descr ...

  5. 山东理工大学第七届ACM校赛-完美素数 分类: 比赛 2015-06-26 10:36 15人阅读 评论(0) 收藏

    完美素数 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 我们定义:如果一个数为素数,且这个数中含有7或3,那么我们称这个数为完美 ...

  6. uva 437,巴比伦塔

    题目链接:https://uva.onlinejudge.org/external/4/437.pdf 题意:巴比伦塔: 给出n种立方体,一个立方体能放到另一个立方体上,必须满足,底面一定要小于下面的 ...

  7. spoj 7001. Visible Lattice Points GCD问题 莫比乌斯反演

    SPOJ Problem Set (classical) 7001. Visible Lattice Points Problem code: VLATTICE Consider a N*N*N la ...

  8. Jquery easyui 教程

            Jquery easyui教程                 目  录 1基本拖放... 4 2构建购物车型拖放... 5 3创建课程表... 8 4菜单和按钮Menu and Bu ...

  9. 2016年10月31日 星期一 --出埃及记 Exodus 19:16

    2016年10月31日 星期一 --出埃及记 Exodus 19:16 On the morning of the third day there was thunder and lightning, ...

  10. 循环嵌套,while循环,穷举迭代循环

    一.循环嵌套 简单的就是说,在一个for循环里嵌入多个小for循环. 其中,在打矩形.三角形和乘法口诀表之类的题目中,大for循环一般表示的是行数,其余的小for循环式每一行中的内容. 二.while ...