本人學一下delphi怎麼操作excel表格,正好要用到表格的復制粘貼功能,然後在網上找博客學習,結果找了以後發現基本上博客都是一個抄一個的,這樣子我都不說什麼了,問題是抄的很多
是錯誤的,誤導了我兩天。下面,我針對這些錯誤糾錯一下,我不敢保證我說的對不對、全不全,反正我下面寫的代碼都是可以運行的。
Var wb1 : Variant; wb2 : Variant; vsheet1 , vsheet2: Variant; range1 , range2 : Variant;
wb1 := CreateOleObject('Excel.Application'); wb2 := CreateOleObject('Excel.Application'); wb1.WorkBooks.add; wb2.WorkBooks.Open('D:\Information.xlsx'); wb1.Visible := True; wb2.Visible := True;
2.工作簿賦值:
vsheet1 := wb1.ActiveWorkBook.Sheets[1]; //工作簿之前已經設置成了活動表格 vsheet2 := wb2.ActiveWorkBook.Sheets[1]; // vsheet2 := wb2.Workbooks[1].sheets[1]; //這樣子也行。
3.復制操作:
我覺得復制操作是最重要的操作,因為網上有很多復制操作都是錯誤的,之前我就是被各種復制粘貼博客給誤導了。
vsheet2.Copy(EmptyParam , wb1.ActiveWorkBook.Sheets[1]);//復制到sheet1後面 vsheet2.Copy(wb2.ActiveWorkBook.Sheets[1]); //復制到sheet1前面
vsheet2.rows[1].copy; //復制第一行,copy會有紅色報錯,但是可以運行的。 vsheet2.range['A1:A2'].Copy; //復制A1A2兩格 vsheet2.UsedRange.Copy; //復制所有
注意:網上是這麼寫的:
vsheet1.Used.Range.Copy;
這是錯誤的,我就是被這個誤導了好久,而且我在網上搜索,大家都是這麼寫(明顯是一個抄一個),真是無語,寫博客時候麻煩運行通過一下可以嗎?待會我在下面針對這些坑爹的博客上面的錯誤進行修改。
vsheet2.range['A2']. PasteSpecial; //這個是粘貼,PasteSpecial有紅色報錯,可以運行的。
下面這句是不行的,要指定粘貼到哪,但是網上那些博客裡面卻寫這樣是可以的,坑爹。
vsheet2.range.pastespecial; //錯誤
上面的粘貼都是在同一個表格裡面粘貼,如果粘貼到另外一個表格呢?
vsheet1.range[‘A1’].PasteSpecial;
注意,這裡粘貼就出現問題了,從表格二復制粘貼到表格一,復制粘貼過去的是一張圖片,但是在同一張表格裡面執行這個操作粘貼的是文本,所以要注意一下。
下面是在兩個表格之間復制:
range2 := vsheet2.range[vsheet2.cells[1,1],vsheet2.cells[1, 2]];//指定復制位置 range2.select; range2.copy; range1 := vsheet1.range[vsheet1.cells[1,1],vsheet1.cells[1, 2]]; range1.select; vsheet1.paste; //這裡改成vsheet2就復制到原先的表格了
這樣子復制粘貼過去的就是文本了,網上那些粘貼方法我就不多說了,反正我是被他們坑了好久,而且居然不少於10個人的博客是錯誤的。
另外,網上那些博客裡面這麼寫的:
ExcelApp1:= CreateOleObject('Excel.Application'); ExcelApp1.ActiveSheet.Rows[1 ].Copy;
上面這句反正我是執行不了,不知道他們是怎麼執行的。
最後:附上我的代碼。大家寫博客的時候麻煩不要誤導新手們,你附上的代碼麻煩執行通過一下再發布出去可以嗎?我也是個新手,所以被誤導了好久。
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs , ComObj; type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); var wb1 : Variant; wb2 : Variant; vsheet1 : Variant; vsheet2 : Variant; range1 , range2 : Variant; begin wb1 := CreateOleObject('Excel.Application'); wb2 := CreateOleObject('Excel.Application'); wb1.WorkBooks.add; wb2.WorkBooks.Open('D:\Information.xlsx'); wb1.Visible := True; wb2.Visible := True; vsheet1 := wb1.ActiveWorkBook.Sheets[1]; vsheet2 := wb2.ActiveWorkBook.Sheets[1]; // vsheet2 := wb2.Workbooks[1].sheets[1]; //這兩句效果一樣 {下面每一段都是可以單獨運行的,大家只要稍稍修改一下就可以了, 我不能說我說的全是對的,但是下面的代碼我都是一句句執行過的。} // vsheet2.Copy(EmptyParam , wb2.ActiveWorkBook.Sheets[1]); //復制到sheet1後面 // vsheet2.Copy(wb2.ActiveWorkBook.Sheets[1]); //復制到sheet1前面 // wb2.worksheets.rows[1].Copy; //這句是不能執行的 // vsheet2.rows[1].copy; //復制第一行 // vsheet2.range['A1:A2'].Copy; //復制指定區域 // vsheet2.usedrange.Copy; //復制所有 // vsheet2.range['A2'].pastespecial; //粘貼到指定位置 // range2:= vsheet2.range[vsheet2.cells[1,1],vsheet2.cells[1, 2]]; // range2.select; // range2.copy; // range1 := vsheet1.range[vsheet1.cells[1,1],vsheet1.cells[1, 2]]; // range1.select; // vsheet1.paste; //從vsheet2復制粘貼到vsheet1中 end; end.