将查询输出导出到文本文件

时间:2012-02-26 01:11:48

标签: ms-access ms-access-2007 access-vba

我有一个访问查询,我尝试使用以下代码导出到文本文件:

DoCmd.TransferText acExportFixed, "Export Specification", _
    "Test Query", "C:\Users\Documents\TestOutput.txt", True

我遇到的问题是:输出文件“TestOutput.txt”显示的数据具有固定宽度,但列标题以逗号分隔。我希望列标题也是固定宽度。

列标题与其他数据的显示方式不同?

1 个答案:

答案 0 :(得分:2)

AFAICT,这是TransferText不可避免的“功能”。它似乎缺乏任何内置智能来说“好吧,我们将导出为acExportFixed,所以让我们检查导出规范中定义的列宽并使用相同的宽度输出列标题”。相反,它只是将列名称作为逗号分隔列表。

与Access中的其他所有内容一样,当其默认行为不令人满意时,您可以编写VBA代码来按照自己的方式执行操作。

Const VB_FORREADING = 1
Const VB_FORWRITING = 2
Const cstrFile As String = "C:\Users\Documents\TestOutput.txt"
Const cstrHeaderRow As String = "col1    col2    etc..."
Dim oFSO As Object
Dim oFile As Object
Dim strContents As String

' do TransferText without the field names '
' (HasFieldNames default = False) '
DoCmd.TransferText acExportFixed, "Export Specification", _
    "Test Query", cstrFile 

Set oFSO = CreateObject("Scripting.FileSystemObject")
' read file content into strContents string variable '
Set oFile = oFSO.OpenTextFile(cstrFile, VB_FORREADING)
strContents = oFile.ReadAll
oFile.Close
' re-write file using cstrHeaderRow plus strContents '
Set oFile = oFSO.OpenTextFile(cstrFile, VB_FORWRITING)
oFile.write cstrHeaderRow & vbCrLf & strContents
oFile.Close

Set oFile = Nothing
Set oFSO = Nothing