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

程序代码如下,
- package com.tibco.poi.xssf;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileNotFoundException;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import org.apache.poi.xssf.usermodel.XSSFCell;
- import org.apache.poi.xssf.usermodel.XSSFRow;
- import org.apache.poi.xssf.usermodel.XSSFSheet;
- import org.apache.poi.xssf.usermodel.XSSFWorkbook;
- public class CreatRowTest {
- //当前文件已经存在
- private String excelPath = "D:\\exceltest\\comments.xlsx";
- //从第几行插入进去
- private int insertStartPointer = 3;
- //在当前工作薄的那个工作表单中插入这行数据
- private String sheetName = "Sheet1";
- /**
- * 总的入口方法
- */
- public static void main(String[] args) {
- CreatRowTest crt = new CreatRowTest();
- crt.insertRows();
- }
- /**
- * 在已有的Excel文件中插入一行新的数据的入口方法
- */
- public void insertRows() {
- XSSFWorkbook wb = returnWorkBookGivenFileHandle();
- XSSFSheet sheet1 = wb.getSheet(sheetName);
- XSSFRow row = createRow(sheet1, insertStartPointer);
- createCell(row);
- saveExcel(wb);
- }
- /**
- * 保存工作薄
- * @param wb
- */
- private void saveExcel(XSSFWorkbook wb) {
- FileOutputStream fileOut;
- try {
- fileOut = new FileOutputStream(excelPath);
- wb.write(fileOut);
- fileOut.close();
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- /**
- * 创建要出入的行中单元格
- * @param row
- * @return
- */
- private XSSFCell createCell(XSSFRow row) {
- XSSFCell cell = row.createCell((short) 0);
- cell.setCellValue(999999);
- row.createCell(1).setCellValue(1.2);
- row.createCell(2).setCellValue("This is a string cell");
- return cell;
- }
- /**
- * 得到一个已有的工作薄的POI对象
- * @return
- */
- private XSSFWorkbook returnWorkBookGivenFileHandle() {
- XSSFWorkbook wb = null;
- FileInputStream fis = null;
- File f = new File(excelPath);
- try {
- if (f != null) {
- fis = new FileInputStream(f);
- wb = new XSSFWorkbook(fis);
- }
- } catch (Exception e) {
- return null;
- } finally {
- if (fis != null) {
- try {
- fis.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
- return wb;
- }
- /**
- * 找到需要插入的行数,并新建一个POI的row对象
- * @param sheet
- * @param rowIndex
- * @return
- */
- private XSSFRow createRow(XSSFSheet sheet, Integer rowIndex) {
- XSSFRow row = null;
- if (sheet.getRow(rowIndex) != null) {
- int lastRowNo = sheet.getLastRowNum();
- sheet.shiftRows(rowIndex, lastRowNo, 1);
- }
- row = sheet.createRow(rowIndex);
- return row;
- }
- }
不过,值得高兴的是,这个bug已经在POI-3.12的版本解决了
(6) 如何用Apache POI操作Excel文件-----POI-3.10的一个和注解(comment)相关的另外一个bug的更多相关文章
- java使用POI操作excel文件,实现批量导出,和导入
一.POI的定义 JAVA中操作Excel的有两种比较主流的工具包: JXL 和 POI .jxl 只能操作Excel 95, 97, 2000也即以.xls为后缀的excel.而poi可以操作Exc ...
- java使用Apache POI操作excel文件
官方介绍 HSSF is the POI Project's pure Java implementation of the Excel '97(-2007) file format. XSSF is ...
- Java使用POI操作Excel文件
1.简介 Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式文件读和写的功能. 2.依赖的jar包 <!-- ex ...
- 如何用Apache POI操作Excel文件-----如何对一个单元格加注解?
有的时候,我们需要通过操作Apache POI,在生成Cell数据的同时,能对其生成的Cell,加上注解(comments),类似于下面的. 那么对于这种情况,我们的代码应该如何写呢? 借花献佛,我就 ...
- 如何用Apache POI操作Excel文件-----如何在已有的Excel文件中插入一行新的数据?
在POI的第一节入门中,我们提供了两个简单的例子,一个是如何用Apache POI新建一个工作薄,另外一个例子是,如果用Apache POI新建一个工作表.那么在这个章节里面,我将会给大家演示一下,如 ...
- 如何用Apache POI操作Excel文件-----如何用Apache POI 画一个离散图
有的时候,我们需要Excel中的数据,通过一个图画,可视化的表现出来. 那么这个时候,应该如何做呢?现在就借花献佛,以Apache POI自己提供的一个例子为例,给大家演示一下POI的API 如何画图 ...
- 使用Apache POI操作Excel文件---在已有的Excel文件中插入一行新的数据
package org.test; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundEx ...
- [转载]Java操作Excel文件的两种方案
微软在桌面系统上的成功,令我们不得不大量使用它的办公产品,如:Word,Excel.时至今日,它的源代码仍然不公开已封锁了我们的进一步应用和开发.在我们实际开发企业办公系统的过程中,常常有客户这样子要 ...
- 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 ...
随机推荐
- image warping
- 组合数(codevs 1631)
1631 组合数 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 钻石 Diamond 题解 查看运行结果 题目描述 Description 组合数C(N, K)表示 ...
- 大端(big endian)和小端(little endian)
http://www.cnblogs.com/Romi/archive/2012/01/10/2318551.html 当前的存储器,多以byte为访问的最小单元,当一个逻辑上的地址必须分割为物理上的 ...
- linux常见问题集锦-1
http://www.cnblogs.com/itech/archive/2011/02/12/1952857.html 感谢作者分享 一.填空题:1. 在Linux系统中,以 文件 方式访问设备 . ...
- 【Python】【解决】UnicodeDecodeError: 'ascii' codec can't decode byte 0xe5 in position 1: ordinal not in range(128)
1.问题描述 今天在升级Ubuntu到14.04,使用命令行启动软件更新器,进行版本升级,结果开始升级就异常退出了,具体打印如下: $update-manager -d 正在检查新版 Ubuntu 使 ...
- hdu 1240:Asteroids!(三维BFS搜索)
Asteroids! Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total ...
- UVa 11437:Triangle Fun(计算几何综合应用,求直线交点,向量运算,求三角形面积)
Problem ATriangle Fun Input: Standard Input Output: Standard Output In the picture below you can see ...
- VIM Tutorials----(updating)
This is my first English tutorial; I hope I can help you to learn VIM. Any question send email to me ...
- poj 3264 RMQ 水题
题意:找到一段数字里最大值和最小值的差 水题 #include<cstdio> #include<iostream> #include<algorithm> #in ...
- Harris角点
1. 不同类型的角点 在现实世界中,角点对应于物体的拐角,道路的十字路口.丁字路口等.从图像分析的角度来定义角点可以有以下两种定义: 角点可以是两个边缘的角点: 角点是邻域内具有两个主方向的特征点: ...