Delphi对Excel的所有操作(二)

本文详细介绍如何使用Delphi进行Excel文件的各种操作,包括创建、编辑、格式化表格及图表等,适用于希望集成Excel功能到Delphi应用的开发者。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(一) 使用动态创建的方法 
首先创建 Excel 对象,使用ComObj: 
  
var ExcelApp: Variant; 
  ExcelApp :
= CreateOleObject( 'Excel.Application' ); 
1) 显示当前窗口: 
  ExcelApp.Visible :
= True; 
2) 更改 Excel 标题栏: 
  ExcelApp.Caption :
= '应用程序调用 Microsoft Excel'
3) 添加新工作簿: 
  ExcelApp.WorkBooks.Add; 
4) 打开已存在的工作簿: 
  ExcelApp.WorkBooks.Open( 
'C:\Excel\Demo.xls' ); 
5) 设置第2个工作表为活动工作表: 
  ExcelApp.WorkSheets[
2].Activate;  或 
  ExcelApp.WorksSheets[ 
'Sheet2' ].Activate; 
6) 给单元格赋值: 
  ExcelApp.Cells[
1,4].Value := '第一行第四列'
7) 设置指定列的宽度(单位:字符个数),以第一列为例: 
  ExcelApp.ActiveSheet.Columns[
1].ColumnsWidth := 5
8) 设置指定行的高度(单位:磅)(1磅=0.035厘米),以第二行为例: 
  ExcelApp.ActiveSheet.Rows[
2].RowHeight := 1/0.035// 1厘米 
9) 在第8行之前插入分页符: 
  ExcelApp.WorkSheets[
1].Rows[8].PageBreak := 1
10) 在第8列之前删除分页符: 
  ExcelApp.ActiveSheet.Columns[
4].PageBreak := 0
11) 指定边框线宽度: 
  ExcelApp.ActiveSheet.Range[ 
'B3:D4' ].Borders[2].Weight := 3
  
1-左    2-右   3-顶    4-底   5-斜( \ )     6-斜( / ) 
12) 清除第一行第四列单元格公式: 
  ExcelApp.ActiveSheet.Cells[
1,4].ClearContents; 
13) 设置第一行字体属性: 
  ExcelApp.ActiveSheet.Rows[
1].Font.Name := '隶书'
  ExcelApp.ActiveSheet.Rows[
1].Font.Color  := clBlue; 
  ExcelApp.ActiveSheet.Rows[
1].Font.Bold   := True; 
  ExcelApp.ActiveSheet.Rows[
1].Font.UnderLine := True; 
14) 进行页面设置: 
a.页眉: 
  ExcelApp.ActiveSheet.PageSetup.CenterHeader :
= '报表演示'
b.页脚: 
  ExcelApp.ActiveSheet.PageSetup.CenterFooter :
= '第&P页'
c.页眉到顶端边距2cm: 
  ExcelApp.ActiveSheet.PageSetup.HeaderMargin :
= 2/0.035
d.页脚到底端边距3cm: 
  ExcelApp.ActiveSheet.PageSetup.HeaderMargin :
= 3/0.035
e.顶边距2cm: 
  ExcelApp.ActiveSheet.PageSetup.TopMargin :
= 2/0.035
f.底边距2cm: 
  ExcelApp.ActiveSheet.PageSetup.BottomMargin :
= 2/0.035
g.左边距2cm: 
  ExcelApp.ActiveSheet.PageSetup.LeftMargin :
= 2/0.035
h.右边距2cm: 
  ExcelApp.ActiveSheet.PageSetup.RightMargin :
= 2/0.035
i.页面水平居中: 
  ExcelApp.ActiveSheet.PageSetup.CenterHorizontally :
= 2/0.035
j.页面垂直居中: 
  ExcelApp.ActiveSheet.PageSetup.CenterVertically :
= 2/0.035
k.打印单元格网线: 
  ExcelApp.ActiveSheet.PageSetup.PrintGridLines :
