注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

鑫淼梦园的博客

圆你的梦想 从这里开始

 
 
 

日志

 
 

delphi自带控件操作excel  

2014-04-17 16:09:50|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
分类: Delphi学习资料2014-01-05 14:12 111人阅读 评论(0) 收藏 举报

在介绍使用delphi控件前,我们首先需要了解关于EXCEL的几个基本概念:EXCEL应用程序、工作薄(book)、工作表(sheet),我们每次打开excel应用程序时,都会看到一个工作薄和三张工作表,这些都是EXCEL应用程序默认提供建好的。一个ExceL应用程序可以包含多个工作薄(book),每个工作薄至少需要包含一个工作表(sheet)。

图1 一个空的EXCEL应用程序窗口

图2 具有3个工作薄的EXCEL应用

点击工具栏中“新建”按钮,可以添加新的工作薄,如图3所示:

图3 新建按钮可以创建新的工作薄

图4 工作薄中包含工作表,右击表名(例如sheet1,sheet2...),在弹出的菜单中点击“插入”查单可以添加一张新的工作表。


delphi操作EXCEL的控件

在servers控件选项页面中,选择ExcelApplication、ExcelWorkbook和ExcelWorksheet这3个控件放置在窗体上,如图所示:


图5 控件在servers选项卡中的样式

说明:如果在servers选项卡中找不到这3个控件,请手动安装。以Delphi7为例,点击“component”菜单,在菜单栏中点击“Install Packages...”,在弹出的窗体中点击“Add”按钮,在delphi的安装目录下的bin目录中找到“dclofficexp70.bpl”。选择后进行控件安装即可。

图6

“”

图7


放置好3个控件的示例界面如图8所示:

图8


完整的程序代码如下所示:

