这是我的代码:
procedure TForm_gcdd_ybb_cx.BitBtn_scClick(Sender: TObject);
var
SqlString:wideString;
x1,y1:Integer;
x2,y2:real;
i:integer;
row,col:integer;
row_,col_:integer;
Field_index:Integer;
record_count,Page_count,new_page_count:Integer;
ExcelApp, WorkBook, Sheet,before,after: OleVariant;
begin
//DataSetToExcel(DM.ADOQuery_gcdd_ybb_cx,11,true,'d:\temp.xls');//初始化EXCEL
record_count:= DM.ADOQuery_gcdd_ybb_cx.RecordCount;
x1:=3;
y1:=1;
x2:=3;
y2:=1;
Page_count:= (record_count - 2 ) div 24 +1; try
ExcelApp := CreateOleObject('Excel.Application');
ExcelApp.Visible := Visible ;
WorkBook := ExcelApp.Workbooks.Open('d:\工程进度月报表——8页.xls');
Sheet:= WorkBook.Sheets[1];
except
MessageBox(GetActiveWindow,'无法调用Mircorsoft Excel! '+chr(13)+chr(10)+
'请检查是否安装了Mircorsoft Excel。','提示',MB_OK+MB_ICONINFORMATION);
Exit;
end; //ExcelApp.ActiveSheet.Copy(sheet);
//before:= ExcelApp.Workbooks.Activesheet;
before:=sheet;
after:=sheet;
//sheet.name:=1;
//确定需要添加几个SHEET页=================================
if Page_count>1 then
begin
new_page_count:=Page_count-1;
//ExcelApp.ActiveSheet.Range['A1:AM30'].Copy;
for i:=2 to new_page_count+1 do
begin
//WorkBook.WorkSheets.Add;
//sheet.copy(before);
sheet.copy(after);
//before.name:=i;
//sheet.name:=i;
//ExcelApp.ActiveSheet.Range['A1'].PasteSpecial;
end;
end
else
new_page_count:=0;
sheet.name:=1;
//========================================================//将表头拷贝到各个报表中!!!============================
{if new_page_count<>0 then
begin
for i:=9 to page_count do
begin
ExcelApp.Worksheets[i].Activate;
ExcelApp.ActiveSheet.Range['A1'].PasteSpecial;
end;
end;}
//========================================================//填写表页眉==============================================
//========================================================//填写具体统计信息========================================
with DM do
begin
//sheet:=before;
sheet:=WorkBook.Sheets[1];
Sheet.Cells(9,2 ):= '合计';
//Sheet.Cells(10,2 ):= '合计';//ADOQuery_gcdd_ybb_cx_hj_by.Fields[I].AsString;
//
Sheet.Cells(9,4 ):= ADOQuery_gcdd_ybb_cx_hj_by.Fields[0].AsString;
Sheet.Cells(10,4):= ADOQuery_gcdd_ybb_cx_hj_lj.Fields[0].AsString; Sheet.Cells(9,5 ):= ADOQuery_gcdd_ybb_cx_hj_by.Fields[1].AsString;
Sheet.Cells(10,5 ):= ADOQuery_gcdd_ybb_cx_hj_lj.Fields[1].AsString; for I:=7 to 32 do
begin
Sheet.Cells(9,I):= ADOQuery_gcdd_ybb_cx_hj_by.Fields[I].AsString;
Sheet.Cells(10,I):= ADOQuery_gcdd_ybb_cx_hj_lj.Fields[I].AsString;
end; end;//========================================================//填写各月信息============================================
with DM do
begin
ADOQuery_gcdd_ybb_cx.First;
col:=8;
row:=2; while NOT ADOQuery_gcdd_ybb_cx.Eof do
begin
if (X2/24) <=Y2 then //X2,Y2是实数,
begin
if (X1 mod 24)<>0 then
begin
row_:=X1 mod 24;//得到具体页中的行数
col_:=2;
end
else
begin
if (X1 div 24) >0 then
begin
row_:=24;
col_:=2;
end;
end;
//ExcelApp.Worksheets[Y1].Activate; for Field_index:=0 to ADOQuery_gcdd_ybb_cx.FieldCount -2 do //-2 是为了不显示填报单位字段!
begin
//if Field_index<>1 then
// begin
Sheet.Cells(row_+8,col_ ):= ADOQuery_gcdd_ybb_cx.Fields[Field_index].AsString;
// end;
Inc(col_);
end;
ADOQuery_gcdd_ybb_cx.Next;
X1:=X1+1;
X2:=X2+1;
end
else
begin
Y1:=Y1+1;
Y2:=Y2+1;
ExcelApp.Worksheets[Y1].Activate;
Sheet:= WorkBook.Sheets[Y1];
end; end; end;//========================================================
不用任何控件,你可以试试
procedure TForm_gcdd_ybb_cx.BitBtn_scClick(Sender: TObject);
var
SqlString:wideString;
x1,y1:Integer;
x2,y2:real;
i:integer;
row,col:integer;
row_,col_:integer;
Field_index:Integer;
record_count,Page_count,new_page_count:Integer;
ExcelApp, WorkBook, Sheet,before,after: OleVariant;
begin
//DataSetToExcel(DM.ADOQuery_gcdd_ybb_cx,11,true,'d:\temp.xls');//初始化EXCEL
record_count:= DM.ADOQuery_gcdd_ybb_cx.RecordCount;
x1:=3;
y1:=1;
x2:=3;
y2:=1;
Page_count:= (record_count - 2 ) div 24 +1; try
ExcelApp := CreateOleObject('Excel.Application');
ExcelApp.Visible := Visible ;
WorkBook := ExcelApp.Workbooks.Open('d:\工程进度月报表——8页.xls');
Sheet:= WorkBook.Sheets[1];
except
MessageBox(GetActiveWindow,'无法调用Mircorsoft Excel! '+chr(13)+chr(10)+
'请检查是否安装了Mircorsoft Excel。','提示',MB_OK+MB_ICONINFORMATION);
Exit;
end; //ExcelApp.ActiveSheet.Copy(sheet);
//before:= ExcelApp.Workbooks.Activesheet;
before:=sheet;
after:=sheet;
//sheet.name:=1;
//确定需要添加几个SHEET页=================================
if Page_count>1 then
begin
new_page_count:=Page_count-1;
//ExcelApp.ActiveSheet.Range['A1:AM30'].Copy;
for i:=2 to new_page_count+1 do
begin
//WorkBook.WorkSheets.Add;
//sheet.copy(before);
sheet.copy(after);
//before.name:=i;
//sheet.name:=i;
//ExcelApp.ActiveSheet.Range['A1'].PasteSpecial;
end;
end
else
new_page_count:=0;
sheet.name:=1;
//========================================================//将表头拷贝到各个报表中!!!============================
{if new_page_count<>0 then
begin
for i:=9 to page_count do
begin
ExcelApp.Worksheets[i].Activate;
ExcelApp.ActiveSheet.Range['A1'].PasteSpecial;
end;
end;}
//========================================================//填写表页眉==============================================
//========================================================//填写具体统计信息========================================
with DM do
begin
//sheet:=before;
sheet:=WorkBook.Sheets[1];
Sheet.Cells(9,2 ):= '合计';
//Sheet.Cells(10,2 ):= '合计';//ADOQuery_gcdd_ybb_cx_hj_by.Fields[I].AsString;
//
Sheet.Cells(9,4 ):= ADOQuery_gcdd_ybb_cx_hj_by.Fields[0].AsString;
Sheet.Cells(10,4):= ADOQuery_gcdd_ybb_cx_hj_lj.Fields[0].AsString; Sheet.Cells(9,5 ):= ADOQuery_gcdd_ybb_cx_hj_by.Fields[1].AsString;
Sheet.Cells(10,5 ):= ADOQuery_gcdd_ybb_cx_hj_lj.Fields[1].AsString; for I:=7 to 32 do
begin
Sheet.Cells(9,I):= ADOQuery_gcdd_ybb_cx_hj_by.Fields[I].AsString;
Sheet.Cells(10,I):= ADOQuery_gcdd_ybb_cx_hj_lj.Fields[I].AsString;
end; end;//========================================================//填写各月信息============================================
with DM do
begin
ADOQuery_gcdd_ybb_cx.First;
col:=8;
row:=2; while NOT ADOQuery_gcdd_ybb_cx.Eof do
begin
if (X2/24) <=Y2 then //X2,Y2是实数,
begin
if (X1 mod 24)<>0 then
begin
row_:=X1 mod 24;//得到具体页中的行数
col_:=2;
end
else
begin
if (X1 div 24) >0 then
begin
row_:=24;
col_:=2;
end;
end;
//ExcelApp.Worksheets[Y1].Activate; for Field_index:=0 to ADOQuery_gcdd_ybb_cx.FieldCount -2 do //-2 是为了不显示填报单位字段!
begin
//if Field_index<>1 then
// begin
Sheet.Cells(row_+8,col_ ):= ADOQuery_gcdd_ybb_cx.Fields[Field_index].AsString;
// end;
Inc(col_);
end;
ADOQuery_gcdd_ybb_cx.Next;
X1:=X1+1;
X2:=X2+1;
end
else
begin
Y1:=Y1+1;
Y2:=Y2+1;
ExcelApp.Worksheets[Y1].Activate;
Sheet:= WorkBook.Sheets[Y1];
end; end; end;//========================================================
不用任何控件,你可以试试
解决方案 »
- 如何集合成一行字符串?
- 求教:关于format函数
- idhttp怎么完全断开连接??为什么要关掉应用程序才释放session?
- 如图所示,如何使dbgrideh边框显示的有立体感,是哪种属性
- delphi隐藏运行QQ程序
- ODAC的两个问题:连接ORACLE数据库超时,该怎么解决?
- 如何将动态生成的几个Label标记为一个句子?如何将动态生成的句子与外部Mp3文件建立对应关系?
- 找人合作外挂开发,推供已经分析,并且做好的dll,你只需做界面和逻辑,长期合作,有意者加qq:2261949
- 函数的返回值要求是一个类,该怎么得到返回值?谢谢~!
- 我在WIN98下为什么不能调DCOM的东西,不是说也可以么,??
- 来自大富翁的三层结构的一个帖子,推荐看一看
- 在bcb中使用delphi的代码
作者:吴晓勇,孙唏瑜 时间:2001年11月20日
(一) 使用动态创建的方法
首先创建 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(xlC
吗?