本帖最后由 lostmarine 于 2011-02-25 15:23:43 编辑

解决方案 »

  1.   

    应该能改吧。我想帮你做一个。我还特地的研究了一下,但是jar我没有找到。又快下班了,所以我给你一个地址你自己研究一下。http://apps.hi.baidu.com/share/detail/22473132
      

  2.   

    //我用的是用于97-2003版的HSSF,构造函数接收的参加是FileInputStream对象.
    //下面的程序是用一个原有的文件生成一个新的.当然,如果对原有的文件修改后
    //将FileOutputStream设置为原有文件的路径,是可以更新原有文件的,我用过很多次了
    import java.io.*;
    import org.apache.poi.hssf.usermodel.*;
    public class Test
    {
        public static void main(String[] args)throws IOException
        {
            File file=new File("6-8.xls");
            FileInputStream fis=new FileInputStream(file);
            HSSFWorkbook workbook=new HSSFWorkbook(fis);
            fis.close();
            FileOutputStream fos=new FileOutputStream(new File("Copy.xls"));
            workbook.write(fos);
            fos.close();
        }
    }
      

  3.   

    不知道你的XSSFWorkbook 哪里来的,jxl?public class POIModify {
    public static void main(String[] args) throws FileNotFoundException, IOException {
    String fileName= "c:\\a.xls";
    POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream(fileName));
    HSSFWorkbook wb = new HSSFWorkbook(fs);
    HSSFSheet sheet = wb.getSheetAt(0);
    int rows  = sheet.getPhysicalNumberOfRows();
    HSSFRow row   = sheet.getRow((short)0);
    HSSFCell cel  = row.getCell((short)0);
    cel.setCellValue("1111");
    FileOutputStream out = new FileOutputStream("c:\\a.xls");
    wb.write(out);
    out.close();
    }
    }
      

  4.   

    周六周日没上网,今天回来继续补充一下
    先补充下代码吧,是用POI操作excel2007        String fileName = "d:/test.xlsx";//这个excel中本身是有内容的
            XSSFWorkbook xfw = new XSSFWorkbook(fileName);//这里我怀疑后台打开了一个流
            XSSFSheet sheet = xfw.getSheetAt(1);
                      
                      //修改某个单元格的值
            sheet.getRow(0).createCell(5).setCellValue("test");
            
                      //这里是读取操作,经过试验,是可以读取数据的
                      
              //以下代码,如果加上的话,原来的excel就会被修改成1kb,而且无法打开,如果不加的话,单元格是不会被修改的。     
            FileOutputStream fos = new FileOutputStream(fileName) ; 
                      xfw.write(fos);
                      fos.flush();
                      fos.close();经过试验发现:如果我生成一个新文件,那么是没有问题的,但是输出流还定位到老文件上,就出问题了。我又试了一下new File().delete() 和new File().renameTo() 来删除老文件,改名新文件,但是修改失败,方法返回false。根据我的分析,应该是XSSFWorkbook xfw = new XSSFWorkbook(fileName);这句代码,打开了一个输入流,但是没有关闭。我找了这个对象的方法,也没有发现关闭流的方法。
    还有什么其他思路么?JXL的话,貌似不支持2007
      

  5.   

    获取xfw里的字节,关闭xfw,然后再用fos写,试试看