请教POI用法问题 本帖最后由 thefirstz 于 2010-10-18 16:20:12 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 因为还有一些单元格是空白的而已。在Excel中保存的时候,其实可能有一些空白的单元格会保存到文件中的。所以你不能用LastRow、LastCell来判断有多少行、多少列不是空白的。我的测试不会错,你的出错是指什么?你最后没有保存回文件啊,只是修改了内存模型而已。 最后需要调用book.write方法写回文件的。 1.首先row.getLastCellNum没有问题。LZ出现的结果可能是因为6~14个cell中有内容。或者设置了空白内容,这样都会算有效cell。以至于结果不同。如果你新建一个excel的话,如设置6行6列去读取的话,没有问题。 String path="xxxx"; HSSFWorkbook wb= new HSSFWorkbook(new FileInputStream(path)); HSSFSheet sheet = wb.getSheet("xxxx"); int rows = sheet.getPhysicalNumberOfRows(); System.out.println("行数:"+rows); for (int i = 0; i < rows; i++) { HSSFRow row = sheet.getRow(i); short cellNum = row.getLastCellNum(); System.out.println(cellNum); }2.无论是删除还是修改,你操作的是HSSFWorkbook,所以将修改后的HSSFWorkbook重新写出。 FileOutputStream out = new FileOutputStream("xxxx"); wb.write(out); 对了,楼主你可以重新建立个excel,把你的有效数据,拷贝到新的excel中,然后再测试,是否会出现有效cell不同的情况。 你是说 列数都一样 但是cellNum = row.getLastCellNum();//大小从6-14列不等这里取出来的确不一样?? POI是不是没法在原excel上修改数据? 你再write回去就没有问题啊。因为它是内存模型而已,而且有时候也未必需要修改内存中的对象就需要写回文件啊。所以肯定不会自动回写啊 我看了下POI的API,传入的都是InputStream,不是OutputStream,这个可以修改吗? 数据库连接池配置方法的选择? bat命令调度目标程序后怎么使其正常关闭? varchar和char有什么区别? Error allocating a servlet instance应该怎么解决? 标签<swift:link 高分 myeclipse+weblogic+ejb的开发 摘除EJB 这是哪些包起冲突呢? 请教高手,hibernate初始化问题 关于如何在javamail中修改密码 多张表如何实现sql语句拼接 验证码的代码如何写
我的测试不会错,你的出错是指什么?你最后没有保存回文件啊,只是修改了内存模型而已。
HSSFWorkbook wb= new HSSFWorkbook(new FileInputStream(path));
HSSFSheet sheet = wb.getSheet("xxxx");
int rows = sheet.getPhysicalNumberOfRows();
System.out.println("行数:"+rows);
for (int i = 0; i < rows; i++) {
HSSFRow row = sheet.getRow(i);
short cellNum = row.getLastCellNum();
System.out.println(cellNum);
}2.无论是删除还是修改,你操作的是HSSFWorkbook,所以将修改后的HSSFWorkbook重新写出。 FileOutputStream out = new FileOutputStream("xxxx");
wb.write(out);
但是cellNum = row.getLastCellNum();//大小从6-14列不等
这里取出来的确不一样??