如题。
解决方案 »
- 当我想选择dbgrideh的矩形区域时,为什么是cell的焦点跟着移动,就像在滑动滚动条
- 如何把FileStream的数据放入一个字符串中
- 下面的代码错在那啊?
- 如何设置才能使窗口的大小无法改变.
- 为什么delphi的property自动生成的read和write函数,只有set方法而没有get方法?
- 问:这段sql应该如何写?
- 学习Inside VCL这本书是不是要有Windows程序设计基础呀.
- 怎样动态改变托盘的szTip(提示)有原代码再加100分决不食言!
- 各位网络编程高手来帮忙,100分,关于飞信、抓包得到登陆地址
- 如何得知哪个月有多少天?
- 求一控件
- 初次用installshield发布bde,sqlserver2000程序,遇到问题,请帮助。
在USE中加ComObjfunction TFrm_student.S_IsFileInUse(FileName : string ) : boolean;
var
HFileRes : HFILE;
begin
Result := false;
if not FileExists(FileName) then
exit;
HFileRes := CreateFile(pchar(FileName), GENERIC_READ or GENERIC_WRITE,0, nil, OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL, 0);
Result := (HFileRes = INVALID_HANDLE_VALUE);
if not Result then
CloseHandle(HFileRes);
end;procedure TFrm_student.suiButton11Click(Sender: TObject);
Var
ExcelApp:Variant;
SaveDialog1: TSaveDialog;
i,j,row,column:integer;
begin
//dm.Apps.Get_Seek_Result(querystr,1);
with dm.ClientDataSet1 do begin
querycount:=RecordCount;
close;open;
if dm.ClientDataSet1.IsEmpty then
begin
ShowMessage('没有数据需要存盘!');//test
Exit;
end;
SaveDialog1:= TSaveDialog.Create(nil);
SaveDialog1.Filter := 'Excel 文件 (*.xls)|*.xls';
SaveDialog1.Title:='确定另存为excel的文件名';
if savedialog1.Execute Then
begin
while S_IsFileInUse(savedialog1.FileName) do
begin
case Application.MessageBox(PChar('无法存盘,'+string(ExtractFileName(savedialog1.FileName))+'正在使用中'), '请确认', MB_ICONQuestion+MB_ABORTRETRYIGNORE+MB_DEFBUTTON2) of
IDAbort:
begin
SaveDialog1.Free;
Exit;
end;
IDRetry:
begin
continue;
end;
IDIgnore:
begin
if Not savedialog1.Execute then break;
end;
end;
end;
end
else
begin
SaveDialog1.Free;
exit;
end;//if
try
ExcelApp:=CreateOleObject('Excel.Application');//首先创建 Excel 对象,使用ComObj
except
Application.Messagebox('Excel没有安装!','Hello',MB_ICONERROR + mb_Ok);
Abort;
end;//end try
try
ExcelApp.Visible := False;//显示当前窗口
ExcelApp.Caption := '应用程序调用 Microsoft Excel';//更改 Excel 标题栏
ExcelApp.WorkBooks.Add;//添加新工作簿:
ExcelApp.WorkSheets[ 'Sheet1' ].Activate;//设置第1个工作表为活动工作表
ExcelApp.ActiveSheet.Rows[1].Font.Size:=10;
ExcelApp.ActiveSheet.Rows[1].Font.Bold := True;
row:=1;
column:=1;
for j:= 0 to dm.ClientDataSet1.FieldCount-1 do
begin
ExcelApp.Cells[row,column].Value:=dm.ClientDataSet1.Fields[j].DisplayLabel;
column:=column+1;
end;
row:=2;
while (Not dm.ClientDataSet1.Eof) and (Not dm.ClientDataSet1.IsEmpty) do
begin
column:=1;
for i:=1 to dm.ClientDataSet1.FieldCount do
begin
ExcelApp.Cells[row,column].Value:=dm.ClientDataSet1.fields[i-1].AsString;
column:=column+1;
end;
dm.ClientDataSet1.Next;
row:=row+1;
end;
if Not S_IsFileInUse(savedialog1.FileName) then
try
ExcelApp.ActiveWorkBook.SaveAs(savedialog1.filename);
except
SaveDialog1.Free;
ExcelApp.WorkBooks.Close;
ExcelApp.Quit;
ExcelApp:= Unassigned;
exit;
end;
SaveDialog1.Free;
ExcelApp.WorkBooks.Close;
ExcelApp.Quit;
ExcelApp:= Unassigned;
Application.MessageBox('Excel文件导出成功!','成功',MB_OK);
except
SaveDialog1.Free;
ExcelApp:= Unassigned;
end;
end;
end;
快速,通吃,不用写代码。
procedure myclass.ExportToExcel(DataSet: TDataSet;filename:string;SheetName:string;VisibleExcel:bool;pbr:tProgressbar);
var
myexcel:Variant;
mysheet:Variant;
range:variant;
i,j:integer;
//****************************
begin
try
myexcel:=createoleobject('excel.application');
myexcel.Visible :=VisibleExcel;
myexcel.Workbooks.Add;//新建EXCEL文件
// myexcel.Workbooks[1].WorkSheets[1].Name:= '报表测试';
// myexcel.Workbooks[1].WorkSheets[2].delete;
// myexcel.Workbooks[1].WorkSheets[3].delete;
// mySheet:= v.Workbooks[1].WorkSheets['报表测试'];//等效下面的语句
mysheet:= myexcel.Workbooks[1].WorkSheets[1];
//添加单元格内容
with dataset do
begin pbr.Min :=0;
pbr.Max:=recordcount;
//列出字段名称。
for j:=0 to FieldCount-1 do mysheet.cells[1,j+1]:=Fields[j].FieldName ; for i:=0 to recordcount-1 do
begin
pbr.Position:=i; //显示进度。
for j:=0 to fieldcount-1 do
begin
mysheet.cells[2+i,1+j]:=dataset.Fields[j].AsString;
// mysheet.cells[2+i,1+j]:=vartostr(fields[j].Value );
application.ProcessMessages ;
end;
next;
end;
end;
{ //*********************************设置报表外观 开始*******************************************
//设置列标题
Range := mysheet.Range['A1:O1'];//单元格从A2到M2
Range.Rows.RowHeight :=25; //设置行高
Range.Columns.ColumnWidth := 25; // 设置列宽
Range.Borders.LineStyle := 1; //加边框
//Range.FormulaR1C1 := '合并区';
Range.HorizontalAlignment := 3;//xlCenter(水平对齐方式)
Range.VerticalAlignment := 2;//xlCenter(垂直对齐方式)
Range.Characters.Font.Name := '楷体';//字体
Range.Characters.Font.FontStyle:= '加粗';
Range.Characters.Font.Size := 15;
Range.Characters.Font.OutlineFont := False;//是否有下划线
Range.Characters.Font.ColorIndex := 1;//xlAutomatic//颜色
//设置字段
Range := mysheet.Range['A2:O'+inttostr(i)];//单元格从A2到M2
Range.Rows.RowHeight :=15; //设置行高
Range.Columns.ColumnWidth := 25; // 设置列宽
Range.Borders.LineStyle := 0; //加边框
Range.Characters.Font.Name := '宋体';//字体
Range.Characters.Font.Size := 12;
Range.Characters.Font.ColorIndex :=0;//xlAutomatic//颜色 //**********************************设置报表外观 结束**************************************** }// myexcel.visible:=true;
myexcel.WorkBooks[1].Close(True, filename);//取文件名退出
myexcel.Quit;//退出EXCEL Except
//错误处理
Showmessage('导出时出现错误!!!');
myexcel.DisplayAlerts := false;//是否提示存盘
myexcel.Quit;//退出EXCEL
exit;
end;
// Application.Restore;
// Application.BringToFront ;end;