3

我有一个 Access 数据库。我想Data_01每天使用 VBScript 中的 ADO 自动查询表格并将结果导出到 Excel 电子表格。目前我在 ADO 方面的技能还很欠缺。

  1. 我有一个日期时间列,我将从昨天和今天选择项目。在 GUI 查询中,标准将是Between Date() And Date()-1
  2. 我有一PartNumber列我想选择一个特定的零件号。在 GUI 查询中,标准将是Series 400
  3. 然后,我想根据项目 1. 和 2 中的条件选择其他列。
  4. 我也想获得列的标题行。

我目前将整个表导出到 Excel,然后使用 VBScript 选择我想要的列,然后删除所有不需要的数据,然后为我的最终输出文件自动调整列。这似乎是处理器和时间密集型的。

4

4 回答 4

1

您是否尝试过 Excel 中用于导入数据的内置函数?我没有英文版的 Excel,所以我不会引导您使用它们,但我认为菜单名为“数据”。

于 2009-02-19T19:04:03.673 回答
1

这是一些示例 VBScript

Dim cn 
Dim rs

strFile = "C:\Docs\LTD.mdb"

strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strFile & ";"

Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")

cn.Open strCon

strSQL = "SELECT * FROM tblTable " _
& "WHERE CrDate Between Now() And Date()-1 " _
& "AND OtherField='abc' " _
& "AND PartNumber=1 " _
& "ORDER BY CrDate, PartNumber"

rs.Open strSQL, cn

Set xl = CreateObject("Excel.Application")
Set xlBk = xl.Workbooks.Add

With xlbk.Worksheets(1)
    For i = 0 To rs.Fields.Count - 1
        .Cells(1, i + 1) = rs.Fields(i).Name
    Next

    .Cells(2, 1).CopyFromRecordset rs
    .Columns("B:B").NumberFormat = "m/d/yy h:mm"
End With

xl.Visible=True
于 2009-02-19T20:02:16.767 回答
0

我的第一反应是执行以下操作:

  1. 在 MS Access 中创建一个查询对象,用于查找要导出的数据 [数据库窗口 -> 查询 -> 新建(现在使用 GUI 构建器)]
  2. 创建将查询导出到 Excel 文件的宏。我在这里谈论更多。您也可以在 VBA 中执行此操作……许多人会说这更“纯粹”(我也有宏);但无论什么漂浮你的船。
  3. 设置一个 autoexec 宏(这将在 MS Access 打开时自动运行)运行您刚刚创建的导出宏,然后退出 MS Access(您可以在 Access 加载时按住 shift 键覆盖它)。最好还创建一个单独的 MS Access 文件来执行这些操作而不影响原始 MS Access 文件,只需创建指向原始文件的表链接即可。
  4. 设置计划任务以每天打开一次 MS Access 文件。
于 2009-02-19T19:14:20.773 回答
0

如果您没有 Excel,您可以像这样使用 ADO 访问 xls


Const adOpenStatic = 3
Const adLockOptimistic = 3
Const adCmdText = &H0001
Const strDB = "" 'Location of Database file
Const strXLS = "" 'Location of spreadsheet


Set objAccessConnection = CreateObject("ADODB.Connection")
objAccessConnection.Open "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source=" & strDB
Set objExcelConnection = CreateObject("ADODB.Connection")
objExcelConnection.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strXLS & ";Extended Properties=""Excel 8.0;HDR=Yes;"";"
Set objAccessRecordset = CreateObject("ADODB.Recordset")
Set objExcelRecordSet = CreateObject("ADODB.Recordset")

strAccessQuery = "SELECT * FROM Data_01 WHERE PartNumberColumn = 'Series 400' AND DateColumn BETWEEN #" & Date -1 & "# AND #" & Date & "#"
objAccessRecordset.Open strAccessQuery, objAccessConnection, adOpenStatic, adLockOptimistic

strTable = "Sheet1$"
objExcelRecordSet.Open "Select * FROM [" & strTable & "]", objExcelConnection, adOpenStatic, adLockOptimistic, adCmdText

Do Until objAccessRecordset.EOF
   objExcelRecordSet.AddNew
   For i = 0 To objAccessRecordSet.Fields.Count - 1
       objExcelRecordset.Fields(i).Value = objAccessRecordset.Fields(i).Value
   Next
   objExcelRecordSet.Update
   objAccessRecordset.MoveNext
Loop

objExcelRecordset.Close
Set objExcelRecordset = Nothing
objAccessRecordset.Close
Set objAccessRecordset = Nothing
objAccessConnection.Close
Set objAccessConnection = Nothing

唯一需要注意的是确保电子表格中的列在第一行有标题,否则此脚本可能会失败。

编辑:
您还可以将记录集写入 .csv 文件。


Const adClipString = 2
Const ForWriting = 2
Const ForAppending = 8
Const strDB = "C:\Test.mdb"
Const strCSV = "C:\Test.csv"


Set objAccessConnection = CreateObject("ADODB.Connection")
objAccessConnection.Open "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source=" & strDB

Set objAccessRecordset = CreateObject("ADODB.Recordset")

strAccessQuery = "SELECT * FROM Data_01 WHERE PartNumber = 'Series 400' AND TheDate BETWEEN #" & Date -1 & "# AND #" & Date & "#"
objAccessRecordset.Open strAccessQuery, objAccessConnection, adOpenStatic, adLockOptimistic

Set objCSV = CreateObject("Scripting.FileSystemObject").OpenTextFile(strCSV, ForAppending, True)
objCSV.Write objAccessRecordset.GetString(adClipString,,",",CRLF)

objCSV.Close
Set objCSV = Nothing
objAccessRecordset.Close
Set objAccessRecordset = Nothing
objAccessConnection.Close
Set objAccessConnection = Nothing

Excel 将毫无问题地打开 .csv 文件。这种方法的缺点是 Excel 不能很好地保存 .csv 文件,但在 excel 中,csv 文件可以保存为 xls。

于 2009-02-19T21:14:25.657 回答