代码如下:

'************************************************ 
'** 函数名称:  ExportTempletToExcel 
'** 函数功能:  将记录集输出到 Excel 模板 
'** 参数说明: 
'**            strExcelFile         要保存的 Excel 文件 
'**            strSQL               查询语句,就是要导出哪些内容 
'**            strSheetName         工作表名称 
'**            adoConn              已经打开的数据库连接 
'** 函数返回: 
'**            Boolean 类型 
'**            True                 成功导出模板 
'**            False                失败 
'** 参考实例: 
'**            Call ExportTempletToExcel(c:\\text.xls,查询语句,工作表1,adoConn) 
'************************************************ 
Private Function ExportTempletToExcel(ByVal strExcelFile As String, _ 
                                      ByVal strSQL As String, _ 
                                      ByVal strSheetName As String, _ 
                                      ByVal adoConn As Object) As Boolean 
   Dim adoRt                        As Object 
   Dim lngRecordCount               As Long                       ' 记录数 
   Dim intFieldCount                As Integer                    ' 字段数 
   Dim strFields                    As String                     ' 所有字段名 
   Dim i                            As Integer

Dim exlApplication               As Object                     ' Excel 实例 
   Dim exlBook                      As Object                     ' Excel 工作区 
   Dim exlSheet                     As Object                     ' Excel 当前要操作的工作表

On Error GoTo LocalErr

Me.MousePointer = vbHourglass

'// 创建 ADO 记录集对象 
   Set adoRt = CreateObject(ADODB.Recordset)

With adoRt 
      .ActiveConnection = adoConn 
      .CursorLocation = 3           'adUseClient 
      .CursorType = 3               'adOpenStatic 
      .LockType = 1                 'adLockReadOnly 
      .Source = strSQL 
      .Open

If .EOF And .BOF Then 
         ExportTempletToExcel = False 
      Else 
         '// 取得记录总数,+ 1 是表示还有一行字段名名称信息 
         lngRecordCount = .RecordCount + 1 
         intFieldCount = .Fields.Count - 1

For i = 0 To intFieldCount 
            '// 生成字段名信息(vbTab 在 Excel 里表示每个单元格之间的间隔) 
            strFields = strFields & .Fields(i).Name & vbTab 
         Next

'// 去掉最后一个 vbTab 制表符 
         strFields = Left$(strFields, Len(strFields) - Len(vbTab))

'// 创建Excel实例 
         Set exlApplication = CreateObject(Excel.Application) 
         '// 增加一个工作区 
         Set exlBook = exlApplication.Workbooks.Add 
         '// 设置当前工作区为第一个工作表(默认会有3个) 
         Set exlSheet = exlBook.Worksheets(1) 
         '// 将第一个工作表改成指定的名称 
         exlSheet.Name = strSheetName

'// 清除“剪切板” 
         Clipboard.Clear 
         '// 将字段名称复制到“剪切板” 
         Clipboard.SetText strFields 
         '// 选中A1单元格 
         exlSheet.Range(A1).Select 
         '// 粘贴字段名称 
         exlSheet.Paste

'// 从A2开始复制记录集 
         exlSheet.Range(A2).CopyFromRecordset adoRt 
         '// 增加一个命名范围,作用是在导入时所需的范围 
         exlApplication.Names.Add strSheetName, = & strSheetName & !$A$1:$ & _ 
                                  uGetColName(intFieldCount + 1) & $ & lngRecordCount 
         '// 保存 Excel 文件 
         exlBook.SaveAs strExcelFile 
         '// 退出 Excel 实例 
         exlApplication.Quit

ExportTempletToExcel = True 
      End If 
      'adStateOpen = 1 
      If .State = 1 Then 
         .Close 
      End If 
   End With

LocalErr: 
   '********************************************* 
   '** 释放所有对象 
   '********************************************* 
   Set exlSheet = Nothing 
   Set exlBook = Nothing 
   Set exlApplication = Nothing 
   Set adoRt = Nothing 
   '*********************************************

If Err.Number <> 0 Then 
      Err.Clear 
   End If

Me.MousePointer = vbDefault 
End Function

'// 取得列名 
Private Function uGetColName(ByVal intNum As Integer) As String 
   Dim strColNames                  As String 
   Dim strReturn                    As String

'// 通常字段数不会太多,所以到 26*3 目前已经够了。 
   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, & _ 
                 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, & _ 
                 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 
   strReturn = Split(strColNames, ,)(intNum - 1) 
   uGetColName = strReturn 
End Function