= True; 
15) 拷贝操作: 
a.拷贝整个工作表: 
  ExcelApp.ActiveSheet.Used.Range.Copy; 
b.拷贝指定区域: 
  ExcelApp.ActiveSheet.Range[ 
'A1:E2' ].Copy; 
c.从A1位置开始粘贴: 
  ExcelApp.ActiveSheet.Range.[ 
'A1' ].PasteSpecial; 
d.从文件尾部开始粘贴: 
  ExcelApp.ActiveSheet.Range.PasteSpecial; 
16) 插入一行或一列: 
a. ExcelApp.ActiveSheet.Rows[
2].Insert; 
b. ExcelApp.ActiveSheet.Columns[
1].Insert; 
17) 删除一行或一列: 
a. ExcelApp.ActiveSheet.Rows[
2].Delete; 
b. ExcelApp.ActiveSheet.Columns[
1].Delete; 
18) 打印预览工作表: 
  ExcelApp.ActiveSheet.PrintPreview; 
19) 打印输出工作表: 
  ExcelApp.ActiveSheet.PrintOut; 
20) 工作表保存: 
  
if not ExcelApp.ActiveWorkBook.Saved then 
  ExcelApp.ActiveSheet.PrintPreview; 
21) 工作表另存为: 
  ExcelApp.SaveAs( 
'C:\Excel\Demo1.xls' ); 
22) 放弃存盘: 
  ExcelApp.ActiveWorkBook.Saved :
= True; 
23) 关闭工作簿: 
  ExcelApp.WorkBooks.Close; 
24) 退出 Excel: 
  ExcelApp.Quit; 

(二) 使用Delphi 控件方法 
  在Form中分别放入ExcelApplication, ExcelWorkbook和ExcelWorksheet。 
1)  打开Excel 
  ExcelApplication1.Connect; 
2) 显示当前窗口: 
  ExcelApplication1.Visible[
0]:=True; 
3) 更改 Excel 标题栏: 
  ExcelApplication1.Caption :
= '应用程序调用 Microsoft Excel'
4) 添加新工作簿: 
  ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks.Add(EmptyParam,
0)); 
5) 添加新工作表: 
  
var Temp_Worksheet: _WorkSheet; 
  
begin 
    Temp_Worksheet:
=ExcelWorkbook1.WorkSheets.Add(EmptyParam,EmptyParam,EmptyParam,EmptyParam,0) as _WorkSheet; 
    ExcelWorkSheet1.ConnectTo(Temp_WorkSheet); 
  End; 
6) 打开已存在的工作簿: 
  ExcelApplication1.Workbooks.Open (c:\a.xls 
  EmptyParam,EmptyParam,EmptyParam,EmptyParam, 
  EmptyParam,EmptyParam,EmptyParam,EmptyParam, 
  EmptyParam,EmptyParam,EmptyParam,EmptyParam,
0
7) 设置第2个工作表为活动工作表: 
  ExcelApplication1.WorkSheets[
2].Activate;  或 
  ExcelApplication1.WorksSheets[ 
'Sheet2' ].Activate; 
8) 给单元格赋值: 
  ExcelApplication1.Cells[
1,4].Value := '第一行第四列'
9) 设置指定列的宽度(单位:字符个数),以第一列为例: 
  ExcelApplication1.ActiveSheet.Columns[
1].ColumnsWidth := 5
10) 设置指定行的高度(单位:磅)(1磅=0.035厘米),以第二行为例: 
  ExcelApplication1.ActiveSheet.Rows[
2].RowHeight := 1/0.035// 1厘米 
11) 在第8行之前插入分页符: 
  ExcelApplication1.WorkSheets[
1].Rows[8].PageBreak := 1
12) 在第8列之前删除分页符: 
  ExcelApplication1.ActiveSheet.Columns[
4].PageBreak := 0
13) 指定边框线宽度: 
  ExcelApplication1.ActiveSheet.Range[ 
'B3:D4' ].Borders[2].Weight := 3
  
