📄 ufrmview.pas
字号:
else if sDPName='TCurrencyField' then
begin
Result := '¥#,##0.00;¥-#,##0.00';//money';
end
else if sDPName='TDateTimeField' then
begin
Result := 'G/通用格式';//'datetime';
end
else if sDPName='TBooleanField' then
begin
Result := 'G/通用格式';//'bit';
end
else if sDPName='TBlobField' then
begin
Result := 'G/通用格式';//'image';
end
else if sDPName='TAutoIncField' then
begin
Result := 'G/通用格式';//'int (自增)';
end
else if sDPName='TSmallintField' then
begin
Result := 'G/通用格式';//'smallint';
end
else if sDPName='TMemoField' then
begin
Result := 'G/通用格式';//'text';
end
else
begin
Result := 'G/通用格式';//'--';
end;
end;
procedure TfrmView.BitBtn3Click(Sender: TObject);
var
i,j,k,row:integer;
ss,sa,sType:string;
//imax:integer;
sTableSel,sto:string;
begin
if Database1.Connected = false then
begin
exit;
end;
//----------------------------------------------
j := 0;
for i := 0 to CheckListBox1.Items.Count - 1 do
begin
if CheckListBox1.Checked[i] = true then
begin
j := j+1;
end;
end;
if j = 0 then
begin
//MessageDlg('请勾选需要导出的字段!',mtError, [mbOk], 0);
Application.MessageBox( PChar( ' 请勾选需要导出的字段!'),'提示',MB_OK+MB_ICONINFORMATION);
CheckListBox1.SetFocus;
Exit;
end;
//----------------------------------------------
sTableSel := ListBox1.Items.Strings[ListBox1.ItemIndex];
Try
ExcelApplication1.Connect;
//建立与Excel的连接,如果出错则显示提示信息
Except
MessageDlg('Excel2000是否已正确安装',mtError, [mbOk], 0);
Exit;
//如果出错,不报告错误信息,结束当前程序的执行
End;
//----------------------------------------------
if cxShellBrowserDialog1.Execute then
begin
sto := cxShellBrowserDialog1.Path ;
if trim(sto)='' then
begin
ShowMessage('目的路径不存在!');
exit;
end;
ss := copy(sto,length(sto),1);
if ss = '\' then
begin
sto := copy(sto,1,length(sto)-1);
end;
sTableSel := sto +'\'+ sTableSel + '.xls';
if FileExists( sTableSel) = true then
begin
if Application.Messagebox('目的路径已有该文件,是否覆盖? ','提示', mb_okcancel+mb_defbutton2+mb_iconquestion) <> id_ok then
exit;
if DeleteFile( sTableSel ) = false then
begin
showmessage('删除同名文件失败,无法保存!');
exit;
end;
end;
end
else
begin
exit;
end;
//----------------------------------------------
ExcelApplication1.Visible[0]:=True;
//设置成可视状态
ExcelApplication1.Caption:='Delphi连接Excel应用';
//设置Excel的标题
//ExcelApplication1.Workbooks.Add(Null,0);
ExcelApplication1.Workbooks.Add(emptyParam,0);
//增加一个新的空工作簿
ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks[1]);
//连接工作簿
ExcelWorksheet1.ConnectTo(ExcelWorkbook1.Worksheets[1] as _Worksheet);
//连接工作表
//插入数据按钮的事件处理过程,在Excel工作表中生成需要表格
//并将数据库的内容写入Excel的工作表中
//如下设置单元格第一行的内容,即各列的标题,本表有6列组成
k := 1;
for i := 0 to CheckListBox1.Items.Count - 1 do
begin
//ExcelWorksheet1.Cells.Item[1,i+1] := CheckListBox1.Items.Strings[i];
if CheckListBox1.Checked[i] then
begin
ss := CheckListBox1.Items.Strings[i];
j := Pos('|',ss);
sa := Copy(ss,1,j-2);
ExcelWorksheet1.Cells.Item[1,k] := Trim( sa );
Inc(k);
end;
end;//}
{
for i := 0 to Query1.FieldCount-1 do
begin
ExcelWorksheet1.Cells.Item[1,i+1] := Query1.FieldDefs.Items[i].Name;
end;//}
//-----------------------------------------
row := 2;
with Query1 do
begin
First;
While Not(Eof) do
Begin
k := 1;
//此循环将满足条件的数据库记录写入Excel的工作表中
for i := 0 to CheckListBox1.Items.Count - 1 do
begin
if CheckListBox1.Checked[i] = true then
begin
ss := CheckListBox1.Items.Strings[i];
j := Pos('|',ss);
sa := Trim( Copy(ss,1,j-2) );
sType := FieldList.FieldByName( sa ).ClassName;
sType := getExcelType(sType);
ExcelWorksheet1.Cells.Item[row,k].NumberFormatLocal := sType;
ExcelWorksheet1.Cells.Item[row,k] := FieldByName(sa).AsString;
Inc(k);
end;
end;
//----------------------------------------}
{
for i := 0 to FieldCount-1 do
begin
sa := FieldDefs.Items[i].Name;
sType := FieldList.FieldByName( sa ).ClassName;
sType := getExcelType(sType);
ExcelWorksheet1.Cells.Item[row,i+1].NumberFormatLocal := sType;
ExcelWorksheet1.Cells.Item[row,i+1] := FieldByName(sa).AsString;
end;
//}
Next;
//获取下一个数据库记录
row:=row+1;
End;
end;
//ExcelWorksheet1.SaveAs( GetFilePathName(sTableSel) );
ExcelWorksheet1.SaveAs( sTableSel );
////ExcelWorkbook1.Disconnect;
ExcelWorksheet1.Disconnect;
ExcelApplication1.Quit;
//关闭Excel,并显示是否保存的提示信息
ExcelApplication1.Disconnect;
//解除与Excel自动化服务器的连接
ShowMessage('生成Excel成功');
end;
function TfrmView.GetFilePathName(sTableName:string):string;
var
//i : integer;
//ss: string;
spath : string;
begin
spath := ExtractFilePath(application.ExeName);
{
ss := spath;
i := pos('\',ss);
while i<>0 do
begin
ss := copy(ss,i+1,length(ss));
i := pos('\',ss);
if i = length(ss) then
begin
break;
end;
end;
//获取所在文件夹名
ss := copy(ss,1,length(ss)-1);//sfile := FormatDateTime('yyyy-mm-dd hh-mm-ss',Now());
GetFilePathName := spath + ss + '_儿童信息表' + FormatDateTime('_hhmmss',Now());
//}
GetFilePathName := spath + sTableName + FormatDateTime('_hhmmss',Now());
end;
{
一) 使用动态创建的方法
首先创建 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.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.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;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -