'--------' '内部方法' '''''''''' Private Function GetExcelSqlField(ObjRs) Dim FSql FSql="" For i=0 To ObjRs.Fields.Count-1 FSql=FSql&ObjRs.Fields(i).Name FSql=FSql&" char("&Len(CStr(ObjRs.Fields(i).Value))&")," Next FSql=Mid(FSql,1,Len(FSql)-1) GetExcelSqlField=FSql End Function
'--------' '内部过程 '''''''''
'创建FSO对象 Private Sub CreateFileSystemObject() Set ObjFso=Server.CreateObject("Scripting.FileSystemObject") Set ObjExcel=ObjFso.CreateTextFile(mFileName) End Sub
'创建Excel对象 Private Sub CreateExcelApplication() Set ObjExcel=Server.CreateObject("Excel.Application") ObjExcel.DisplayAlerts = False'不显示警告窗口 ObjExcel.Application.Visible=False'不可见 ObjExcel.Workbooks.Add Set ObjSheet=ObjExcel.Worksheets(1) End Sub
'创建ADODB.Stream对象 Private Sub CreateADODBStream() Set AdoStream=Server.CreateObject("ADODB.Stream") AdoStream.Type=2 AdoStream.Open End Sub
'ADODB.Stream对象保存文件方法 Private Sub SaveADODBStream() AdoStream.SaveToFile mFileName,2 End Sub
'创建ADODB对象 Private Sub CreateADODBObject() Set ExlCon=Server.CreateObject("ADODB.Connection") Set ExlRs=Server.CreateObject("ADODB.RecordSet") ExlCon.Open Replace(mConStr,"{FileName}",mFileName) End Sub
'创建Excel工作表(ADODB) Private Sub CreateADODBTable(ObjRs) Dim ExlSql ExlSql="Create table ["&mFileName&"]" ExlSql=ExlSql&"."&mSheetName ExlSql=ExlSql&" ("&GetExcelSqlField(ObjRs)&")" ExlCon.Execute ExlSql End Sub
'填充数据到Excel工作表(ADODB) Private Sub FillADODBExcel(ObjRs) ExlRs.Open "select * from ["&mSheetName&"$]" ,ExlCon,adOpenDynamic,adLockOptimistic Do Until ObjRs.EOF ExlRs.AddNew For i=0 To ObjRs.Fields.Count-1 ExlRs.Fields(i).Value=ObjRs.Fields(i).Value Next ExlRs.Update ObjRs.MoveNext Loop End Sub
'填充Excel工作表头部信息 Private Sub FillExcelHead(ObjRs) For i=0 To ObjRs.Fields.Count-1 ObjSheet.Cells(1,i+1).Value=ObjRs.Fields(i).Name Next End Sub
'填充数据到Excel工作表 Private Sub FillExcelSheet(ObjRs) r=2 Do Until ObjRs.EOF For c=0 To ObjRs.Fields.Count-1 ObjSheet.Cells(r,c+1).Value=ObjRs.Fields(c).Value Next r=r+1 ObjRs.MoveNext Loop End Sub
'保存Excel文件 Private Sub SaveExcelFile() ObjSheet.SaveAs mFileName End Sub
'生成Excel的HTML表格头部代码 Private Sub MarkHtmlTBHead(ObjRs) ExlHtml="<table>"&Chr(13) ExlHtml=ExlHtml&"<tr>"&Chr(13) For i=0 To ObjRs.Fields.Count-1 ExlHtml=ExlHtml&"<td>"&ObjRs.Fields(i).Name&"</td>"&Chr(13) Next ExlHtml=ExlHtml&"</tr>"&Chr(13) End Sub
'生成Excel的HTML表格内容代码 Private Sub MarhHtmlTBBody(ObjRs) Do Until ObjRs.EOF ExlHtml=ExlHtml&"<tr>"&Chr(13) For i=0 To ObjRs.Fields.Count-1 ExlHtml=ExlHtml&"<td>"&ObjRs.Fields(i).Value&"</td>"&Chr(13) Next ExlHtml=ExlHtml&"</tr>"&Chr(13) ObjRs.MoveNext Loop ExlHtml=ExlHtml&"</Table>" End Sub
'释放对象方法 Private Sub FreeObject(Obj) Set Obj=Nothing End Sub
'--------' '公开过程' '--------' 'FSO方式生成Excel文件 '参数:数据库记录集对象 Public Sub FSOMarkExcel(ObjRs) CreateFileSystemObject MarkHtmlTBHead ObjRs MarhHtmlTBBody ObjRs ObjExcel.Write ExlHtml ObjExcel.Close FreeObject ObjExcel FreeObject ObjFso End Sub
'Excel程序方式生成Excel文件 '参数:数据库记录集对象 Public Sub ExcelApplication(ObjRs) CreateExcelApplication FillExcelHead ObjRs FillExcelSheet ObjRs SaveExcelFile ObjExcel.Quit FreeObject ObjExcel FreeObject ObjSheet End Sub
'ADO方式生成Excel文件 Public Sub ADOMarkExcel(ObjRs) CreateADODBObject CreateADODBTable ObjRs FillADODBExcel ObjRs ExlCon.Close ExlRs.Close FreeObject ExlCon FreeObject ExlRs End Sub
'ADOStream方法生成Excel文件 Public Sub ADOStreamExcel(ObjRs) CreateADODBStream MarkHtmlTBHead ObjRs MarhHtmlTBBody ObjRs AdoStream.WriteText ExlHtml SaveADODBStream AdoStream.Close FreeObject AdoStream End Sub
'创建空Excel文件过程 Public Sub EmptyExcelFile(CreateMode,ObjRs) Select Case CreateMode Case "ADODB.Stream" CreateADODBStream MarkHtmlTBHead ObjRs AdoStream.WriteText ExlHtml&"</table>" SaveADODBStream AdoStream.Close FreeObject AdoStream Case "FileObjectSystem" CreateFileSystemObject MarkHtmlTBHead ObjRs ObjExcel.Write ExlHtml&"</table>" ObjExcel.Close FreeObject ObjExcel FreeObject ObjFso End Select End Sub
'--------' '公开方法' '''''''''' '返回Excel的HTML代码 Public Function getExcelHtml(ObjRs) MarkHtmlTBHead ObjRs MarhHtmlTBBody ObjRs getExcelHtml=ExlHtml End Function
'--------' '属性过程' ''''''''' 'Public Property Let ConnectionString(vData) 'mConStr=vData 'End Property 'Public Property Get ConnectionString(vData) 'ConnectionString=mConStr 'End Property Public Property Let TableName(vData) mTableName=vData End Property Public Property Get TableName() TableName=mTableName End Property Public Property Let SheetName(vData) mSheetName=vData End Property Public Property Get SheetName() SheetName=mSheetName End Property Public Property Let FileName(vData) mFileName=vData End Property Public Property Get FileName() FileName=mFileName End Property