用vba实现将记录集输出到Excel模板
<P><div class="codetitle"><span><a data="74770" class="copybut" id="copybut74770"><U>复制代码</U></a></span> 代码如下:</div><div class="codebody" id="code74770"><BR>'************************************************ <BR>'** 函数名称: ExportTempletToExcel <BR>'** 函数功能: 将记录集输出到 Excel 模板 <BR>'** 参数说明: <BR>'** strExcelFile 要保存的 Excel 文件 <BR>'** strSQL 查询语句,就是要导出哪些内容 <BR>'** strSheetName 工作表名称 <BR>'** adoConn 已经打开的数据库连接 <BR>'** 函数返回: <BR>'** Boolean 类型 <BR>'** True 成功导出模板 <BR>'** False 失败 <BR>'** 参考实例: <BR>'** Call ExportTempletToExcel(c:\\text.xls,查询语句,工作表1,adoConn) <BR>'************************************************ <BR>Private Function ExportTempletToExcel(ByVal strExcelFile As String, _ <BR> ByVal strSQL As String, _ <BR> ByVal strSheetName As String, _ <BR> ByVal adoConn As Object) As Boolean <BR> Dim adoRt As Object <BR> Dim lngRecordCount As Long ' 记录数 <BR> Dim intFieldCount As Integer ' 字段数 <BR> Dim strFields As String ' 所有字段名 <BR> Dim i As Integer <br><br> Dim exlApplication As Object ' Excel 实例 <BR> Dim exlBook As Object ' Excel 工作区 <BR> Dim exlSheet As Object ' Excel 当前要操作的工作表 <br><br> On Error GoTo LocalErr <br><br> Me.MousePointer = vbHourglass <br><br> '// 创建 ADO 记录集对象 <BR> Set adoRt = CreateObject(ADODB.Recordset) <br><br> With adoRt <BR> .ActiveConnection = adoConn <BR> .CursorLocation = 3 'adUseClient <BR> .CursorType = 3 'adOpenStatic <BR> .LockType = 1 'adLockReadOnly <BR> .Source = strSQL <BR> .Open <br><br> If .EOF And .BOF Then <BR> ExportTempletToExcel = False <BR> Else <BR> '// 取得记录总数,+ 1 是表示还有一行字段名名称信息 <BR> lngRecordCount = .RecordCount + 1 <BR> intFieldCount = .Fields.Count - 1 <br><br> For i = 0 To intFieldCount <BR> '// 生成字段名信息(vbTab 在 Excel 里表示每个单元格之间的间隔) <BR> strFields = strFields & .Fields(i).Name & vbTab <BR> Next <br><br> '// 去掉最后一个 vbTab 制表符 <BR> strFields = Left$(strFields, Len(strFields) - Len(vbTab)) <br><br> '// 创建Excel实例 <BR> Set exlApplication = CreateObject(Excel.Application) <BR> '// 增加一个工作区 <BR> Set exlBook = exlApplication.Workbooks.Add <BR> '// 设置当前工作区为第一个工作表(默认会有3个) <BR> Set exlSheet = exlBook.Worksheets(1) <BR> '// 将第一个工作表改成指定的名称 <BR> exlSheet.Name = strSheetName <br><br> '// 清除“剪切板” <BR> Clipboard.Clear <BR> '// 将字段名称复制到“剪切板” <BR> Clipboard.SetText strFields <BR> '// 选中A1单元格 <BR> exlSheet.Range(A1).Select <BR> '// 粘贴字段名称 <BR> exlSheet.Paste <br><br> '// 从A2开始复制记录集 <BR> exlSheet.Range(A2).CopyFromRecordset adoRt <BR> '// 增加一个命名范围,作用是在导入时所需的范围 <BR> exlApplication.Names.Add strSheetName, = & strSheetName & !$A$1:$ & _ <BR> uGetColName(intFieldCount + 1) & $ & lngRecordCount <BR> '// 保存 Excel 文件 <BR> exlBook.SaveAs strExcelFile <BR> '// 退出 Excel 实例 <BR> exlApplication.Quit <br><br> ExportTempletToExcel = True <BR> End If <BR> 'adStateOpen = 1 <BR> If .State = 1 Then <BR> .Close <BR> End If <BR> End With <br><br>LocalErr: <BR> '********************************************* <BR> '** 释放所有对象 <BR> '********************************************* <BR> Set exlSheet = Nothing <BR> Set exlBook = Nothing <BR> Set exlApplication = Nothing <BR> Set adoRt = Nothing <BR> '********************************************* <br><br> If Err.Number <> 0 Then <BR> Err.Clear <BR> End If <br><br> Me.MousePointer = vbDefault <BR>End Function <br><br>'// 取得列名 <BR>Private Function uGetColName(ByVal intNum As Integer) As String <BR> Dim strColNames As String <BR> Dim strReturn As String <br><br> '// 通常字段数不会太多,所以到 26*3 目前已经够了。 <BR> strColNames = A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z, & _ <BR> AA,AB,AC,AD,AE,AF,AG,AH,AI,AJ,AK,AL,AM,AN,AO,AP,AQ,AR,AS,AT,AU,AV,AW,AX,AY,AZ, & _ <BR> BA,BB,BC,BD,BE,BF,BG,BH,BI,BJ,BK,BL,BM,BN,BO,BP,BQ,BR,BS,BT,BU,BV,BW,BX,BY,BZ <BR> strReturn = Split(strColNames, ,)(intNum - 1) <BR> uGetColName = strReturn <BR>End Function <BR></div></P>
頁:
[1]