1-左    2-右   3-顶    4-底   5-斜( \ )     6-斜( / ) 
14) 清除第一行第四列单元格公式: 
  ExcelApplication1.ActiveSheet.Cells[
1,4].ClearContents; 
15) 设置第一行字体属性: 
  ExcelApplication1.ActiveSheet.Rows[
1].Font.Name := '隶书'
  ExcelApplication1.ActiveSheet.Rows[
1].Font.Color  := clBlue; 
  ExcelApplication1.ActiveSheet.Rows[
1].Font.Bold   := True; 
  ExcelApplication1.ActiveSheet.Rows[
1].Font.UnderLine := True; 
16) 进行页面设置: 
a.页眉: 
  ExcelApplication1.ActiveSheet.PageSetup.CenterHeader :
= '报表演示'
b.页脚: 
  ExcelApplication1.ActiveSheet.PageSetup.CenterFooter :
= '第&P页'
c.页眉到顶端边距2cm: 
  ExcelApplication1.ActiveSheet.PageSetup.HeaderMargin :
= 2/0.035
d.页脚到底端边距3cm: 
  ExcelApplication1.ActiveSheet.PageSetup.HeaderMargin :
= 3/0.035
e.顶边距2cm: 
  ExcelApplication1.ActiveSheet.PageSetup.TopMargin :
= 2/0.035
f.底边距2cm: 
  ExcelApplication1.ActiveSheet.PageSetup.BottomMargin :
= 2/0.035
g.左边距2cm: 
  ExcelApplication1.ActiveSheet.PageSetup.LeftMargin :
= 2/0.035
h.右边距2cm: 
  ExcelApplication1.ActiveSheet.PageSetup.RightMargin :
= 2/0.035
i.页面水平居中: 
  ExcelApplication1.ActiveSheet.PageSetup.CenterHorizontally :
= 2/0.035
j.页面垂直居中: 
  ExcelApplication1.ActiveSheet.PageSetup.CenterVertically :
= 2/0.035
k.打印单元格网线: 
  ExcelApplication1.ActiveSheet.PageSetup.PrintGridLines :
= True; 
17) 拷贝操作: 
a.拷贝整个工作表: 
  ExcelApplication1.ActiveSheet.Used.Range.Copy; 
b.拷贝指定区域: 
  ExcelApplication1.ActiveSheet.Range[ 
'A1:E2' ].Copy; 
c.从A1位置开始粘贴: 
  ExcelApplication1.ActiveSheet.Range.[ 
'A1' ].PasteSpecial; 

d.从文件尾部开始粘贴: 
  ExcelApplication1.ActiveSheet.Range.PasteSpecial; 
18) 插入一行或一列: 
a. ExcelApplication1.ActiveSheet.Rows[
2].Insert; 
b. ExcelApplication1.ActiveSheet.Columns[
1].Insert; 
19) 删除一行或一列: 
a. ExcelApplication1.ActiveSheet.Rows[
2].Delete; 
b. ExcelApplication1.ActiveSheet.Columns[
1].Delete; 
20) 打印预览工作表: 
  ExcelApplication1.ActiveSheet.PrintPreview; 
21) 打印输出工作表: 
  ExcelApplication1.ActiveSheet.PrintOut; 
22) 工作表保存: 
  
if not ExcelApplication1.ActiveWorkBook.Saved then 
    ExcelApplication1.ActiveSheet.PrintPreview; 
23) 工作表另存为: 
  ExcelApplication1.SaveAs( 
'C:\Excel\Demo1.xls' ); 
24) 放弃存盘: 
  ExcelApplication1.ActiveWorkBook.Saved :
= True; 
25) 关闭工作簿: 
  ExcelApplication1.WorkBooks.Close; 
26) 退出 Excel: 
  ExcelApplication1.Quit; 
  ExcelApplication1.Disconnect; 

