标签:
本人学一下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.
标签:
原文地址:http://www.cnblogs.com/Blogs-young-chan/p/4909237.html