delphi应用EXCEL(2) 使用delphi控件
<p>Delphi的excel控件在servers面板中,有些版本的DELPHI中未打开这些控件,但都是安装了的,手动去打开即可。</p><p>在servers控件选项页面中,选择ExcelApplication、ExcelWorkbook和ExcelWorksheet这3个控件。</p>
<ul>
<li>ExcelApplication:用于启动/关闭EXCEL应用程序。</li>
<li>ExcelWorkbook:用于连接工作薄。</li>
<li>ExcelWorksheet:用于连接工作表。</li>
</ul>
<p>我们的页面中使用这三个控件,命名分别是:</p>
<ul>
<li>exclApp1: TExcelApplication; </li>
<li>exclSht1: TExcelWorksheet; </li>
<li>exclBk1: TExcelWorkbook; </li>
</ul>
<h3>1. ExcelApplication的使用</h3>
<p>这个是应用程序控件,用于打开或关闭excel,或设置应用程序可见或不可见等属性,也可用于打开、关闭工作簿。</p>
<p>Autoconnect属性用于确定是否在执行程序是自动打开EXCEL,autoquit属性用于确定在关闭程序时是否自动关闭excel;</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 连接到Excel</span>
<span style="color: rgba(0, 0, 0, 1)">exclApp1.Connect;
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 显示询问窗口(比如文件名重复是否保存之类的询问)</span>
exclApp1.DisplayAlerts[<span style="color: rgba(128, 0, 128, 1)">0</span>] :=<span style="color: rgba(0, 0, 0, 1)"> True;
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 显示EXCEL窗口,默认显示,设置为false则在后台运行excel程序</span>
exclApp1.Visible[<span style="color: rgba(128, 0, 128, 1)">0</span>] :=<span style="color: rgba(0, 0, 0, 1)"> True;
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 设置标题栏内容</span>
exclApp1.Caption := <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">Test Excel Demo</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">全屏显示EXCEL</span>
EA1.DisplayAlerts[<span style="color: rgba(128, 0, 128, 1)">0</span>]:=TRUE;</pre>
</div>
<p>实际上,在这个控件中就可以实现对excel的所有操作,但接下来我们使用接下来的两个控件更方便。</p>
<h3>2. ExcelWorkbook的使用</h3>
<p>这个控件主要用于控制工作簿,在使用前,应与某工作簿链接。常见操作见下:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">VAR wkExcel: _Workbook;
……
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 创建一份空的工作簿,默认包含3个工作表</span>
wkExcel := exclApp1.Workbooks.Add(EmptyParam, <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> TExcelWorkbook连接到创建的工作簿</span>
<span style="color: rgba(0, 0, 0, 1)">exclBk1.ConnectTo(wkExcel);
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 激活工作簿</span>
<span style="color: rgba(0, 0, 0, 1)">exclBk1.Activate;
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 统计工作薄的有几张工作表</span>
ShowMessage(IntToStr(exclBk1.Worksheets.Count));</pre>
</div>
<p>可以使用控件Texcelworkbook通过连接_workbook来操作工作簿,其实也可直接操作_WORKBOOK,操作都是一样的。另外,_WORKBOOK的别名是Excelworkbook。</p>
<p>EA1下控制若干工作簿,但只有一个active(活动的)的工作簿,可以通过调用工作簿的activate来使得某一工作簿变成活动工作簿。</p>
<p>此外,EA1的worksheets并不是所有的sheets,而是活动工作簿的sheets,所以activeworksheet对应的是活动工作簿的活动工作表。</p>
<p>workbooks.count指的是工作簿的数量;</p>
<p>workbooks指的是第一个工作簿。</p>
<p>Workbooks.Add(EmptyParam, 0),第一个参数是新建的工作簿的类型,emptyparam表示是默认的excel工作簿,也可以是‘’空字符串。</p>
<p>打开工作簿的函数比较复杂,参数很多。</p>
<p>WorkBooks.Open(filename,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam, EmptyParam,EmptyParam,EmptyParam,EmptyParam, EmptyParam,EmptyParam,LCID);</p>
<p>同样的,保存这个工作表也非常复杂。</p>
<p>Excel.ActiveWorkBook.SaveAs ( ' MyOutput ' , EmptyParam,EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, LCID);</p>
<p>主要是包含了各种密码设置等等。</p>
<p>注意,<strong><span style="text-decoration: underline">emptyparam</span></strong><strong><span style="text-decoration: underline">并不是一个常量,而是一个函数</span></strong>,所以并不是每一个emptyparam都可以使用空字符串代替。</p>
<p>Activeworkbook.save(0)将以Activeworkbook.name加默认扩展名的文件名保存工作簿,但Activeworkbook.name是一个只读变量,不能修改,所以,另一种保存工作簿的方法是:</p>
<p>wkBook.Close(True, SaveAsName, EmptyParam, 0);</p>
<p>关闭workbook并保存。</p>
<p>第一个参数说明在关闭工作簿之前是否保存所做的修改。</p>
<p>第二个参数当然指的是文件名了。</p>
<p>第三个参数用于多位作者处理文档的情况。</p>
<h3>3. ExcelWorksheet的使用</h3>
<p>工作表的使用稍微复杂一点,因为工作表连接时的类型和workbook生成表的类型略有区别,需要你手动转换一下。</p>
<p>同时,workbook默认的sheets有三张,先请看下面的语句:</p>
<div class="cnblogs_code">
<pre>(EA1.ActiveWorkbook.Worksheets[<span style="color: rgba(128, 0, 128, 1)">2</span>] <span style="color: rgba(0, 0, 255, 1)">as</span> ExcelWorksheet).Activate(<span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">with</span> (EA1.ActiveSheet <span style="color: rgba(0, 0, 255, 1)">as</span> ExcelWorksheet) <span style="color: rgba(0, 0, 255, 1)">do</span>
<span style="color: rgba(0, 0, 255, 1)">begin</span><span style="color: rgba(0, 0, 0, 1)">
name:</span>=<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">shujuceshi</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">with</span> Cells.Range,Cells.Item[<span style="color: rgba(128, 0, 128, 1)">5</span>,<span style="color: rgba(128, 0, 128, 1)">5</span>]] <span style="color: rgba(0, 0, 255, 1)">do</span>
<span style="color: rgba(0, 0, 255, 1)">begin</span><span style="color: rgba(0, 0, 0, 1)">
Cells.RowHeight:</span>=<span style="color: rgba(128, 0, 128, 1)">30</span><span style="color: rgba(0, 0, 0, 1)">;
Cells.ColumnWidth:</span>=<span style="color: rgba(128, 0, 128, 1)">25</span><span style="color: rgba(0, 0, 0, 1)">;
Cells.Borders.Item[</span><span style="color: rgba(128, 0, 128, 1)">1</span>].Weight:=<span style="color: rgba(128, 0, 128, 1)">3</span><span style="color: rgba(0, 0, 0, 1)">;
Cells.Borders.Item[</span><span style="color: rgba(128, 0, 128, 1)">2</span>].Weight:=<span style="color: rgba(128, 0, 128, 1)">3</span><span style="color: rgba(0, 0, 0, 1)">;
Cells.Borders.Item[</span><span style="color: rgba(128, 0, 128, 1)">3</span>].Weight:=<span style="color: rgba(128, 0, 128, 1)">3</span><span style="color: rgba(0, 0, 0, 1)">;
Cells.Borders.Item[</span><span style="color: rgba(128, 0, 128, 1)">4</span>].Weight:=<span style="color: rgba(128, 0, 128, 1)">3</span><span style="color: rgba(0, 0, 0, 1)">;
Cells.Item[</span><span style="color: rgba(128, 0, 128, 1)">2</span>,<span style="color: rgba(128, 0, 128, 1)">3</span>]:=<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">=pi()</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
Cells.Range[</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">A1</span><span style="color: rgba(128, 0, 0, 1)">'</span>,<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">B2</span><span style="color: rgba(128, 0, 0, 1)">'</span>].Value2:=<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">test</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">end</span>;</pre>
</div>
<p>首先是让活动workbook的第二张表成为活动工作表;</p>
<p>接着针对第二章工作表(活动工作表表做操作)</p>
<p><img src="https://img2023.cnblogs.com/blog/2037341/202308/2037341-20230807151628698-955967077.png"></p>
<p> </p>
<p>参见上面的运行结果图,表下的cells表示表下的所有格子的集合。</p>
<p>然后在cells下用range函数圈定某些单元格,range的参数可以指定某些具体的单元格,例如例子中cells.item表示第二行第二列的单元格,也可直接用字符串’B2’表示。</p>
<p>然后圈定范围的单元格又可以从CELLS众检索,例如CELLS.item实际指向的是第三行第四列(因为cells子集是从2,2开始的)。里面的填充内容可以直接写字符串。当然这个字符串可以是excel的公式,例如本例中指的就是函数pi()</p>
<p>Cells的rowheight指的是指定cells的行高,注意,rowheight和columnwidth的单位是不一样的,例子中25的列宽明显比30的行高更高。</p>
<p><strong>Borders.item.weight</strong><strong>用于设置单元格的边框,1-6</strong><strong>分别表示左上右下斜反斜线的厚度。</strong></p>
<p><strong>Item</strong><strong>则指的是子集的外边框。</strong></p>
<p>Range子集的value2可以为子集的集体赋值。同样的,range[‘A1’,’B2’]并不是指定的sheet的一行一列到二行二列,而是子集的相对位置。</p>
<p>下面再慢慢讲讲使用控件的操作方式。</p>
<p>我们通常应该是针对range或item进行操作,item指向具体的单元格,通常只对其赋值。而range指向的是单元格子集,可以改变子集的字体,对齐方式,单元格显示格式化等等。</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 创建一张新的工作表</span>
wsExcel := (exclBk1.Worksheets.Add(EmptyParam, EmptyParam, EmptyParam, EmptyParam, <span style="color: rgba(128, 0, 128, 1)">0</span>)) <span style="color: rgba(0, 0, 255, 1)">as</span><span style="color: rgba(0, 0, 0, 1)"> _Worksheet;
exclSht1.ConnectTo(wsExcel);
exclSht1.Activate;</span></pre>
</div>
<p>某张表的名称:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 设置当前工作表的名称</span>
exclSht1.Name := <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">New Worksheet</span><span style="color: rgba(128, 0, 0, 1)">'</span>;</pre>
</div>
<p>ROWS表示行的数据,rows.range表示行内列的数据。</p>
<p>如果不设置具体的range,则可以设置整个表的行高;columns表示列,同样也可以设置列数据。需要注意的是,列宽和行高是的数字是有限的,设置过高的列宽或行高则无反应。</p>
<div class="cnblogs_code">
<pre>exclSht1.Rows.Range[<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">A1</span><span style="color: rgba(128, 0, 0, 1)">'</span>,<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">D1</span><span style="color: rgba(128, 0, 0, 1)">'</span>].ColumnWidth := <span style="color: rgba(128, 0, 128, 1)">30</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 设定第一行从A列到D列的字体颜色为蓝色</span>
exclSht1.Rows.Range[<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">A1</span><span style="color: rgba(128, 0, 0, 1)">'</span>,<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">D1</span><span style="color: rgba(128, 0, 0, 1)">'</span>].Font.Color :=<span style="color: rgba(0, 0, 0, 1)"> clblue;
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 设定第一行从A列到D列的字体加粗</span>
exclSht1.Rows.Range[<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">A1</span><span style="color: rgba(128, 0, 0, 1)">'</span>,<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">D1</span><span style="color: rgba(128, 0, 0, 1)">'</span>].Font.Bold :=<span style="color: rgba(0, 0, 0, 1)"> true;
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 设定第一行从A列到D列的字号为18</span>
exclSht1.Rows.Range[<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">A1</span><span style="color: rgba(128, 0, 0, 1)">'</span>,<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">D1</span><span style="color: rgba(128, 0, 0, 1)">'</span>].Font.Size := <span style="color: rgba(128, 0, 128, 1)">18</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 设定第一行从A列到D列合并</span>
exclSht1.Rows.Range[<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">A1</span><span style="color: rgba(128, 0, 0, 1)">'</span>,<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">D1</span><span style="color: rgba(128, 0, 0, 1)">'</span>].Merge(<span style="color: rgba(128, 0, 128, 1)">4</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 调整第一行行高</span>
exclSht1.Rows.Range[<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">A1</span><span style="color: rgba(128, 0, 0, 1)">'</span>,<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">D1</span><span style="color: rgba(128, 0, 0, 1)">'</span>].Rows.RowHeight := <span style="color: rgba(128, 0, 128, 1)">30</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 设置文本垂直居中</span>
exclSht1.Rows.Range[<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">A1</span><span style="color: rgba(128, 0, 0, 1)">'</span>,<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">D1</span><span style="color: rgba(128, 0, 0, 1)">'</span>].VerticalAlignment :=<span style="color: rgba(0, 0, 0, 1)"> xlcenter;
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 设置文本水平居中</span>
exclSht1.Rows.Range[<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">A1</span><span style="color: rgba(128, 0, 0, 1)">'</span>,<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">D1</span><span style="color: rgba(128, 0, 0, 1)">'</span>].HorizontalAlignment :=<span style="color: rgba(0, 0, 0, 1)"> xlcenter;
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 填充内容</span>
exclSht1.Cells.Item[<span style="color: rgba(128, 0, 128, 1)">1</span>, <span style="color: rgba(128, 0, 128, 1)">1</span>] := <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">TEST EXCEL DEMO</span><span style="color: rgba(128, 0, 0, 1)">'</span>;</pre>
</div>
<p>Cells属性用于存储的数据。下列是一个九九乘法表。</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">for</span> I := <span style="color: rgba(128, 0, 128, 1)">1</span> <span style="color: rgba(0, 0, 255, 1)">to</span> <span style="color: rgba(128, 0, 128, 1)">9</span> <span style="color: rgba(0, 0, 255, 1)">do</span>
<span style="color: rgba(0, 0, 255, 1)">for</span> j:=<span style="color: rgba(128, 0, 128, 1)">1</span> <span style="color: rgba(0, 0, 255, 1)">to</span> I<span style="color: rgba(0, 0, 255, 1)">do</span><span style="color: rgba(0, 0, 0, 1)">
es1.Cells.Item:</span>=format( <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">%d × %d=%d</span><span style="color: rgba(128, 0, 0, 1)">'</span>,);</pre>
</div>
<p>下面的语句用于设置页面。</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">with</span> wkSheet.PageSetUp<span style="color: rgba(0, 0, 255, 1)">do</span>
<span style="color: rgba(0, 0, 255, 1)">begin</span> PaperSize: = xlPaperA4;<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> Paper type A4 </span>
PrintTitleRows : = <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)"> A1:D1 </span><span style="color: rgba(128, 0, 0, 1)">'</span> ;<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> Repeat this row/page </span>
LeftMargin: = <span style="color: rgba(128, 0, 128, 1)">18</span> ;<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 0.25" Left Margin </span>
RightMargin: = <span style="color: rgba(128, 0, 128, 1)">18</span> ;<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 0.25" will vary between printers </span>
TopMargin: = <span style="color: rgba(128, 0, 128, 1)">36</span> ;<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 0.5"</span>
BottomMargin: = <span style="color: rgba(128, 0, 128, 1)">36</span> ;<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 0.5" </span>
CenterHorizontally: =<span style="color: rgba(0, 0, 0, 1)"> True;
Orientation: </span>= <span style="color: rgba(128, 0, 128, 1)">1</span> ;<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 横向打印(landscape)=2, </span>
portrait = <span style="color: rgba(128, 0, 128, 1)">1</span>
<span style="color: rgba(0, 0, 255, 1)">end</span>; </pre>
</div>
<p> </p><br><br>
来源:https://www.cnblogs.com/luohq001/p/17611571.html
頁:
[1]