poi读写Excel

对于一个程序员来说,文件操作是经常遇到的,尤其是对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. Apache POI 读写 Excel 文件

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

  4. POI读写Excel简述之写入

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

  5. POI读写Excel简述之读取

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

  6. 使用poi读写excel文件

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

  7. Apache POI读写Excel

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

  8. 使用poi读写Excel

    对于一个程序员来说,文件操作是经常遇到的,尤其是对Excel文件的操作. 在这里介绍一下我在项目中用到的一个操作Excel的工具——POI.关于POI的一些概念,网络上很多,详细信息大家可以自行百度, ...

  9. poi读写Excel文件

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

随机推荐

  1. [转]五个Linux下用户空间的调试工具

    有几个Linux下的用户空间调试工具和技术,它们用来分析用户空间的问题相当有用.它们是: 'print' 语句 查询 (/proc, /sys 等) 跟踪 (strace/ltrace) Valgri ...

  2. 服务器端 CentOS 下配置 JDK 和 Tonmcat 踩坑合集

    一.配置 JDK 时,在 /etc/profile 文件下配置环境变量,添加   #java environment export JAVA_HOME=/usr/java/jdk- export CL ...

  3. cms判断写法

    cms比较容易写出循环的网页内容,对于有些循环的网页内容有不同css设定,这样在写cms时需要对循环做出条件判断:{if 判断条件}输出内容{else}输出内容{/if}.通过判断可以实现图片轮播效果 ...

  4. (转)Java任务调度框架Quartz入门教程指南(四)Quartz任务调度框架之触发器精讲SimpleTrigger和CronTrigger、最详细的Cron表达式范例

    http://blog.csdn.net/zixiao217/article/details/53075009 Quartz的主要接口类是Schedule.Job.Trigger,而触发器Trigge ...

  5. CSS (层叠样式表)

    层叠样式表(英文全称:Cascading Style Sheets)是一种用来表现HTML(标准通用标记语言的一个应用)或XML(标准通用标记语言的一个子集)等文件样式的计算机语言.CSS不仅可以静态 ...

  6. centos添加永久的环境变量

    cd /etc/profile.d/ 创建一个sh文件 vi dotnetpath.sh 内容如下: export PATH=$PATH:/opt/dotnet 保存,重启,这就有了一个永久的环境变量

  7. iic通讯 FPGA实现 mpu6050为例

    IIC最常用的通讯协议,但普遍用于单片机.arm这些,用FPGA实现大材小用,但对于菜鸡水平练练手很不错,考验串并转换和时序的控制.今天我就以mpu6050陀螺仪为例,实现FPGA的iic通信. 1. ...

  8. jQuery练习:表单模态框

    代码:基于事件冒泡原理和事件委托 <!DOCTYPE html> <html lang="zh-cn"> <head> <meta cha ...

  9. Linux - 用户管理与文件权限

    目录 Linux - 用户管理与文件权限 创建普通用户 切换用户 userdel删除用户 sudo 命令 文件与目录权限 Linux权限的解读 目录权限 查看用户权限的命令 文件权限 修改权限的命令 ...

  10. STM32_NVIC寄存器详解

    在MDK内,与NVIC相关的寄存器,MDK为其定义了如下的结构体:  typedef struct  {        vu32   ISER[2];    //2个32位中断使能寄存器分别对应到60 ...