delphi应用EXCEL(2) 使用delphi控件

Delphi的excel控件在servers面板中,有些版本的DELPHI中未打开这些控件,但都是安装了的,手动去打开即可。

在servers控件选项页面中,选择ExcelApplication、ExcelWorkbook和ExcelWorksheet这3个控件。

  • ExcelApplication:用于启动/关闭EXCEL应用程序。
  • ExcelWorkbook:用于连接工作薄。
  • ExcelWorksheet:用于连接工作表。

我们的页面中使用这三个控件,命名分别是:

  • exclApp1: TExcelApplication; 
  • exclSht1: TExcelWorksheet; 
  • exclBk1: TExcelWorkbook; 

1.      ExcelApplication的使用

这个是应用程序控件,用于打开或关闭excel,或设置应用程序可见或不可见等属性,也可用于打开、关闭工作簿。

Autoconnect属性用于确定是否在执行程序是自动打开EXCEL,autoquit属性用于确定在关闭程序时是否自动关闭excel;

// 连接到Excel  
exclApp1.Connect;  
// 显示询问窗口(比如文件名重复是否保存之类的询问)  
exclApp1.DisplayAlerts[0] := True;  
// 显示EXCEL窗口,默认显示,设置为false则在后台运行excel程序  
exclApp1.Visible[0] := True;  
// 设置标题栏内容  
exclApp1.Caption := 'Test Excel Demo';  
//全屏显示EXCEL
EA1.DisplayAlerts[0]:=TRUE;

实际上,在这个控件中就可以实现对excel的所有操作,但接下来我们使用接下来的两个控件更方便。

2.      ExcelWorkbook的使用

这个控件主要用于控制工作簿,在使用前,应与某工作簿链接。常见操作见下:

VAR wkExcel: _Workbook; 
……
// 创建一份空的工作簿,默认包含3个工作表  
wkExcel := exclApp1.Workbooks.Add(EmptyParam, 0);  
// TExcelWorkbook连接到创建的工作簿  
exclBk1.ConnectTo(wkExcel);  
// 激活工作簿  
exclBk1.Activate;  
// 统计工作薄的有几张工作表  
ShowMessage(IntToStr(exclBk1.Worksheets.Count));  

可以使用控件Texcelworkbook通过连接_workbook来操作工作簿,其实也可直接操作_WORKBOOK,操作都是一样的。另外,_WORKBOOK的别名是Excelworkbook。

EA1下控制若干工作簿,但只有一个active(活动的)的工作簿,可以通过调用工作簿的activate来使得某一工作簿变成活动工作簿。

此外,EA1的worksheets并不是所有的sheets,而是活动工作簿的sheets,所以activeworksheet对应的是活动工作簿的活动工作表。

workbooks.count指的是工作簿的数量;

workbooks[1]指的是第一个工作簿。

Workbooks.Add(EmptyParam, 0),第一个参数是新建的工作簿的类型,emptyparam表示是默认的excel工作簿,也可以是‘’空字符串。

打开工作簿的函数比较复杂,参数很多。

WorkBooks.Open(filename,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam, EmptyParam,EmptyParam,EmptyParam,EmptyParam, EmptyParam,EmptyParam,LCID);

同样的,保存这个工作表也非常复杂。

Excel.ActiveWorkBook.SaveAs ( ' MyOutput ' , EmptyParam,EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, LCID);

主要是包含了各种密码设置等等。

注意,emptyparam并不是一个常量,而是一个函数,所以并不是每一个emptyparam都可以使用空字符串代替。

Activeworkbook.save(0)将以Activeworkbook.name加默认扩展名的文件名保存工作簿,但Activeworkbook.name是一个只读变量,不能修改,所以,另一种保存工作簿的方法是:

wkBook.Close(True, SaveAsName, EmptyParam, 0);

关闭workbook并保存。

第一个参数说明在关闭工作簿之前是否保存所做的修改。

第二个参数当然指的是文件名了。

第三个参数用于多位作者处理文档的情况。

3.      ExcelWorksheet的使用

工作表的使用稍微复杂一点,因为工作表连接时的类型和workbook生成表的类型略有区别,需要你手动转换一下。

同时,workbook默认的sheets有三张,先请看下面的语句:

