如題:我在使用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;
這樣會發現第二個檔案中也含有第一個檔案的內容。
如果我需要在同一個檔案中反復修改某些資料的話,那是不是之前寫過的資料還是會一遍一遍的重復寫入?
uj5u.com熱心網友回復:
加一個FreeandNil(xls)試一試,我試了一下,加不加都沒問題,我用的create(application)。uj5u.com熱心網友回復:
xls.write;兩次寫入?當然是重復了,xls的內容并沒有清除啊。
uj5u.com熱心網友回復:
xls的內容怎么清除啊?除了釋放xls。
比如我想反復的更改一個檔案的話,每次更改后write一次。但是不關閉檔案。過一段時間資料更新后把更新后的資料追加到后邊。此時呼叫write的話是不是會把之前寫過的內容再寫一次。有沒有辦法把之前寫過的資料釋放掉?
uj5u.com熱心網友回復:
第一個xls.write;后面加一個xls.clear(1);寫到123.xlsx的內容就被清空了。uj5u.com熱心網友回復:
xls.clear也可以uj5u.com熱心網友回復:
我用create(application)試了下,結果是一樣的。還是有殘留
uj5u.com熱心網友回復:
這個好像是需不需要手工釋放的,nil好像必須手工釋放,我也不是太清楚
uj5u.com熱心網友回復:
第一個xls.write;后面加一個xls.clear(1);寫到123.xlsx的內容就被清空了。
我是要寫同一個sheet,反復操作。上面只是我做的一個實驗。發現有殘留。現在就想著怎樣可以把殘留內容清除掉。可能是之前沒表達清楚。不好意思啊
uj5u.com熱心網友回復:
第一個xls.write;后面加一個xls.clear(1);寫到123.xlsx的內容就被清空了。
我是要寫同一個sheet,反復操作。上面只是我做的一個實驗。發現有殘留。現在就想著怎樣可以把殘留內容清除掉。可能是之前沒表達清楚。不好意思啊
而且重復寫入,檔案打了的話就會特別慢。而且占資源。所以想的是寫一次就把這次占用的記憶體清理掉。提高寫入速度
uj5u.com熱心網友回復:
1、如果單純寫sheet,不如直接在excel中直接寫;2、如果是資料庫調出的資料,修改后寫入sheet,你還是修改后寫一次的寫比較合理,也就是釋放一下xls,直接就清空了上一次的內容,另外可以在create前面加一個對話框判斷 if fileexists(檔案名) then來確認覆寫原檔案。
不知道我理解的是不是對。
uj5u.com熱心網友回復:
@Not_Important請問XLSReadWrite是破解版嗎,可以發一份of D7給我([email protected])嗎,謝謝
uj5u.com熱心網友回復:
@Not_Important
請問XLSReadWrite是破解版嗎,可以發一份of D7給我([email protected])嗎,謝謝
我用的是Berlin10.1
uj5u.com熱心網友回復:
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:[email protected]
uj5u.com熱心網友回復:
你的代碼首句有誤,應為:XLS := TXLSReadWriteII5.create(Nil);
uj5u.com熱心網友回復:
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:[email protected]
我有TXLSReadWriteII5,要嗎?
uj5u.com熱心網友回復:
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:[email protected]
我有TXLSReadWriteII5,要嗎?
哦,對了,我的是只到XE7,不知XE10能否裝
uj5u.com熱心網友回復:
@joanagle 發一份TXLSReadWriteII5,謝謝。轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/35960.html
標籤:VCL組件開發及應用
下一篇:實作資料庫之間的同步
