XLSReadWrite 写的时候为什么会有上次的残留内容呢?这些残留该怎么清理?

Not_Important 2018-08-30 03:19:06
如题:我在使用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;

这样会发现第二个文件中也含有第一个文件的内容。
如果我需要在同一个文件中反复修改某些数据的话,那是不是之前写过的数据还是会一遍一遍的重复写入?
...全文
974 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
lyhoo163 2018-10-25
  • 打赏
  • 举报
回复
@joanagle 发一份TXLSReadWriteII5,谢谢。
joanagle 2018-10-25
  • 打赏
  • 举报
回复
引用 15 楼 joanagle 的回复:
[quote=引用 13 楼 lyhoo163 的回复:]
   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.Sheets[0].ClearCells;
XLS.Filename := 'E:\RunData\123-1.xlsx';
XLS.Sheets[0].AsString[5,5] := 'delphi';
xls.Write;


原因是XLS中写了三个Cell,写入第一个EXCEL文件,继续写一个Cell,再写入第二个EXCEL文件,当然第二个文件中,都有四个CELL了。
在二者之间加一个清空Cell,就可以 了。

你的 TXLSReadWriteII5,能传给我吗。想在XE10,上试用一下。谢谢:Email:lyhoo163@163.com


我有TXLSReadWriteII5,要吗?[/quote]
哦,对了,我的是只到XE7,不知XE10能否装
joanagle 2018-10-25
  • 打赏
  • 举报
回复
引用 13 楼 lyhoo163 的回复:
   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.Sheets[0].ClearCells;
XLS.Filename := 'E:\RunData\123-1.xlsx';
XLS.Sheets[0].AsString[5,5] := 'delphi';
xls.Write;


原因是XLS中写了三个Cell,写入第一个EXCEL文件,继续写一个Cell,再写入第二个EXCEL文件,当然第二个文件中,都有四个CELL了。
在二者之间加一个清空Cell,就可以 了。

你的 TXLSReadWriteII5,能传给我吗。想在XE10,上试用一下。谢谢:Email:lyhoo163@163.com


我有TXLSReadWriteII5,要吗?
lyhoo163 2018-09-06
  • 打赏
  • 举报
回复
   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.Sheets[0].ClearCells;
XLS.Filename := 'E:\RunData\123-1.xlsx';
XLS.Sheets[0].AsString[5,5] := 'delphi';
xls.Write;


原因是XLS中写了三个Cell,写入第一个EXCEL文件,继续写一个Cell,再写入第二个EXCEL文件,当然第二个文件中,都有四个CELL了。
在二者之间加一个清空Cell,就可以 了。

你的 TXLSReadWriteII5,能传给我吗。想在XE10,上试用一下。谢谢:Email:lyhoo163@163.com

lyhoo163 2018-09-06
  • 打赏
  • 举报
回复
你的代码首句有误,应为:
XLS := TXLSReadWriteII5.create(Nil);
Not_Important 2018-09-05
  • 打赏
  • 举报
回复
引用 11 楼 josencom 的回复:
@Not_Important
请问XLSReadWrite是破解版吗,可以发一份of D7给我(3339501550@qq.com)吗,谢谢


我用的是Berlin10.1
josencom 2018-08-31
  • 打赏
  • 举报
回复
@Not_Important
请问XLSReadWrite是破解版吗,可以发一份of D7给我(3339501550@qq.com)吗,谢谢
秋天之落叶 2018-08-30
  • 打赏
  • 举报
回复
1、如果单纯写sheet,不如直接在excel中直接写;
2、如果是数据库调出的数据,修改后写入sheet,你还是修改后写一次的写比较合理,也就是释放一下xls,直接就清空了上一次的内容,另外可以在create前面加一个对话框判断 if fileexists(文件名) then来确认覆盖原文件。
不知道我理解的是不是对。
秋天之落叶 2018-08-30
  • 打赏
  • 举报
回复
引用 6 楼 Not_Important 的回复:
[quote=引用 1 楼 leavesguth 的回复:]
加一个FreeandNil(xls)试一试,我试了一下,加不加都没问题,我用的create(application)。


我用create(application)试了下,结果是一样的。还是有残留[/quote]
这个好像是需不需要手工释放的,nil好像必须手工释放,我也不是太清楚
Not_Important 2018-08-30
  • 打赏
  • 举报
回复
引用 1 楼 leavesguth 的回复:
加一个FreeandNil(xls)试一试,我试了一下,加不加都没问题,我用的create(application)。


我用create(application)试了下,结果是一样的。还是有残留
Not_Important 2018-08-30
  • 打赏
  • 举报
回复
引用 8 楼 Not_Important 的回复:
[quote=引用 4 楼 leavesguth 的回复:]
第一个xls.write;后面加一个xls.clear(1);写到123.xlsx的内容就被清空了。


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

而且重复写入,文件打了的话就会特别慢。而且占资源。所以想的是写一次就把这次占用的内存清理掉。提高写入速度
秋天之落叶 2018-08-30
  • 打赏
  • 举报
回复
第一个xls.write;后面加一个xls.clear(1);写到123.xlsx的内容就被清空了。
Not_Important 2018-08-30
  • 打赏
  • 举报
回复
引用 4 楼 leavesguth 的回复:
第一个xls.write;后面加一个xls.clear(1);写到123.xlsx的内容就被清空了。


我是要写同一个sheet,反复操作。上面只是我做的一个实验。发现有残留。现在就想着怎样可以把残留内容清除掉。可能是之前没表达清楚。不好意思啊
Not_Important 2018-08-30
  • 打赏
  • 举报
回复
引用 2 楼 leavesguth 的回复:
xls.write;
两次写入?当然是重复了,xls的内容并没有清除啊。


xls的内容怎么清除啊?除了释放xls。

比如我想反复的更改一个文件的话,每次更改后write一次。但是不关闭文件。过一段时间数据更新后把更新后的数据追加到后边。此时调用write的话是不是会把之前写过的内容再写一次。有没有办法把之前写过的数据释放掉?
秋天之落叶 2018-08-30
  • 打赏
  • 举报
回复
xls.clear也可以
秋天之落叶 2018-08-30
  • 打赏
  • 举报
回复
加一个FreeandNil(xls)试一试,我试了一下,加不加都没问题,我用的create(application)。
秋天之落叶 2018-08-30
  • 打赏
  • 举报
回复
xls.write;
两次写入?当然是重复了,xls的内容并没有清除啊。

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