Delphi对Excel复制粘贴操作纠错

 

本人学一下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.

 

你可能感兴趣的:(随笔)