用vba实现将记录集输出到Excel模板相关推荐

  1. VBA SQL查询-记录集转数组

    目录 1 建立连接和查询 2. Recordset 对象(记录集)转数组 1 建立连接和查询 Sub 查询()Dim Cnn As Object, Rst As Object, i&, j&a ...

  2. 记录生产问题之Excel模板文件下载

    问题描述 本地环境下载resources下的excel文件能成功,但是部署到服务器之后就获取不到文件流,采用的是docker部署 excel模板文件目录 POI依赖 <dependency> ...

  3. oracle调用存储过程output,vb.net 调用oracle的存储过程的方法(带输入参数 和输出参数或者返回记录集)...

    1.直接调用存储过程 2 是用包的方式调用存储过程 3 调用存储过程且该存储过程返回记录集 这种必须使用包的方式 1.直接调用存储过程 测试存储过程为: create or replace proce ...

  4. 利用XSLT把ADO记录集转换成XML

    由于XML(可扩展标记语言:eXtensible Markup Language)真正的平台无关性,它正在逐渐成为数据传输的主要介质.XML是一种自描述的语言,数据本身就已经包含了元数据,即关于数据本 ...

  5. sql左连接排序取第一个_详解kettle工具记录集连接功能及实验测试

    概述 今天主要介绍下kettle的记录集连接功能和一些注意点. 一.什么是记录集连接 记录集连接可以实现数据集合的关联,也分为内连接,左连接,右连接,外连接. 多表的join,可以直接用sql写入[表 ...

  6. Kettle 记录集连接实战

    之前文章中 kettle 实战记录这个是 之前的需求 ,使用记录集连接 优化了程序,取消了 阻塞数据的组件,针对批量积压的文件也可以从容应对. https://blog.csdn.net/qq_359 ...

  7. Kettle学习之记录集连接

    Kettle学习之记录集 在kettle的表输入中,作数据的抽取往往会用到JOIN条件,即LEFT JOIN ,RIGHT JOIN等.在kettle中,记录集组件可以当作JOIN条件使用,特别是当两 ...

  8. 记录集 执行mysql_mysql 多次查询后再执行记录集

    mysql 多次查询后再执行记录集 关注:234  答案:2  mip版 解决时间 2021-01-17 06:32 提问者酒瘾渼亽兒 2021-01-16 12:11 一.概况 一个项目需要远程连接 ...

  9. SSIS中的记录集目标

    这一篇,我们来看看另外一个特殊的目标组件:记录集目标.它与DataReader目标有些类似,也是在内存中的.但与DataReader目标不同的是,它可以被下游任务使用. 它的使用也比较简单,我们一般指 ...

最新文章

  1. 前端学习(1802):前端调试之事件伪类
  2. SpringBoot入门之简单配置
  3. JZOJ 3055. 【NOIP2012模拟10.27】比赛
  4. 服务器装系统鼠标键盘不能动,装系统鼠标键盘不能动
  5. python3爬虫(5):财务报表爬取入库
  6. linux 加速度传感器数据获取,Android传感器SensorEventListener之加速度传感器
  7. 贝叶斯统计——基础篇
  8. 官宣,Google DeepMind 成立
  9. 【Wifi模块】使用基于CP2102のWifi模块连接阿里云
  10. 苹果宣布 2022 年 Apple 设计大奖得主
  11. spring boot rest例子
  12. 电商项目之收货地址理解
  13. word如何设置上标形式_word怎么设置上标表示形式
  14. 做c4d计算机配置,震惊!现在玩转C4D的电脑配置只要4000多就可以了!
  15. 【NOIP2017提高组正式赛】列队
  16. js 中文转拼音缩写
  17. js中slice、splice、split的比较
  18. 执行pytest生成测试报告遇到的问题
  19. 我是如何转岗成为数据分析师?
  20. android 美团下拉刷新,美团外卖下拉刷新效果实现方法

热门文章

  1. 【大数据】大数据运维学习前必须知道的几个常识
  2. idea 导入mysql驱动遇到的问题
  3. php 字符串搜索,php字符串查找函数(strrpos与strchr)
  4. 七月集训(第18天) —— 树
  5. 智能标签和票据的RFID技术简介及案例
  6. pc端VLC显示中文字幕设置
  7. 注册kaggle不显示验证码?亲测有效已解决
  8. Chrome商店镜像,支持各种插件下载
  9. 连接共享打印机,提示“操作无法完成(错误 0x00000709)”
  10. 如何给框架和JS 库瘦身?