(EA1.ActiveWorkbook.Worksheets[2] as ExcelWorksheet).Activate(0);
  with (EA1.ActiveSheet as ExcelWorksheet) do
  begin
    name:='shujuceshi';
    with Cells.Range[Cells.Item[2,2],Cells.Item[5,5]] do
    begin
      Cells.RowHeight:=30;
      Cells.ColumnWidth:=25;
      Cells.Borders.Item[1].Weight:=3;
      Cells.Borders.Item[2].Weight:=3;
      Cells.Borders.Item[3].Weight:=3;
      Cells.Borders.Item[4].Weight:=3;
      Cells.Item[2,3]:='=pi()';
     Cells.Range['A1','B2'].Value2:='test';
    end;
  end;

首先是让活动workbook的第二张表成为活动工作表;

接着针对第二章工作表(活动工作表表做操作)

 

参见上面的运行结果图,表下的cells表示表下的所有格子的集合。

然后在cells下用range函数圈定某些单元格,range的参数可以指定某些具体的单元格,例如例子中cells.item[2,2]表示第二行第二列的单元格,也可直接用字符串’B2’表示。

然后圈定范围的单元格又可以从CELLS众检索,例如CELLS.item[2,3]实际指向的是第三行第四列(因为cells子集是从2,2开始的)。里面的填充内容可以直接写字符串。当然这个字符串可以是excel的公式,例如本例中指的就是函数pi()

Cells的rowheight指的是指定cells的行高,注意,rowheight和columnwidth的单位是不一样的,例子中25的列宽明显比30的行高更高。

Borders.item[I].weight用于设置单元格的边框,1-6分别表示左上右下斜反斜线的厚度。

Item[7-10]则指的是子集的外边框。

Range子集的value2可以为子集的集体赋值。同样的,range[‘A1’,’B2’]并不是指定的sheet的一行一列到二行二列,而是子集的相对位置。

下面再慢慢讲讲使用控件的操作方式。

我们通常应该是针对range或item进行操作,item指向具体的单元格,通常只对其赋值。而range指向的是单元格子集,可以改变子集的字体,对齐方式,单元格显示格式化等等。

// 创建一张新的工作表  
wsExcel := (exclBk1.Worksheets.Add(EmptyParam, EmptyParam, EmptyParam, EmptyParam, 0)) as _Worksheet;  
exclSht1.ConnectTo(wsExcel);  
exclSht1.Activate;  

某张表的名称:

// 设置当前工作表的名称  
exclSht1.Name := 'New Worksheet';  

ROWS表示行的数据,rows.range表示行内列的数据。

如果不设置具体的range,则可以设置整个表的行高;columns表示列,同样也可以设置列数据。需要注意的是,列宽和行高是的数字是有限的,设置过高的列宽或行高则无反应。

exclSht1.Rows.Range['A1','D1'].ColumnWidth := 30;  
    // 设定第一行从A列到D列的字体颜色为蓝色  
exclSht1.Rows.Range['A1','D1'].Font.Color := clblue;  
   // 设定第一行从A列到D列的字体加粗  
exclSht1.Rows.Range['A1','D1'].Font.Bold := true;  
    // 设定第一行从A列到D列的字号为18  
exclSht1.Rows.Range['A1','D1'].Font.Size := 18;  
    // 设定第一行从A列到D列合并  
exclSht1.Rows.Range['A1','D1'].Merge(4);  
    // 调整第一行行高  
exclSht1.Rows.Range['A1','D1'].Rows.RowHeight := 30;  
    // 设置文本垂直居中  
exclSht1.Rows.Range['A1','D1'].VerticalAlignment := xlcenter;  
    // 设置文本水平居中  
exclSht1.Rows.Range['A1','D1'].HorizontalAlignment := xlcenter;  
    // 填充内容  
exclSht1.Cells.Item[1, 1] := 'TEST EXCEL DEMO';  

Cells属性用于存储的数据。下列是一个九九乘法表。

for I := 1 to 9 do
    for j:=1 to I  do
    es1.Cells.Item[i,j]:=format( '%d × %d=%d',[i,j,i*j]);

下面的语句用于设置页面。

with wkSheet.PageSetUp  do  
     begin PaperSize: = xlPaperA4;  // Paper type A4 
         PrintTitleRows : =   ' A1:D1 ' ;  // Repeat this row/page 
         LeftMargin: = 18 ;  // 0.25" Left Margin 
         RightMargin: = 18 ;  // 0.25" will vary between printers 
         TopMargin: = 36 ;  // 0.5"  
         BottomMargin: = 36 ;  // 0.5" 
         CenterHorizontally: = True; 
        Orientation: = 1 ;  // 横向打印(landscape)=2, 
         portrait = 1  
      end; 

 

posted @ 2023-08-07 15:20  Luo大哥  阅读(1293)  评论(0编辑  收藏  举报