将数据输出到Excel的方法

发表于

日常工作中经常需要把某一部份数据导出到EXCEL,通常情况都有软件提供类似方案.

但是这需要手工去打开软件然后导出,不能实现自动化.所以就编写了这个脚本方便实现自动化.

本脚本采用VBSCRIPT语言编写.可以在VB或VBS脚本中使用.

提供了两个过程调用方法rsToExcel,和sqltoexcel.

以下例子就可以把一个文本文档(CSV格式),转为EXCEL

sqlToExcel "TEXT;c:\test.txt","c:\test.xls",null

以下可以从一个SQL数据库中提取数据并输出到excel文件中

sqlToExcel "OLEDB;Provider=SQLOLEDB;data source=SQLSERVER;Initial Catalog=DB;User ID=sa;Password=pass","c:\test.xls","select * from mytable"

注:rstoexcel和sqltoexcel都可以生成EXCEL文件,可以看情况使用.一般情况下使用sqltoexcel就可以了,比较简单.

以下是使用rstoexcel的方法,会麻烦一些

Dim Conn, StrConn, RS, SQL
set Conn = CreateObject("ADODB.Connection")
set RS = CreateObject("ADODB.Recordset")
StrConn = "Provider=SQLOLEDB;data source=SQLSERVER;Initial Catalog=DB;User ID=sa;Password=passwd"
SQL = "select * from mytable"
Conn.Open StrConn
RS.Open SQL,conn,1,1
rstoexcel(RS,"c:\sql.xls")

参考资料: http://support.microsoft.com/kb/247412/zh-cn


Dim Conn, StrConn, RS, SQL
set Conn = CreateObject("ADODB.Connection")
set RS = CreateObject("ADODB.Recordset")
StrConn = "Provider=SQLOLEDB;data source=SQLSERVER;Initial Catalog=DB;User ID=sa;Password=passwd"
SQL = "select * from mytable"
Conn.Open StrConn
RS.Open SQL,conn,1,1
rstoexcel(RS,"c:\sql.xls")

'sqltoexcel "TEXT;c:\11.txt","c:\test.xls",null
'sqltoexcel "URL;http://amupdate.nxt.ru/","c:\url.xls",null
sqltoexcel "OLEDB;" & StrConn ,"c:\sql.xls",SQL

'RS记录导出到EXCEL文件 by chenall http://chenall.net
'使用方法
'rsToExcel Recordset,ExcelFileName
'rsToExcel rs,"c:\test.xls"
sub rsToExcel(rs,file)
    'on error resume next
    dim n,x
    dim xlApp,xlBook,xlSheet
    Set xlApp = CreateObject("Excel.Application")'创建EXCEL对象
    with xlApp.Workbooks.Add().Worksheets(1)'创建新的工作表对像
        n = 0
        for each x in rs.Fields
            n=n+1
            .Cells(1,n) = x.name 
            .Cells(1,n).Font.Bold   =   True '加粗
            .Cells(1,n).HorizontalAlignment=3 '居中
        next
        .Range("A2").CopyFromRecordset rs
        .Range("A1:" & chr(asc("A")+n-1) & rs.recordcount+1).Borders.LineStyle = 1'画表框
        .Range("A1:" & chr(asc("A")+n-1) & rs.recordcount+1).EntireColumn.AutoFit() '自动调整列宽
        xlApp.displayalerts=false'不显示覆盖文件的提示
        .SaveAs file'另存为新的文件名
        xlApp.displayalerts=true'恢复显示
    end with
    xlApp.Quit'退出excel
    set xlApp=nothing
end sub

'任意数据源导出到EXCEL文件 by chenall http://chenall.net
'使用方法,sql参数可以为null
'sqlToExcel conn,ExcelFileName,sql
'sqlToExcel conn,"c:\test.xls",sql
sub sqlToExcel(conn,file,sql)
'    on error resume next
    dim xlApp,xlBook,xlSheet,QryTable
    Set xlApp = CreateObject("Excel.Application")'创建EXCEL对象
    with xlApp.Workbooks.Add().Worksheets(1)'创建新的工作表对像
        if isnull(sql) then
            set QryTable = .QueryTables.add(conn,.Range("A1")) '导入数据
        else
            set QryTable = .QueryTables.add(conn,.Range("A1"),sql) '导入数据
        end if
        QryTable.Refresh false
        xlApp.displayalerts=false'不显示覆盖文件的提示
        .SaveAs file'另存为新的文件名
        xlApp.displayalerts=true'恢复显示
    end with
    xlApp.Quit'退出excel
    set xlApp=nothing
end sub
希望本站内容对您有点用处,有什么疑问或建议请在后面留言评论
若无特别注明,本站内容均属原创,转载请注明作者(chenall)和出处 chenall's Blog ,请勿用于任何商业用途