用vba实现将记录集输出到Excel模板
代码如下:
'************************************************
'** 函数名称: 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模板相关推荐
- VBA SQL查询-记录集转数组
目录 1 建立连接和查询 2. Recordset 对象(记录集)转数组 1 建立连接和查询 Sub 查询()Dim Cnn As Object, Rst As Object, i&, j&a ...
- 记录生产问题之Excel模板文件下载
问题描述 本地环境下载resources下的excel文件能成功,但是部署到服务器之后就获取不到文件流,采用的是docker部署 excel模板文件目录 POI依赖 <dependency> ...
- oracle调用存储过程output,vb.net 调用oracle的存储过程的方法(带输入参数 和输出参数或者返回记录集)...
1.直接调用存储过程 2 是用包的方式调用存储过程 3 调用存储过程且该存储过程返回记录集 这种必须使用包的方式 1.直接调用存储过程 测试存储过程为: create or replace proce ...
- 利用XSLT把ADO记录集转换成XML
由于XML(可扩展标记语言:eXtensible Markup Language)真正的平台无关性,它正在逐渐成为数据传输的主要介质.XML是一种自描述的语言,数据本身就已经包含了元数据,即关于数据本 ...
- sql左连接排序取第一个_详解kettle工具记录集连接功能及实验测试
概述 今天主要介绍下kettle的记录集连接功能和一些注意点. 一.什么是记录集连接 记录集连接可以实现数据集合的关联,也分为内连接,左连接,右连接,外连接. 多表的join,可以直接用sql写入[表 ...
- Kettle 记录集连接实战
之前文章中 kettle 实战记录这个是 之前的需求 ,使用记录集连接 优化了程序,取消了 阻塞数据的组件,针对批量积压的文件也可以从容应对. https://blog.csdn.net/qq_359 ...
- Kettle学习之记录集连接
Kettle学习之记录集 在kettle的表输入中,作数据的抽取往往会用到JOIN条件,即LEFT JOIN ,RIGHT JOIN等.在kettle中,记录集组件可以当作JOIN条件使用,特别是当两 ...
- 记录集 执行mysql_mysql 多次查询后再执行记录集
mysql 多次查询后再执行记录集 关注:234 答案:2 mip版 解决时间 2021-01-17 06:32 提问者酒瘾渼亽兒 2021-01-16 12:11 一.概况 一个项目需要远程连接 ...
- SSIS中的记录集目标
这一篇,我们来看看另外一个特殊的目标组件:记录集目标.它与DataReader目标有些类似,也是在内存中的.但与DataReader目标不同的是,它可以被下游任务使用. 它的使用也比较简单,我们一般指 ...
最新文章
- 前端学习(1802):前端调试之事件伪类
- SpringBoot入门之简单配置
- JZOJ 3055. 【NOIP2012模拟10.27】比赛
- 服务器装系统鼠标键盘不能动,装系统鼠标键盘不能动
- python3爬虫(5):财务报表爬取入库
- linux 加速度传感器数据获取,Android传感器SensorEventListener之加速度传感器
- 贝叶斯统计——基础篇
- 官宣,Google DeepMind 成立
- 【Wifi模块】使用基于CP2102のWifi模块连接阿里云
- 苹果宣布 2022 年 Apple 设计大奖得主
- spring boot rest例子
- 电商项目之收货地址理解
- word如何设置上标形式_word怎么设置上标表示形式
- 做c4d计算机配置,震惊!现在玩转C4D的电脑配置只要4000多就可以了!
- 【NOIP2017提高组正式赛】列队
- js 中文转拼音缩写
- js中slice、splice、split的比较
- 执行pytest生成测试报告遇到的问题
- 我是如何转岗成为数据分析师?
- android 美团下拉刷新,美团外卖下拉刷新效果实现方法