本帖最后由 thefirstz 于 2010-10-18 16:20:12 编辑

解决方案 »

  1.   

    因为还有一些单元格是空白的而已。在Excel中保存的时候,其实可能有一些空白的单元格会保存到文件中的。所以你不能用LastRow、LastCell来判断有多少行、多少列不是空白的。
    我的测试不会错,你的出错是指什么?你最后没有保存回文件啊,只是修改了内存模型而已。
      

  2.   

    最后需要调用book.write方法写回文件的。
      

  3.   

    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);
      

  4.   

    对了,楼主你可以重新建立个excel,把你的有效数据,拷贝到新的excel中,然后再测试,是否会出现有效cell不同的情况。
      

  5.   

    你是说 列数都一样 
    但是cellNum = row.getLastCellNum();//大小从6-14列不等
    这里取出来的确不一样??
      

  6.   

    POI是不是没法在原excel上修改数据?
      

  7.   

    你再write回去就没有问题啊。因为它是内存模型而已,而且有时候也未必需要修改内存中的对象就需要写回文件啊。所以肯定不会自动回写啊
      

  8.   

    我看了下POI的API,传入的都是InputStream,不是OutputStream,这个可以修改吗?