如题:我在使用XLSReadWriteII5控件的时候发现在调用write方法后,会将上次的写过的内容也重新写一遍。这样的话要是多次调用write的话岂不是之前的内容一直在反复重写。有什么方法可以清除掉已经写过的内存?
如下是我做测试的代码:
 XLS := TXLSReadWriteII5.creat(Nil);
  XLS.Filename := 'E:\RunData\123.xlsx';
  xls.Sheets[0].AsString[0,0] := '123';
  XLS.Sheets[0].AsString[1,1] := 'test';
  XLS.Sheets[0].AsString[2,2] := 'Hello';
  xls.write;
  XLS.Filename := 'E:\RunData\123-1.xlsx';
  XLS.Sheets[0].AsString[5,5] := 'delphi';
  xls.Write;这样会发现第二个文件中也含有第一个文件的内容。
如果我需要在同一个文件中反复修改某些数据的话,那是不是之前写过的数据还是会一遍一遍的重复写入?

解决方案 »

  1.   

    加一个FreeandNil(xls)试一试,我试了一下,加不加都没问题,我用的create(application)。
      

  2.   

    xls.write;
    两次写入?当然是重复了,xls的内容并没有清除啊。
      

  3.   


    xls的内容怎么清除啊?除了释放xls。比如我想反复的更改一个文件的话,每次更改后write一次。但是不关闭文件。过一段时间数据更新后把更新后的数据追加到后边。此时调用write的话是不是会把之前写过的内容再写一次。有没有办法把之前写过的数据释放掉?
      

  4.   

    第一个xls.write;后面加一个xls.clear(1);写到123.xlsx的内容就被清空了。
      

  5.   

    xls.clear也可以
      

  6.   


    我用create(application)试了下,结果是一样的。还是有残留
      

  7.   


    我用create(application)试了下,结果是一样的。还是有残留
    这个好像是需不需要手工释放的,nil好像必须手工释放,我也不是太清楚
      

  8.   


    我是要写同一个sheet,反复操作。上面只是我做的一个实验。发现有残留。现在就想着怎样可以把残留内容清除掉。可能是之前没表达清楚。不好意思啊
      

  9.   


    我是要写同一个sheet,反复操作。上面只是我做的一个实验。发现有残留。现在就想着怎样可以把残留内容清除掉。可能是之前没表达清楚。不好意思啊而且重复写入,文件打了的话就会特别慢。而且占资源。所以想的是写一次就把这次占用的内存清理掉。提高写入速度
      

  10.   

    1、如果单纯写sheet,不如直接在excel中直接写;
    2、如果是数据库调出的数据,修改后写入sheet,你还是修改后写一次的写比较合理,也就是释放一下xls,直接就清空了上一次的内容,另外可以在create前面加一个对话框判断 if fileexists(文件名) then来确认覆盖原文件。
    不知道我理解的是不是对。
      

  11.   


    我用的是Berlin10.1
      

  12.   

    你的代码首句有误,应为:
      XLS := TXLSReadWriteII5.create(Nil);
      

  13.   


    我有TXLSReadWriteII5,要吗?
      

  14.   


    我有TXLSReadWriteII5,要吗?
    哦,对了,我的是只到XE7,不知XE10能否装
      

  15.   

    @joanagle 发一份TXLSReadWriteII5,谢谢。