本人学一下delphi怎么操作excel表格,正好要用到表格的复制粘贴功能,然后在网上找博客学习,结果找了以后发现基本上博客都是一个抄一个的,这样子我都不说什么了,问题是抄的很多都是错误的,误导了我两天。下面,我针对这些错误纠错一下,我不敢保证我说的对不对、全不全,反正我下面写的代码都是可以运行的。
Var
wb1 : Variant;
wb2 : Variant;
vsheet1 , vsheet2: Variant;
range1 , range2 : Variant;
1. 打开并显示表格就不多说了:
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就复制到原先的表格了
这样子复制粘贴过去的就是文本了,网上那些什么鬼粘贴方法我就不多说了,反正我是被他们坑了好久,而且居然不少于15个人的博客是错误的。
另外,网上那些博客里面这么写的:
ExcelApp1:=CreateOleObject('Excel.Application');
ExcelApp1.ActiveSheet.Rows[1].Copy;
上面这句反正我是执行不了,不知道他们是怎么执行的。
最后:附上我的代码。大家写博客的时候麻烦不要误导新手们,你附上的代码麻烦执行通过一下再发布出去可以吗?我也是个新手,所以被误导了好久。
unitUnit1;
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}
procedureTForm1.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.