(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...相关推荐
- Apache POI操作Excel文件
Apache POI是用Java编写的免费开源的跨平台的Java API,Apache POI提供API给Java程序对Microsoft Office格式档案读和写的功能,其中使用最多的就是使用PO ...
- Java使用POI操作Excel文件
我们可以使用POI操作Excel文件,本文主要介绍:"导入POI的Maven依赖"."创建Poi对象"."Poi读取Excel工作表数目". ...
- 采用APACHE POI操作EXCEL文件--计算式调用另一文件
http://blog.sina.com.cn/s/blog_6151984a0100sczi.html 测试环境: 当前EXCEL文件: workbook.xls 假设一个CELL的计算式如下: ...
- 如何用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 如何画图 ...
- java使用poi操作excel文件_使用 java apache poi 操作 excel xlsx 文件
工作中临时需要对各种订单量进行简单的统计分析,为了方便简单学习了apache poi 对 xlsx 文件的基本操作,简单记录 1. 引包 org.apache.poi poi-ooxml 4.1.2 ...
- java excel导出2007_java操作excel文件,实现批量导出,和导入
一.POI的定义 JAVA中操作Excel的有两种比较主流的工具包: JXL 和 POI .jxl 只能操作Excel 95, 97, 2000也即以.xls为后缀的excel.而poi可以操作Exc ...
- 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 ...
最新文章
- 不会用Photoshop抠图?Mask R-CNN助你一键“除”人
- 服务器管理神器 开源堡垒机 jumpserver 实战教程
- Java 注解用法详解——@SuppressWarnings
- 进一步掌握linux吧
- ES6(三)数组的扩展
- [转]默认构造函数的作用
- vue教程2:vue基础
- 通过Postfix构建Exchange Server 2010邮件网关部署系列一:创建新域环境
- jQuery插件编写基础之“又见弹窗”
- 给postmessage加上callback方法
- 基于正态分布的抽样分布-T分布
- fn键台式计算机在哪,fn键在哪?老司机教你fn键使用方法
- 福建地区市场份额最大的调查研究咨询公司
- 什么是负载?如何查看服务器的机器负载情况?
- Java游戏开发——飞行射击类游戏
- 动态内存分配(详解)
- 【数据结构】 栈的知识点
- 实训:网站诊断分析(12.10)
- 川大研究生计算机网络挂科,四川大学200多名研究生被清退,让人倍感惋惜,原因几乎相同!...
- 【Java-Calendar】打印日历
热门文章
- python执行语句转换成str_python3.x,_python3.4.3如何转换str字符串?,python3.x - phpStudy...
- android 6.0 数据库权限,Android超清晰6.0权限申请AndPermission
- matlab中的uint8函数,未定义与 'uint8' 类型的输入参数相对应的函数 'fitnessty'
- 添加include文件路径_-isystem以及include_next的副作用
- android gsensor 坐标,MTK Android G sensor 原理,配置,调试
- 安装python扩展库时只能使用pip_安装 Python 扩展库时只能使用 pip 工具在线安装,如果安装不成功就没有别的办法了。_学小易找答案...
- MySQL 学习三:来教你如何完全卸载掉本地“头大的” MySQL 数据库!
- linux 文件系统cache,终于找到一篇详解Linux文件系统Cache的文章
- java中父类与子类, 不同的两个类中的因为构造函数由于递归调用导致栈溢出问题...
- java jdbc rowset_JAVA基础知识之JDBC——RowSet