(三) 使用Delphi 控制Excle二维图 
  在Form中分别放入ExcelApplication, ExcelWorkbook和ExcelWorksheet 
  
var asheet1,achart, range:variant; 
1)选择当第一个工作薄第一个工作表 
  asheet1:
=ExcelApplication1.Workbooks[1].Worksheets[1]; 
2)增加一个二维图 
  achart:
=asheet1.chartobjects.add(100,100,200,200); 
3)选择二维图的形态 
  achart.chart.charttype:
=4
4)给二维图赋值 
  series:
=achart.chart.seriescollection; 
  range:
=sheet1!r2c3:r3c9; 
  series.add(range,true); 
5)加上二维图的标题 
  achart.Chart.HasTitle:
=True; 
  achart.Chart.ChartTitle.Characters.Text:
=’ Excle二维图’           
6)改变二维图的标题字体大小 
  achart.Chart.ChartTitle.Font.size:
=6
7)给二维图加下标说明 
  achart.Chart.Axes(xlCategory, xlPrimary).HasTitle :
= True; 
  achart.Chart.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text :
= '下标说明'
8)给二维图加左标说明 
  achart.Chart.Axes(xlValue, xlPrimary).HasTitle :
= True; 
  achart.Chart.Axes(xlValue, xlPrimary).AxisTitle.Characters.Text :
= '左标说明'
9)给二维图加右标说明 
  achart.Chart.Axes(xlValue, xlSecondary).HasTitle :
= True; 
  achart.Chart.Axes(xlValue, xlSecondary).AxisTitle.Characters.Text :
= '右标说明'
10)改变二维图的显示区大小 
  achart.Chart.PlotArea.Left :
= 5
  achart.Chart.PlotArea.Width :
= 223
  achart.Chart.PlotArea.Height :
= 108
11)给二维图坐标轴加上说明 
  achart.chart.seriescollection[
1].NAME:='坐标轴说明'


 提供在DELPHI中用程序实现EXCEL单元格合并的源码
Begin 
 CapStr:
=trim(exApp.Cells[Row,1].value); 
 Col1:
=2
 Col2:
=FldCount; 
 For Col1:
=2 to Col2 Do 
 
begin 
   NewCapStr:
=trim(exApp.Cells[Row,Col1].value); 
   
if (NewCapStr=CapStr) then 
   Begin 
     Cell1:
=exApp.Cells.Item[Row,Col1-1]; 
     Cell2:
=exApp.Cells.Item[Row,Col1]; 
     exApp.Cells[Row,Col1].value:
=''
     exApp.Range[Cell1,Cell2].Merge(True); 
   
end 
   
else 
   
begin 
     CapStr:
=NewCapStr; 
   
end
 
end
end; 

 数据库图片插入到excel中uses:clipbrd 
var 
MyFormat:Word; 
AData:THandle;      
//临时句柄变量。 
APalette:HPALETTE;  
//临时变量。 
Stream1:TMemoryStream;
//TBlobStream 
xx:tbitmap; 
         Stream1:
= TMemoryStream.Create; 
         TBlobField(query.FieldByName(
'存储图片的字段')).SaveToStream(Stream1); 
         Stream1.Position :
=0
         xx:
=tbitmap.Create ; 
         xx.LoadFromStream(Stream1); 
         xx.SaveToClipboardFormat(MyFormat,AData,APalette); 
         ClipBoard.SetAsHandle(MyFormat, AData); 
         myworksheet1.Range[
'g3','h7'].select;//myworksheet1是当前活动的sheet页 
         myworksheet1.Paste;   


 
 
程序中写的一个例子,导出库存到Excel中。 
可参看有关Excel操作部分 

procedure TfrmExcel.StoreToExcel; 
var 
 data: TADODataSet; 
 ExcelApp, Ra:Variant; 
 row: Integer; 
begin 
 
if not InitExcel(ExcelApp) then 
   exit; 
 data :
= TADODataSet.Create(nil); 
 data.Connection :