[delphi] view plaincopy在CODE上查看代码片派生到我的代码片
  1. unit Unit1;  
  2.   
  3. interface  
  4.   
  5. uses  
  6.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  
  7.   Dialogs, ExcelXP, OleServer, StdCtrls, ComObj;  
  8.   
  9. type  
  10.   TForm1 = class(TForm)  
  11.     exclApp1: TExcelApplication;  
  12.     exclSht1: TExcelWorksheet;  
  13.     exclBk1: TExcelWorkbook;  
  14.     btn1: TButton;  
  15.     btn2: TButton;  
  16.     mmo1: TMemo;  
  17.     procedure btn1Click(Sender: TObject);  
  18.     procedure btn2Click(Sender: TObject);  
  19.   private  
  20.     { Private declarations }  
  21.   public  
  22.     { Public declarations }  
  23.   end;  
  24.   
  25. var  
  26.   Form1: TForm1;  
  27.   
  28. const  
  29.   EXCEL_OPEN_PATH: string = 'C:\testExcelDemo.XLS';  
  30.   EXCEL_SAVE_PATH: string = 'C:\testExcelDemo.xls';  
  31.   
  32. implementation  
  33.   
  34. {$R *.dfm}  
  35.   
  36. procedure TForm1.btn1Click(Sender: TObject);  
  37. const  
  38.   ROW_COL: STRING = '第%d行,第%d列';  
  39. var  
  40.   wkExcel: _Workbook;  
  41.   wsExcel: _Worksheet;  
  42.   i, j: Integer;  
  43.   strSaveExcelName: string;  
  44. begin  
  45.   // 创建Excel  
  46.   try  
  47.     // 连接到Excel  
  48.     exclApp1.Connect;  
  49.     // 显示询问窗口(比如文件名重复是否保存之类的询问)  
  50.     exclApp1.DisplayAlerts[0] := True;  
  51.     // 不显示EXCEL窗口  
  52.     exclApp1.Visible[0] := True;  
  53.     // 设置标题栏内容  
  54.     exclApp1.Caption := 'Test Excel Demo';  
  55.     // 创建一份空的工作簿,默认包含3个工作表  
  56.     wkExcel := exclApp1.Workbooks.Add(EmptyParam, 0);  
  57.     // TExcelWorkbook连接到创建的工作簿  
  58.     exclBk1.ConnectTo(wkExcel);  
  59.     // 激活工作簿  
  60.     exclBk1.Activate;  
  61.     // 统计工作薄的有几张工作表  
  62. //    ShowMessage(IntToStr(exclBk1.Worksheets.Count));  
  63.   
  64.     // 创建一张新的工作表  
  65.     wsExcel := (exclBk1.Worksheets.Add(EmptyParam, EmptyParam, EmptyParam, EmptyParam, 0)) as _Worksheet;  
  66.     exclSht1.ConnectTo(wsExcel);  
  67.     exclSht1.Activate;  
  68.     // 设置当前工作表的名称  
  69.     exclSht1.Name := 'New Worksheet';  
  70.     // 设置EXCEL表的第一行为表的名称  
  71.     // 设定从A列到D列的列宽  
  72.     exclSht1.Rows.Range['A1','D1'].ColumnWidth := 30;  
  73.     // 设定第一行从A列到D列的字体颜色为蓝色  
  74.     exclSht1.Rows.Range['A1','D1'].Font.Color := clblue;  
  75.     // 设定第一行从A列到D列的字体加粗  
  76.     exclSht1.Rows.Range['A1','D1'].Font.Bold := true;  
  77.     // 设定第一行从A列到D列的字号为18  
  78.     exclSht1.Rows.Range['A1','D1'].Font.Size := 18;  
  79.     // 设定第一行从A列到D列合并  
  80.     exclSht1.Rows.Range['A1','D1'].Merge(4);  
  81.     // 调整第一行行高  
  82.     exclSht1.Rows.Range['A1','D1'].Rows.RowHeight := 30;  
  83.     // 设置文本垂直居中  
  84.     exclSht1.Rows.Range['A1','D1'].VerticalAlignment := xlcenter;  
  85.     // 设置文本水平居中  
  86.     exclSht1.Rows.Range['A1','D1'].HorizontalAlignment := xlcenter;  
  87.     // 填充内容  
  88.     exclSht1.Cells.Item[11] := 'TEST EXCEL DEMO';  
  89.   
  90.     // 设置EXCEL表的第二行为表头  
  91.     // 设定第二行从A列到D列的字体颜色为红色  
  92.     exclSht1.Rows.Range['A2','D2'].Font.Color := clRed;  
  93.       
  94.     // 填充第一行,A列到D列的单元格  
  95.     exclSht1.Cells.Item[21] := '第一列';  
  96.     exclSht1.Cells.Item[22] := '第二列';  
  97.     exclSht1.Cells.Item[23] := '第三列';  
  98.     exclSht1.Cells.Item[24] := '第四列';  
  99.   
  100.     // 填充一个4x4的表格  
  101.     for i := 3 to 7 do  
  102.     begin  
  103.       for j := 1 to 4 do  
  104.       begin  
  105.         exclSht1.Cells.Item[i, j] := Format(ROW_COL,[i, j]);  
  106.       end;  
  107.     end;  
  108.   
  109.     // 给A1到D7整个范围加边框  
  110.     exclSht1.Rows.Range['A1','D7'].Borders.LineStyle := 1;  
  111.   
  112.     // 保存excel文件  
  113.     try  
  114.       // 可以通过FileExists()函数预先判断文件名是否重名  
  115.       exclSht1.SaveAs(EXCEL_SAVE_PATH);  
  116.     except  
  117.       // 发现文件名重复时选择不替换保存会抛出异常  
  118.       on e: EOleException do // 引用ComObj单元  
  119.       begin  
  120. //        exclSht1.Delete; // 删除当前工作表  
  121.         ShowMessage(e.ClassName);  
  122.       end;  
  123.     end;  
  124.   
  125.   finally  
  126.     // 如果工作簿没有保存,强制设置为已保存,避免在调用Quit方法时再次提示保存文件  
  127.     if not exclBk1.Saved[0]  then  
  128.     begin  
  129.       ShowMessage('工作薄尚未保存!');  
  130.       exclBk1.Saved[0] := True; // 放弃存盘  
  131.     end;  
  132.     exclSht1.Disconnect;  
  133.     exclBk1.Disconnect;  
  134.     exclApp1.Disconnect;  
  135.     exclApp1.Quit;  
  136.   end;  
  137. end;  
  138.   
  139. procedure TForm1.btn2Click(Sender: TObject);  
  140. var  
  141.   wkExcel: _Workbook;  
  142.   wsExcel: _Worksheet;  
  143.   i, j: Integer;  
  144.   strSaveExcelName: string;  
  145.   iValidRows: Integer; // 工作表的有效行  
  146.   iValidCols: Integer; // 工作表的有效列  
  147.   strContent: string;  // 工作表的内容  
  148. begin  
  149.   mmo1.Clear;  
  150.   // 读Excel  
  151.   try  
  152.     // 连接到excel应用程序  
  153.     exclApp1.Connect;  
  154.     exclApp1.Visible[0] := False;  
  155.     // 打开一个已经存在的EXCEL文件    
  156.     exclApp1.Workbooks.Open(EXCEL_OPEN_PATH, EmptyParam, EmptyParam, EmptyParam, EmptyParam,  
  157.       EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam,  
  158.       EmptyParam, EmptyParam, EmptyParam, 0);  
  159.   
  160.     // 连接到第一个工作簿  
  161.     exclBk1.ConnectTo(exclApp1.Workbooks.Item[1]);  
  162.   
  163.     // 连接到第一个工作表  
  164.     wsExcel := exclBk1.Worksheets.Item[1as _Worksheet;  
  165.     exclSht1.ConnectTo(wsExcel);  
  166.     // 激活工作表  
  167.     exclSht1.Activate(0);  
  168.     iValidRows := exclSht1.UsedRange[0].Rows.Count;    // 有效行数  
  169.     iValidCols := exclSht1.UsedRange[0].Columns.Count; // 有效列数  
  170.     ShowMessage(IntToStr(iValidRows) + ', ' + IntToStr(iValidCols));  
  171.   
  172.     for i := 1 to iValidRows do  
  173.     begin  
  174.       strContent := ''// 清空内容  
  175.       for j := 1 to iValidCols do  
  176.       begin  
  177.         // 读工作表单元格  
  178.         strContent :=strContent + string(exclSht1.Cells.Item[i, j]) + ', ';  
  179.       end;  
  180.       // 显示在mmo1中  
  181.       mmo1.Lines.Add(strContent);  
  182.     end;  
  183.   finally  
  184.     exclSht1.Disconnect;  
  185.     exclBk1.Disconnect;  
  186.     exclApp1.Disconnect;  
  187.     exclApp1.Quit;  
  188.   end;  
  189. end;  
  190.   
  191. end.  
  评论这张
 
阅读(324)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017