码迷,mamicode.com
首页 > Windows程序 > 详细

Delphi对Excel复制粘贴操作纠错

时间:2015-10-25 19:14:33      阅读:180      评论:0      收藏:0      [点我收藏+]

标签:

 

本人学一下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就复制到原先的表格了

  

这样子复制粘贴过去的就是文本了,网上那些粘贴方法我就不多说了,反正我是被他们坑了好久,而且居然不少于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.

 

  

Delphi对Excel复制粘贴操作纠错

标签:

原文地址:http://www.cnblogs.com/Blogs-young-chan/p/4909237.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!