使用以下代码在test1.xls写入一个新数据(test1.xls原有一部分数据,只是在原sheet上添加一个新的数据)
public static void main(String[] args) {
    try {
        Workbook wb = Workbook.getWorkbook(new File("data\\test1.xls"));
        WritableWorkbook book = Workbook.createWorkbook(new File("data\\test1.xls"), wb);        WritableSheet sheet = book.getSheet(0);// 获得工作表
        WritableCell cellWrite = sheet.getWritableCell(18, 2);  //获得单元格
        
        Label l = (Label) cellWrite;
        l.setString("数据数据!!!");        book.write();
        book.close();
    } catch (Exception e) {
        System.out.println(e);
  }
}
运行结果:打开excel文件的时候报错,Excel在“test1.xls”中发现不可读的内容,但是确定之后仍能打开,而且数据确实已经写进去了
有谁知道这是为什么吗?或者我写的代码有问题?
非常感谢!

解决方案 »

  1.   

    你的路径是么有问题?我给个我们项目中的通用写法你参考下String reportFilePath = request.getSession().getServletContext().getRealPath("/templates/materialsupply.xls"); //这里路径很重要
    Workbook book = Workbook.getWorkbook(new FileInputStream(reportFilePath));
    WritableWorkbook workbook = Workbook.createWorkbook(outStream,book); 
    WritableSheet sheet = workbook.getSheet(0);
    ((Label)sheet.getWritableCell(0,0)).setString("数据");
    workbook.write();
    workbook.close();
    outStream.close();
    response.flushBuffer();因为我们是要导出Excel,所以使用的是response输出流,先读取模块,再往里面写数据,不是很复杂,你试下。
      

  2.   

    补充一下,因为是web方式的输出,要加上下面这些,我不知道你是哪种应用
    OutputStream outStream = response.getOutputStream(); //取得输出流
    response.reset();
    //设置响应和下载文件名
    response.setHeader("content-disposition", "attachment;filename=materialsupply.xls");
    response.setContentType("application/vnd.ms-excel");
      

  3.   

    非常感谢!我的问题解决了,是文件的问题,很奇怪,之前的excel文件每次打开会报安全级别的提醒,说是文件安全级别被设为高了,我换了个文件就没问题了太诡异了
      

  4.   

    我的也很奇怪 生成的30张报表里面只有几张打开的时候会提示安全性问题
    很奇怪 不知道什么原因
    我手工在excel里面把宏的安全性弄成低了 但是感觉也不是个事儿