= ADOConn; 
 try 
   data.CommandText :
= 'select * from ProInfo'
   data.Open; 
   
with TADODataSet.Create(nildo 
   
begin 
     Connection :
= ADOConn; 
     CommandText :
= 'select ProNO, sum(ProNum) as sNum from AreaProInfo group by ProNO'
     Open; 
     row :
= 1
     ExcelApp.Rows[row].RowHeight :
= 30
     Ra :
= ExcelApp.Range[ExcelApp.Cells[row, 1], ExcelApp.Cells[row, 7]]; 
     Ra.font.size :
= 18
     Ra.font.Bold :
= true; 
     Ra.MergeCells :
= true; 
     Ra.HorizontalAlignment :
= xlcenter; 
     Ra.VerticalAlignment :
= xlcenter; 
     ExcelApp.Cells[row, 
1] := '部件库存情况表'
     inc(row); 
     Ra :
= ExcelApp.Range[ExcelApp.Cells[row, 1], ExcelApp.Cells[row, 7]]; 
     Ra.font.size :
= 10
     Ra.HorizontalAlignment :
= xlRight; 
     Ra.VerticalAlignment :
= xlcenter; 
     Ra.MergeCells :
= true; 
     ExcelApp.Cells[row, 
1] := FormatDateTime('yyyy-mm-dd', Now); 

     inc(row); 
     ExcelApp.Cells[row, 
1] := '部件编号'
     ExcelApp.Cells[row, 
2] := '部件名称'
     ExcelApp.Columns[
2].ColumnWidth := 15
     ExcelApp.Cells[row, 
3] := '单位'
     ExcelApp.Columns[
3].ColumnWidth := 4
     ExcelApp.Cells[row, 
4] := '型号规格'
     ExcelApp.Columns[
4].ColumnWidth := 20
     ExcelApp.Cells[row, 
5] := '部件单价'
     ExcelApp.Cells[row, 
6] := '库存数量'
     ExcelApp.Cells[row, 
7] := '库存金额'
     
while not Eof do 
     
begin 
       
if data.Locate('ProNO', FieldByName('ProNO').AsString, []) then 
       
begin 
         inc(row); 
         ExcelApp.Cells[row, 
1] := FieldByName('ProNO').AsString; 
         ExcelApp.Cells[row, 
2] := data.FieldByName('ProName').AsString; 
         ExcelApp.Cells[row, 
3] := data.FieldByName('ProUnit').AsString; 
         ExcelApp.Cells[row, 
4] := data.FieldByName('ProKind').AsString; 
         ExcelApp.Cells[row, 
5] := data.FieldByName('ProMoney').AsString; 
         ExcelApp.Cells[row, 
6] := FieldByName('sNum').Value; 
         ExcelApp.Cells[row, 
7] := '=E' + IntToStr(row) + '*F' + IntToStr(row); 
       
end
       Next; 
{        if RecNO = 10 then 
         Break;
} 
       ProgressBar.Position :
= RecNO * 100 div RecordCount; 
       Show; 
     
end
     ExcelApp.Cells[row 
+ 12] := '合计'
     ExcelApp.Cells[row 
+ 17] := '=SUM(G2:G' + IntToStr(Row); 
     Free; 
   
end
 finally 
   data.Free; 
   ExcelApp.ScreenUpdating :
= true; 
 
end
end

function TfrmExcel.InitExcel(var excel: Variant): Boolean; 
begin 
 try 
   excel :
= CreateOleObject('Excel.Application'); 
 except 
   result :
= false; 
   showMsg(
'调用Excel出错!'); 
   exit; 
 
end

 excel.WorkBooks.Add; 
 excel.WorkSheets[
1].Activate; 
 excel.Visible :
= true; 
 excel.ScreenUpdating :
= false; 
 excel.Rows.RowHeight :
= 18
 excel.ActiveSheet.PageSetup.PrintGridLines :
= false; 
 result :
= true; 
end
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值