(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实战-java开发excel详解(第四章 常用操作-注释)

4.常用操作 4.1注释 4.1.1 单表注释 POI支持Excel单元格加注释功能。创建注释需要通过sheet表去创建类org.apache.poi.hssf.usermodel.HSSFPa...
  • yuzhenling
  • yuzhenling
  • 2015年08月31日 13:50
  • 2999

Java中用Apache POI生成excel和word文档

最近在做项目的过程中遇到了excel的数据导出和word的图文表报告的导出功能,最后决定用Apache POI来完成该项功能。本文就项目实现过程中的一些思路与代码与大家共享,同时,也作为自己的一个总结...
  • GISShiXiSheng
  • GISShiXiSheng
  • 2015年06月23日 20:50
  • 4277

Java使用Apache poi 操作Excel-基本概念与使用

通过POI简化了EXCEL的操作,其中POI提供的WorkBook, spreadsheet,Row,Cell及其实现类来完成对Excel中对应部分(Excel文件,电子表格,行,单元格)的操作(读取...
  • Revivedsun
  • Revivedsun
  • 2017年01月02日 21:50
  • 1558

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

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

Apache POI读写Excel文档入门(支持XLS和XLSX格式)

Apache POI是可用于Java程序,用于对Microsoft Office文档进行读写的API。本文通过一个简单的小例子,简要介绍通过Apache POI对Excel文档进行读写的方法。...
  • u014527058
  • u014527058
  • 2016年03月07日 12:31
  • 5509

(5) 如何用Apache POI操作Excel文件-----发现Apache的POI的Bug后,如何给Apache的POI报Bug?

在我上篇文章中,(4) 如何用Apache POI操作Excel文件-----发现了POI-3.12一个回归,通过测试POI-3.12的版本,我发现了一个bug,那么发现bug后,该如何处理。我们有2...
  • chancein007
  • chancein007
  • 2015年05月29日 22:15
  • 1416

Apache POI生成Excel表格并下载的一些注意事项

需求:从后台读取数据生成一张如下图的Excel表格,并提供Excel下载功能。 生成的Excel表格格式如下: 实现步骤: 一、通过Apache POI生成Excel: 1、请求链接为:...
  • hlbt0112
  • hlbt0112
  • 2016年01月15日 15:15
  • 552

java poi对同一个excel文件进行读写

环境操作系统:win7 jdk: 1.7需求1、产品部的同事经常给我一批账号,然后去统计这些账号的登录次数。 他们一般给我这样的一份文件: ①我一般的做法就是先把这个账号全部读出来,用set集合...
  • u013066244
  • u013066244
  • 2017年05月11日 09:53
  • 1655

OFFICE//Excel-使用宏操作另一个Excel文件

#使用宏在一个Excel文件中操作另一个Excel文件。办公软件中使用宏处理一些信息,尤其是大量的重复信息,可以提高效率。操作过程结构如下:   Dim strFilePath As String  ...
  • sunsley
  • sunsley
  • 2006年02月22日 10:44
  • 1788

java poi技术操作excel之读取Excel

代码: package com.csii.rwexcel; import java.io.File; import java.io.FileInputStream; import java.io....
  • u013068377
  • u013068377
  • 2016年06月13日 17:15
  • 10720
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:(6) 如何用Apache POI操作Excel文件-----POI-3.10的一个和注解(comment)相关的另外一个bug
举报原因:
原因补充:

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