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. sql server 大数据跨服务器迁移表数据——使用链接服务器

    1.创建链接服务器(填写链接服务器.远程登录.使用密码) 2.188.188.1.177是远程的 select count(*) from [188.188.1.177].BigDataAnalysi ...

  2. html——meta标签、link标签

    <meta> 元素可提供有关页面的元信息(meta-information),比如针对搜索引擎和更新频度的描述和关键词. <meta> 标签位于文档的头部,不包含任何内容.&l ...

  3. Nginx+nagios安装配置

    Nginx+nagios安装配置 [root@Nagios ~]# vi /etc/nginx/nginx.conf server { listen ; server_name localhost; ...

  4. CAD调用导角命令,并返回导角的圆弧对象

    主要用到函数说明: _DMxDrawX::SendStringToExecuteFun 把命令当着函数执行,可以传参数,详细说明如下: 参数 说明 IDispatch* pParam 命令参数,IMx ...

  5. Java中“==”、“compareTo()”和“equals()”的区别

    在比较两个对象或者数据大小的时候,经常会用到==.compareTo()和equals(),尤其是在接入了Comparable接口后重写compareTo方法等场景,所以我们来理一下这三个的区别. 1 ...

  6. webpack打包出错,通过babel将es6转es5的出错。

    错误信息如下: 解决方法: 1,先安装babel-preset-es2015到项目中, cnpm install babel-preset-es2015 --save-dev2,在项目根目录中新建一个 ...

  7. Robberies (01背包dp变形)

    题意:一个强盗要抢劫银行又不想被抓到,所以要进行概率分析求他在不被抓的情况下能抢最多的钱.他给定T(样例个数),N(要抢的银行的个数),P(被抓的概率要小于P)Mj(强盗能抢第j个银行Mj元钱),Pj ...

  8. hdu2015 偶数求和【C++】

    偶数求和 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  9. HDU 3401 Trade

    Trade Time Limit: 1000ms Memory Limit: 32768KB This problem will be judged on HDU. Original ID: 3401 ...

  10. oracle --审计

    审计是监视和记录所选用户的数据活动的.审计操作类型包括登录企图.对象访问和数据库操作.审计记录包括被审计的操作.执行操作的用户.操作的时间等信息. 1 . 启用审计 其具体步骤如下: (1 ) 进入O ...