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

原创 2015年05月29日 22:35:20

如果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的版本解决了。


版权声明:本文为博主原创文章,未经博主允许不得转载。

使用POI 删除批注

删除excel中批注信息。 删除批注信息是通过cell的removeComment()方法。值得注意的是:当调用完removeComment()方法时,记得一定要对操作过的excel进行保存。 ...

ajax解决参数过长无法提交成功问题

查了很多资料都说,get方法的参数是有限制的,post方法的参数的长度是无限制,这也是post相比get的优势一直。 在ajax中使用post方法,用常规的参数格式:param1=a1¶m2=...

jquery如何判断滚动条滚到页面底部并执行事件

首先理解三个dom元素,分别是:clientHeight、offsetHeight、scrollTop。 clientHeight:这个元素的高度,占用整个空间的高度,所以,如果一个div有滚动条,...

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

有的时候,我们需要通过操作Apache POI,在生成Cell数据的同时,能对其生成的Cell,加上注解(comments)。那么如何对其来加注解呢?...

(8) 如何用Apache POI操作Excel文件-----POI-3.10.1 的一个黑白颜色颠倒的bug以及解决方案

在用POI-3.10的版本设置Excel单元格的字体的颜色或者单元格背景色的时候,对于XSSF方式,如果设置的颜色为黑色,则实际在Excel中渲染出来的却是白色;反之,如果设置的颜色为白色,则实际在E...

(7) 如何用Apache POI操作Excel文件-----如何用Apache POI 画一个离散图

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

Apache poi 操作 excel 文件压缩包

  • 2017年07月14日 02:46
  • 9.76MB
  • 下载

Apache POI 操作Excel文件

Apache POI 操作Excel文件:POI简介:Apache POI[1] 是创建和维护操作各种符合Office Open XML(OOXML)标准和微软的OLE 2复合文档格式(OLE2)的...

(1) 如何用Apache POI操作Excel文件-----入门

Apache POI项目的目标就是可以用Java API来创建和维护各种Office文件(MS Word,MS PowerPoint和MS Excel). 本系列文章主要是针对Excel文件的操作。对...

java使用Apache POI操作excel文件

官方介绍 HSSF is the POI Project's pure Java implementation of the Excel '97(-2007) file format. XS...
  • meiru8
  • meiru8
  • 2014年08月27日 14:36
  • 512
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:(6) 如何用Apache POI操作Excel文件-----POI-3.10的一个和注解(comment)相关的另外一个bug
举报原因:
原因补充:

(最多只允许输入30个字)