如何用delphi将结果集中的内容导出成excel格式?能给我一段代码吗?
解决方案 »
- 多webbrowser提交验证码的问题
- 请问区别
- 100 分 cxDbTreeList 的toMove 事件如何屏蔽?
- Borland.com上注册会员要钱吗?
- DBGrid 或 EhDBGrid 怎么设置隔行的颜色不一样。
- 如何实现类似QQ的广域网消息传送功能,请大家看下
- 两个小问题
- word对汉字按照笔划排序的问题?
- 请问高手:读取数据表中的数字型字段,动态的来设置timer控件的interval属性,并用table1.moveby()自动显示"该"数据表中的数据条目,该怎么作?
- 何何识别一个数据的类型(数字?日期?文本?)
- 如何在用idftpserver做的服务器中限制传输速度?
- unit1
const
xlWBATWorksheet = -4167;
var
XLApp, Sheet, Data: OLEVariant;
i, j: Integer;
begin
// Prepare Data
Data := VarArrayCreate([1, AGrid.RowCount, 1, AGrid.ColCount], varVariant);
for i := 0 to AGrid.ColCount - 1 do
for j := 0 to AGrid.RowCount - 1 do
Data[j + 1, i + 1] := AGrid.Cells[i, j]; // Create Excel-OLE Object
Result := False;
XLApp := CreateOleObject('Excel.Application');
try
XLApp.Visible := true; // Add new Workbook
XLApp.Workbooks.Add(xlWBatWorkSheet);
Sheet := XLApp.Workbooks[1].WorkSheets[1];
Sheet.Name := ASheetName;
// Fill up the sheet
Sheet.Range[RefToCell(1, 1), RefToCell(AGrid.RowCount,AGrid.ColCount)].Value := Data; // Save Excel Worksheet
try
XLApp.Workbooks[1].SaveAs(AFileName);
Result := True;
except
// Error
end;
finally
// Quit Excel
if not VarIsEmpty(XLApp) then
begin
XLApp.DisplayAlerts := False;
XLApp.Quit;
XLAPP := Unassigned;
Sheet := Unassigned;
end;
end;
end;procedure TForm1.Button2Click(Sender: TObject);
begin
if SaveAsExcelFile(stringGrid1, 'My Stringgrid Data', ExtractFilePath (Application.ExeName)+'MyExcelFile.xls') then
ShowMessage('StringGrid saved!');
end;
var
MyExc,MyWorkBook : Variant;
iCount,jCount : Integer;
begin
SaveDialog1.FileName:=ExtractFilePath(ParamStr(0))+'book1.xls';
if SaveDialog1.Execute then
begin
Screen.Cursor := crHourGlass;
if Not VarIsEmpty(MyExc) then
begin
MyExc.DisplayAlters := False;
MyExc.Quit;
VarClear(MyExc);
end;
try
MyExc := CreateOleObject('Excel.Application');
MyWorkBook := CreateOleObject('Excel.Sheet');
except
Screen.Cursor := crDefault;
Application.MessageBox('您没有安排Excel或应用程序正在被使用,Excel创建失败!','哈哈',MB_OK + MB_ICONINFORMATION);
Exit;
end;
MyExc.WorkBooks.Add;
MyExc.WorkSheets[1].Activate;
MyExc.WorkBooks[1].WorkSheets[1].Name := DBGrid1.Name;
MyWorkBook := MyExc.WorkBooks[1].WorkSheets[(DBGrid1).Name];
if not DBGrid1.DataSource.DataSet.Active then
begin
MyExc.WorkBooks.Close;
MyExc.Quit;
VarClear(MyExc);
Screen.Cursor := crDefault;
Exit;
end;
try
for iCount := 0 to DBGrid1.Columns.Count - 1 do
MyWorkBook.Cells[1,iCount + 1] := DBGrid1.Columns.Items[iCount].Title.Caption;
jCount := 1;
DBGrid1.DataSource.DataSet.First;
while not DBGrid1.DataSource.DataSet.Eof do
begin
for iCount := 0 to DBGrid1.Columns.Count - 1 do
MyWorkBook.Cells[jCount + 1,iCount + 1] := DBGrid1.Columns.Items[iCount].Field.AsString;
Inc(jCount);
DBGrid1.DataSource.DataSet.Next;
end;
MyWorkBook.SaveAs(SaveDialog1.FileName);
Application.MessageBox('成功生成Excel!','呵呵',MB_OK+ MB_ICONINFORMATION);
finally
MyExc.WorkBooks.Close;
MyExc.Quit;
VarClear(MyExc);
Screen.Cursor := crDefault;
end;
end;
end;
begin
Result := Chr(Ord('A') + ACol - 1) + IntToStr(ARow);
end;