如果POI-3.10往一个工作表(sheet)里面插入数据的话,需要注意了,其有一个不太被容易发现的bug。 被插入的工作表(sheet)里面的单元格没有包含任何的注解(comment)的时候,插入一行数据,不会有任何问题。但是如果被插入的工作表(sheet)里面的单元格只要包含任何的注解(comment)的时候,这个时候插入一行数据的时候,就会破坏这个文件。当程序执行完后,如果打开被插入数据的Excel文件,我们将会发现,其会弹出下面的对话框。

程序代码如下,

  1. package com.tibco.poi.xssf;
  2. import java.io.File;
  3. import java.io.FileInputStream;
  4. import java.io.FileNotFoundException;
  5. import java.io.FileOutputStream;
  6. import java.io.IOException;
  7. import org.apache.poi.xssf.usermodel.XSSFCell;
  8. import org.apache.poi.xssf.usermodel.XSSFRow;
  9. import org.apache.poi.xssf.usermodel.XSSFSheet;
  10. import org.apache.poi.xssf.usermodel.XSSFWorkbook;
  11. public class CreatRowTest {
  12. //当前文件已经存在
  13. private String excelPath = "D:\\exceltest\\comments.xlsx";
  14. //从第几行插入进去
  15. private int insertStartPointer = 3;
  16. //在当前工作薄的那个工作表单中插入这行数据
  17. private String sheetName = "Sheet1";
  18. /**
  19. * 总的入口方法
  20. */
  21. public static void main(String[] args) {
  22. CreatRowTest crt = new CreatRowTest();
  23. crt.insertRows();
  24. }
  25. /**
  26. * 在已有的Excel文件中插入一行新的数据的入口方法
  27. */
  28. public void insertRows() {
  29. XSSFWorkbook wb = returnWorkBookGivenFileHandle();
  30. XSSFSheet sheet1 = wb.getSheet(sheetName);
  31. XSSFRow row = createRow(sheet1, insertStartPointer);
  32. createCell(row);
  33. saveExcel(wb);
  34. }
  35. /**
  36. * 保存工作薄
  37. * @param wb
  38. */
  39. private void saveExcel(XSSFWorkbook wb) {
  40. FileOutputStream fileOut;
  41. try {
  42. fileOut = new FileOutputStream(excelPath);
  43. wb.write(fileOut);
  44. fileOut.close();
  45. } catch (FileNotFoundException e) {
  46. e.printStackTrace();
  47. } catch (IOException e) {
  48. e.printStackTrace();
  49. }
  50. }
  51. /**
  52. * 创建要出入的行中单元格
  53. * @param row
  54. * @return
  55. */
  56. private XSSFCell createCell(XSSFRow row) {
  57. XSSFCell cell = row.createCell((short) 0);
  58. cell.setCellValue(999999);
  59. row.createCell(1).setCellValue(1.2);
  60. row.createCell(2).setCellValue("This is a string cell");
  61. return cell;
  62. }
  63. /**
  64. * 得到一个已有的工作薄的POI对象
  65. * @return
  66. */
  67. private XSSFWorkbook returnWorkBookGivenFileHandle() {
  68. XSSFWorkbook wb = null;
  69. FileInputStream fis = null;
  70. File f = new File(excelPath);
  71. try {
  72. if (f != null) {
  73. fis = new FileInputStream(f);
  74. wb = new XSSFWorkbook(fis);
  75. }
  76. } catch (Exception e) {
  77. return null;
  78. } finally {
  79. if (fis != null) {
  80. try {
  81. fis.close();
  82. } catch (IOException e) {
  83. e.printStackTrace();
  84. }
  85. }
  86. }
  87. return wb;
  88. }
  89. /**
  90. * 找到需要插入的行数,并新建一个POI的row对象
  91. * @param sheet
  92. * @param rowIndex
  93. * @return
  94. */
  95. private XSSFRow createRow(XSSFSheet sheet, Integer rowIndex) {
  96. XSSFRow row = null;
  97. if (sheet.getRow(rowIndex) != null) {
  98. int lastRowNo = sheet.getLastRowNum();
  99. sheet.shiftRows(rowIndex, lastRowNo, 1);
  100. }
  101. row = sheet.createRow(rowIndex);
  102. return row;
  103. }
  104. }

不过,值得高兴的是,这个bug已经在POI-3.12的版本解决了

