Delphi应用EXCEL(3) 使用OLEOBJECT
<h3>1、创建EXCEL的方法</h3><p>首先创建 Excel 对象,使用单元ComObj :</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">Var
ExcelApp : Variant ; <br>begin
ExcelApp :</span>= CreateOleObject ( <span style="color: rgba(128, 0, 0, 1)">''</span> Excel.Application <span style="color: rgba(128, 0, 0, 1)">''</span> ) ;</pre>
</div>
<p>使用OLEOBJECT创建的EXCEL应用程序是一个Variant类型,所以DELPHI不能自动补充语句,也没有帮助文件,需要到visual basic中去寻求帮助,完成功能语句的调用。</p>
<p>下面的部分都是引用别人的内容:</p>
<blockquote>
<p>使用oleobject创建的excel有许多优点:</p>
<p>l 不需要安装OFFICE控件</p>
<p>l 打开、保存等等更简单,可以省略参数的输入</p>
<p>但也有明显的缺点</p>
<p>l 不能自动填充代码</p>
<p>l 不能使用with do语句</p>
<p>l 需要手动关闭创建的office。</p>
<p>下面是一些关于oleobject的功能说明。</p>
<p>1 ) 显示当前窗口:</p>
<p> ExcelApp.Visible := True ;</p>
<p>2 ) 更改 Excel 标题栏:</p>
<p>ExcelApp.Caption := '' 应用程序调用 Microsoft Excel '' ;</p>
<p>3 ) 添加新工作簿:</p>
<p>ExcelApp.WorkBooks.Add ;</p>
<p>当然也可以定义一个变量OLEEXCELWB: Variant,</p>
<p>然后:OLEEXCELWB:= ExcelApp.WorkBooks.Add;则OLEEXCELWB就是新建的workbook;</p>
<p>4 ) 打开已存在的工作簿:</p>
<p>ExcelApp.WorkBooks.Open ( '' C : \Excel\Demo.xls '' ) ;</p>
<p>5 ) 设置第2个工作表为活动工作表:</p>
<p>ExcelApp.WorkSheets [ 2 ] .Activate ;</p>
<p>或</p>
<p>ExcelApp.WorksSheets [ '' Sheet2 '' ] .Activate ;</p>
<p>6 ) 给单元格赋值:</p>
<p>ExcelApp.Cells [ 1 , 4 ] .Value := '' 第一行第四列 '' ;</p>
<p>7 ) 设置指定列的宽度(单位:字符个数),以第一列为例:</p>
<p>ExcelApp.ActiveSheet.Columns [ 1 ] .ColumnsWidth := 5 ;</p>
<p>8 ) 设置指定行的高度(单位:磅)(1磅=0.035 厘米),以第二行为例:</p>
<p>ExcelApp.ActiveSheet.Rows [ 2 ] .RowHeight := 1 / 0.035 ; // 1厘米</p>
<p>9 ) 在第8行之前插入分页符:</p>
<p>ExcelApp.WorkSheets [ 1 ] .Rows [ 8 ] .PageBreak := 1 ;</p>
<p>10 ) 在第8列之前删除分页符:</p>
<p>ExcelApp.ActiveSheet.Columns [ 4 ] .PageBreak := 0 ;</p>
<p>11 ) 指定边框线宽度:</p>
<p>ExcelApp.ActiveSheet.Range [ '' B3 : D4 '' ] .Borders [ 2 ] .Weight := 3 ;</p>
<p>1 - 左 2 - 右 3 - 顶 4 - 底 5 - 斜 ( \ ) 6 - 斜 ( / ) ,7-10指的是range边框</p>
<p>12 ) 清除第一行第四列单元格公式:</p>
<p>ExcelApp.ActiveSheet.Cells [ 1 , 4 ] .ClearContents ;</p>
<p>13 ) 设置第一行字体属性:</p>
<p>ExcelApp.ActiveSheet.Rows [ 1 ] .Font.Name := '' 隶书 '' ;</p>
<p>ExcelApp.ActiveSheet.Rows [ 1 ] .Font.Color := clBlue ;</p>
<p>ExcelApp.ActiveSheet.Rows [ 1 ] .Font.Bold := True ;</p>
<p>ExcelApp.ActiveSheet.Rows [ 1 ] .Font.UnderLine := True ;</p>
<p>14 ) 进行页面设置:</p>
<p>a.页眉:</p>
<p>ExcelApp.ActiveSheet.PageSetup.CenterHeader := '' 报表演示 '' ;</p>
<p>b.页脚:</p>
<p>ExcelApp.ActiveSheet.PageSetup.CenterFooter := '' 第&P页 '' ;</p>
<p>c.页眉到顶端边距2cm:</p>
<p>ExcelApp.ActiveSheet.PageSetup.HeaderMargin := 2 / 0.035 ;</p>
<p>d.页脚到底端边距3cm:</p>
<p>ExcelApp.ActiveSheet.PageSetup.HeaderMargin := 3 / 0.035 ;</p>
<p>e.顶边距2cm:</p>
<p>ExcelApp.ActiveSheet.PageSetup.TopMargin := 2 / 0.035 ;</p>
<p>f.底边距2cm:</p>
<p>ExcelApp.ActiveSheet.PageSetup.BottomMargin := 2 / 0.035 ;</p>
<p>g.左边距2cm:</p>
<p>ExcelApp.ActiveSheet.PageSetup.LeftMargin := 2 / 0.035 ;</p>
<p>h.右边距2cm:</p>
<p>ExcelApp.ActiveSheet.PageSetup.RightMargin := 2 / 0.035 ;</p>
<p>i.页面水平居中:</p>
<p>ExcelApp.ActiveSheet.PageSetup.CenterHorizontally := 2 / 0.035 ;</p>
<p>j.页面垂直居中:</p>
<p>ExcelApp.ActiveSheet.PageSetup.CenterVertically := 2 / 0.035 ;</p>
<p>k.打印单元格网线:</p>
<p>ExcelApp.ActiveSheet.PageSetup.PrintGridLines := True ;</p>
<p>15 ) 拷贝操作:</p>
<p>a.拷贝整个工作表:</p>
<p>ExcelApp.ActiveSheet.Used.Range.Copy ;</p>
<p>b.拷贝指定区域:</p>
<p>ExcelApp.ActiveSheet.Range [ '' A1 : E2 '' ] .Copy ;</p>
<p>c.从A1位置开始粘贴:</p>
<p>ExcelApp.ActiveSheet.Range. [ '' A1 '' ] .PasteSpecial ;</p>
<p>d.从文件尾部开始粘贴:</p>
<p>ExcelApp.ActiveSheet.Range.PasteSpecial ;</p>
<p>16 ) 插入一行或一列:</p>
<p>a.ExcelApp.ActiveSheet.Rows [ 2 ] .Insert ;</p>
<p>b.ExcelApp.ActiveSheet.Columns [ 1 ] .Insert ;</p>
<p>17 ) 删除一行或一列:</p>
<p>a.ExcelApp.ActiveSheet.Rows [ 2 ] .Delete ;</p>
<p>b.ExcelApp.ActiveSheet.Columns [ 1 ] .Delete ;</p>
<p>18 ) 打印预览工作表:</p>
<p>ExcelApp.ActiveSheet.PrintPreview ;</p>
<p>19 ) 打印输出工作表:</p>
<p>ExcelApp.ActiveSheet.PrintOut ;</p>
<p>20 ) 工作表保存:</p>
<p>If Not ExcelApp.ActiveWorkBook.Saved Then</p>
<p> ExcelApp.ActiveSheet.PrintPreview ;</p>
<p>21 ) 工作表另存为:</p>
<p>ExcelApp.ActiveWorkBook.SaveAs ( '' C : \Excel\Demo1.xls '' ) ;</p>
<p>22 ) 放弃存盘:</p>
<p>ExcelApp.ActiveWorkBook.Saved := True ;</p>
<p>23 ) 关闭工作簿:</p>
<p>ExcelApp.WorkBooks.Close ;</p>
<p>24 ) 退出 Excel:</p>
<p>ExcelApp.Quit ;</p>
</blockquote>
<p>上面部分引用了别人的内容,都是在网上找的,如有冒犯,敬请指出,本人将尽快予以改正。</p>
<h3>2、使用DELPHI定义的office类型</h3>
<p>DELPHI定义了excelworkbook,excelworksheet等OFFICE类型,使用这些类型则可以自动填充代码,也可以使用with do语句。</p>
<p>需要应用单元:ExcelXP</p>
<p>下面的语句,就是此应用:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">var</span><span style="color: rgba(0, 0, 0, 1)"> oleobj:Variant; i,j:Integer;
es:ExcelWorksheet;
</span><span style="color: rgba(0, 0, 255, 1)">begin</span><span style="color: rgba(0, 0, 0, 1)">
oleobj:</span>=CreateOleObject(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">Excel.Application</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">);
oleobj.Visible:</span>=<span style="color: rgba(0, 0, 0, 1)">true;
oleobj.DisplayAlerts:</span>=<span style="color: rgba(0, 0, 0, 1)">False;
oleobj.workbooks.add;
es:</span>=iunknown(oleobj.Workbooks[<span style="color: rgba(128, 0, 128, 1)">1</span>].Worksheets[<span style="color: rgba(128, 0, 128, 1)">2</span>]) <span style="color: rgba(0, 0, 255, 1)">as</span><span style="color: rgba(0, 0, 0, 1)"> ExcelWorksheet;
</span><span style="color: rgba(0, 0, 255, 1)">with</span> es.Range[<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>,<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">G11</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">] DO
</span><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)">10</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> <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, 0, 1)">
ITEM:</span>=Format(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">%d行,%d列</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">,);
oleobj.cells[</span><span style="color: rgba(128, 0, 128, 1)">1</span>,<span style="color: rgba(128, 0, 128, 1)">2</span>].value:=<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">only a test</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
oleobj.activeworkbook.saveas(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">d:\abc.xls</span><span style="color: rgba(128, 0, 0, 1)">'</span>,TRUE);</pre>
</div>
<p>运行结果:</p>
<p><img src="https://img2023.cnblogs.com/blog/2037341/202308/2037341-20230807154119222-757233797.png"></p>
<p> </p>
<p>为什么oleobj.cells.value:='only a test';没有修改第一行,第二列的内容呢?</p>
<p>因为实际上该语句得到了很好地执行,但activesheet是sheet1,所以修改的sheet1的内容。</p>
<p>实际上,我们的delphi在安装OFFICE控件后,每次重新启动DELPHI,安装好的DELPHI控件需要手动引入,但单元“ExcelXP”即便不引入OFFIECE控件也可直接引用。</p>
<p>把variant类型的数据转换为DELPHI定义的excel类型的关键是使用iunknown进行转换。除此之外,就没有什么特殊的了。</p>
<p> </p><br><br>
来源:https://www.cnblogs.com/luohq001/p/17611656.html
頁:
[1]