在三层结构中,怎样把ado客户端数据集中的数据导出至excel。
解决方案 »
- TWWDBGRID的超难问题!显示的一列怎么根据列的值设置不同的Alignment属性?
- 请问Borland Delphi有哪些版本是免费使用的?
- 关于StringList 的 names 和 values 是如何使用的?
- clientdataset过滤问题:怎样过滤bool值的字段???
- ClientDataSet:cannot perform this opreation on an open dataset
- 请frend进来拿分!
- 什么是内存泄漏?
- 请问哪里有delphi6企业版下载?
- 如何直接连接ACCESS数据库,不通过ODBC连接.
- 在哪里、如何设置DELPHI原代码的对齐方式。
- 请教如何让窗体自动全屏(标题栏也没有)
- 请问那里有ADO的补丁下载
begin
try
Result := CoExcelApplication.Create;
except
MessageDlg('系统缺少Excel或者被损坏,请您安装或者修复Mirosoft Office后再使用该功能!',
mtWarning, [mbOK]);
end;
end;
function NewWorkBook(ExcelApp: _Application): _WorkBook;
begin
Result := ExcelApp.Workbooks.Add(XLWBatWorksheet, 0);
end;function NewWorkSheet(ExcelApp: _Application): IDispatch; overload;
begin
Result := ExcelApp.Worksheets.Add(null, ExcelApp.ActiveSheet, 1, XLWBatWorksheet, 0);
end;function NewWorkSheet(Book: _WorkBook): IDispatch; overload;
begin
Result := Book.Worksheets.Add(null, Book.ActiveSheet, 1, XLWBatWorksheet, 0);
end;procedure SetCells(Sheet: Variant; x, y: Integer; const Value: String);
begin
Sheet.Cells[y, x] := Value;
end;//数据集导出到excel
procedure DataSetToExcel(DataSet: TDataSet);
var ExcelApp: _Application; Book: _WorkBook; Sheet: IDispatch;
i, j: Integer; OldMark: TBook;
begin
if not DataSet.Active then DataSet.Active := true;
if DataSet.RecordCount>65536 then
if MessageDlg('需要导出的数据过大,Excel最大只能容纳65536行,是否还要继续?',
mtWarning, mbOKCancel)=mrCancel then exit;
ExcelApp := CreateExcel;
if not VarIsEmpty(ExcelApp) then
try
Book := NewWorkBook(ExcelApp);
Sheet := Book.ActiveSheet;
for i:=0 to DataSet.FieldCount-1 do
SetCells(Sheet, i+1, 1, DataSet.Fields[i].DisplayName); DataSet.DisableControls;
OldMark := DataSet.GetBook;
Dataset.First; i := 1;
while not Dataset.Eof do begin
inc(i);
for j:=0 to DataSet.FieldCount-1 do
SetCells(Sheet, j+1, i, Dataset.Fields[j].AsString);
if i=65536 then
break;
//ProgressBar1.StepBy(1);
Dataset.next;
end;
Dataset.GotoBook(OldMark);
finally
Dataset.EnableControls;
ExcelApp.Visible[0] := True;
ExcelApp := nil;
end;
end;
另外是用Server下面的某个组件,我忘了,以前作过,代码没有在身边
能说说是怎样一个步骤,万分感谢。
,导出的格式太混乱,不适合编辑。通过数据集一条一条的写到EXCEL是可以实现,但是把EXCEL导入到库表中,思路是什么?总不能一条一条的写SQL插入。想知道SQL SERVER 控制台的导入导出的实质是什么?
程序一。
<table width=100%>
<tr>
<td width=100%><OBJECT classid=clsid:0002E510-0000-0000-C000-000000000046
id=Spreadsheet1 style="width=100%"></OBJECT></td>
</tr>
<tr><td> </td></tr>
<tr>
<td align=center>
<input type="button" name="Submit2" onclick='Savedata()' value=" 保存数据 " class=button1>
<input type="button" name="closewin" onclick="window.close();" value=" 关闭窗口 " class=button1>
</td>
</tr>
</table>
<script language=vbscript>
Dim strData
Dim cSub Window_onLoad(url)
set c = Spreadsheet1.Constants
Spreadsheet1.Cells.Clear
Spreadsheet1.TitleBar.Caption = "<%= session("companyname") %>"+"<%= request("dateyear") %>"+"年"+"<%= request("datemonth") %>"+"月份业务账单"
Spreadsheet1.DataType = "HTMLURL"
Spreadsheet1.HTMLURL = url
Spreadsheet1.Refresh
Spreadsheet1.ActiveSheet.UsedRange.AutoFitColumns
Spreadsheet1.Range("A1").Select
end subFunction SaveData()
On Error Resume Next
SpreadSheet1.ActiveSheet.Export "<%= session("companyname") %>"+"<%= request("dateyear") %>"+"年"+"<%= request("datemonth") %>"+"月份业务账单.xls", c.ssExportActionNone
If Err<>0 Then
MsgBox "Unable to Export to Excel."
End If
On Error GoTo 0
End Function</script>
var
XlAPP:Variant;
excelcount:integer;
Sheet1:Variant;
i,j:integer;
begin
if not Db_data.DataSource.DataSet.Active then exit;
if Db_data.DataSource.DataSet.RecordCount<1 then exit;
//创建excel对象
try
XlApp:=createoleobject('Excel.Application');
XLApp.Visible:=false;
excelcount:=XLApp.Workbooks.count;
XLApp.Workbooks.Add(xlWBatWorkSheet);
Sheet1 := XLApp.Workbooks[1].WorkSheets['sheet1'];
except
showmessage('你的电脑没出息有安装excel程序,无法完成此功能!');
exit;
end;
//setfocus;处理标题
for j:=0 to Db_data.FieldCount-1 do
begin
sheet1.cells[1,j+1]:=Db_data.Columns[j].Title.Caption;
end;
//处理记录
Db_data.DataSource.DataSet.First;
i:=2;
while not Db_data.DataSource.DataSet.Eof do
begin
//处理一行
for j:=0 to Db_data.FieldCount-1 do
begin
if Db_data.Fields[j]<>nil then
Sheet1.cells[i,j+1]:=trim(Db_data.Fields[j].asstring)
else
Sheet1.cells[i,j+1]:='';
end;
i:=i+1;
Db_data.DataSource.DataSet.Next;
end;
XLApp.Visible:=true;
end;