(6) 如何用Apache POI操作Excel文件-----POI-3.10的一个和注解(comment)相关的另外一个bug的更多相关文章

  1. java使用POI操作excel文件,实现批量导出,和导入

    一.POI的定义 JAVA中操作Excel的有两种比较主流的工具包: JXL 和 POI .jxl 只能操作Excel 95, 97, 2000也即以.xls为后缀的excel.而poi可以操作Exc ...

  2. java使用Apache POI操作excel文件

    官方介绍 HSSF is the POI Project's pure Java implementation of the Excel '97(-2007) file format. XSSF is ...

  3. Java使用POI操作Excel文件

    1.简介 Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式文件读和写的功能. 2.依赖的jar包 <!-- ex ...

  4. 如何用Apache POI操作Excel文件-----如何对一个单元格加注解?

    有的时候,我们需要通过操作Apache POI,在生成Cell数据的同时,能对其生成的Cell,加上注解(comments),类似于下面的. 那么对于这种情况,我们的代码应该如何写呢? 借花献佛,我就 ...

  5. 如何用Apache POI操作Excel文件-----如何在已有的Excel文件中插入一行新的数据?

    在POI的第一节入门中,我们提供了两个简单的例子,一个是如何用Apache POI新建一个工作薄,另外一个例子是,如果用Apache POI新建一个工作表.那么在这个章节里面,我将会给大家演示一下,如 ...

  6. 如何用Apache POI操作Excel文件-----如何用Apache POI 画一个离散图

    有的时候,我们需要Excel中的数据,通过一个图画,可视化的表现出来. 那么这个时候,应该如何做呢?现在就借花献佛,以Apache POI自己提供的一个例子为例,给大家演示一下POI的API 如何画图 ...

  7. 使用Apache POI操作Excel文件---在已有的Excel文件中插入一行新的数据

    package org.test; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundEx ...

  8. [转载]Java操作Excel文件的两种方案

    微软在桌面系统上的成功,令我们不得不大量使用它的办公产品,如:Word,Excel.时至今日,它的源代码仍然不公开已封锁了我们的进一步应用和开发.在我们实际开发企业办公系统的过程中,常常有客户这样子要 ...

  9. POI操作Excel异常Cannot get a text value from a numeric cell

    控制台抛出异常:java.lang.IllegalStateException: Cannot get a text value from a numeric cell 在java中用POI解析exc ...

随机推荐

  1. JavaScript数组常用操作

    前言 相信大家都用惯了jquery或者underscore等这些类库中常用的数组相关的操作,如$.isArray,_.some,_.find等等方法.这里无非是对原生js的数组操作多了一些包装. 这里 ...

  2. python网页爬虫

    1. 静态页面爬取 这类最简单啦,右键->查看页面源码时,想下载的信息都能够显示在这里,这时只需要直接down页面源码,代码如下: # Simple open web import urllib ...

  3. hdu 4585 map **

    题意: Shaolin temple is very famous for its Kongfu monks.A lot of young men go to Shaolin temple every ...

  4. GDUT 校赛02 dp回文串

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABSkAAAIhCAIAAAAtmainAAAgAElEQVR4nOzdfaxkd33n+ZJacstqa3 ...

  5. 编译包含Google Play服务App的SDK版本问题

    编译包含Google Play服务App的SDK版本问题   错误信息:No Resouce identifier found for attribute 'touchscreen BlocksFoc ...

  6. 精灵动画Animation对话框组成Idle动画的各精灵

    精灵动画Animation对话框组成Idle动画的各精灵 1.3  精灵动画 场景中已经添加了精灵,现在是时候让让它动起来了.读者也许已经从精灵图集中,各精灵的命名中看出来了,这个精灵一共有两种动画状 ...

  7. XMLHTTPRequest对象

    1.用于在后台与服务器交换数据: 2.XMLHttpRequest对象可以在不向服务器提交整个页面的情况下,实现局部更新网页.当页面全部加载完毕后,客户端通过该对象向服务器请求数据, 服务器端接受数据 ...

  8. POJ2125 Destroying The Graph(二分图最小点权覆盖集)

    最小点权覆盖就是,对于有点权的有向图,选出权值和最少的点的集合覆盖所有的边. 解二分图最小点权覆盖集可以用最小割: vs-X-Y-vt这样连边,vs和X部点的连边容量为X部点的权值,Y部和vt连边容量 ...

  9. The Accomodation of Students

    The Accomodation of Students Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K ( ...

  10. 通过网页的JS代码启动移动APP

    <span style="font-size:18px;"><script> function startAPP(){ window.location = ...