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

程序代码如下,

[java] view plaincopy
  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. Apache POI操作Excel文件

    Apache POI是用Java编写的免费开源的跨平台的Java API,Apache POI提供API给Java程序对Microsoft Office格式档案读和写的功能,其中使用最多的就是使用PO ...

  2. Java使用POI操作Excel文件

    我们可以使用POI操作Excel文件,本文主要介绍:"导入POI的Maven依赖"."创建Poi对象"."Poi读取Excel工作表数目". ...

  3. 采用APACHE POI操作EXCEL文件--计算式调用另一文件

    http://blog.sina.com.cn/s/blog_6151984a0100sczi.html 测试环境: 当前EXCEL文件: workbook.xls 假设一个CELL的计算式如下:   ...

  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. java使用poi操作excel文件_使用 java apache poi 操作 excel xlsx 文件

    工作中临时需要对各种订单量进行简单的统计分析,为了方便简单学习了apache poi 对 xlsx 文件的基本操作,简单记录 1. 引包 org.apache.poi poi-ooxml 4.1.2 ...

  8. java excel导出2007_java操作excel文件,实现批量导出,和导入

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

  9. execle java,Java使用POI操作Excel

    Java使用POI操作Excel 1. POI操作Excel 1.1. 依赖 org.apache.poi poi 4.1.0 org.apache.poi poi-ooxml 4.1.0 org.a ...

最新文章

  1. 不会用Photoshop抠图?Mask R-CNN助你一键“除”人
  2. 服务器管理神器 开源堡垒机 jumpserver 实战教程
  3. Java 注解用法详解——@SuppressWarnings
  4. 进一步掌握linux吧
  5. ES6(三)数组的扩展
  6. [转]默认构造函数的作用
  7. vue教程2:vue基础
  8. 通过Postfix构建Exchange Server 2010邮件网关部署系列一:创建新域环境
  9. jQuery插件编写基础之“又见弹窗”
  10. 给postmessage加上callback方法
  11. 基于正态分布的抽样分布-T分布
  12. fn键台式计算机在哪,fn键在哪?老司机教你fn键使用方法
  13. 福建地区市场份额最大的调查研究咨询公司
  14. 什么是负载?如何查看服务器的机器负载情况?
  15. Java游戏开发——飞行射击类游戏
  16. 动态内存分配(详解)
  17. 【数据结构】 栈的知识点
  18. 实训:网站诊断分析(12.10)
  19. 川大研究生计算机网络挂科,四川大学200多名研究生被清退,让人倍感惋惜,原因几乎相同!...
  20. 【Java-Calendar】打印日历

热门文章

  1. python执行语句转换成str_python3.x,_python3.4.3如何转换str字符串?,python3.x - phpStudy...
  2. android 6.0 数据库权限,Android超清晰6.0权限申请AndPermission
  3. matlab中的uint8函数,未定义与 'uint8' 类型的输入参数相对应的函数 'fitnessty'
  4. 添加include文件路径_-isystem以及include_next的副作用
  5. android gsensor 坐标,MTK Android G sensor 原理,配置,调试
  6. 安装python扩展库时只能使用pip_安装 Python 扩展库时只能使用 pip 工具在线安装,如果安装不成功就没有别的办法了。_学小易找答案...
  7. MySQL 学习三:来教你如何完全卸载掉本地“头大的” MySQL 数据库!
  8. linux 文件系统cache,终于找到一篇详解Linux文件系统Cache的文章
  9. java中父类与子类, 不同的两个类中的因为构造函数由于递归调用导致栈溢出问题...
  10. java jdbc rowset_JAVA基础知识之JDBC——RowSet