Экспорт результатов запроса Access в CSV

У меня есть база данных доступа, которая манипулирует данными из магазина электронной коммерции Magento, переформатирует данные и (надеюсь!) Выкладывает CSV-файл, который затем может быть импортирован в ebay Turbolister для массовой загрузки в eBay.

Я дошел до создания запроса, который правильно выкладывает данные в формат, требуемый Turbolister.

У меня разные проблемы (в том числе те, которые, по-видимому, связаны с обработкой Access большого содержимого полей), однако суть моей проблемы заключается в том, что я изо всех сил пытаюсь заставить работать простой скрипт, который экспортирует результаты запроса как правильно отформатированный CSV (включая удвоение двойных кавычек, где это необходимо, внутри текстового значения, т. е. если само значение содержит кавычки, которые необходимо сохранить).

Решение DoCmd.TransferText выдает ошибку, связанную с размером поля ("поле слишком мало, чтобы принять объем данных, которые вы пытались добавить"), так что это бесполезно.

У кого-нибудь есть хорошая рабочая процедура экспорта CSV в VBA, которую они могут предложить?

ура

1 ответ

Решение

Это старая функция, которую я иногда использовал, она позволяет вам указывать разделитель, он также проверяет выводимые данные и, если они не могут быть оценены как по дате, так и по цифре и т. Д., Тогда используются двойные кавычки:

Public Function ExportTextDelimited(strQueryName As String, strDelimiter As String)

Dim rs          As Recordset
Dim strHead     As String
Dim strData     As String
Dim inti        As Integer
Dim intFile     As Integer
Dim fso         As New FileSystemObject

On Error GoTo Handle_Err

    fso.CreateTextFile ("C:\Untitled.csv")

    Set rs = Currentdb.OpenRecordset(strQueryName)

    rs.MoveFirst

    intFile = FreeFile
    strHead = ""

    'Add the Headers
    For inti = 0 To rs.Fields.Count - 1
        If strHead = "" Then
            strHead = rs.Fields(inti).Name
        Else
            strHead = strHead & strDelimiter & rs.Fields(inti).Name
        End If
    Next

    Open "C:\Untitled.csv" For Output As #intFile

    Print #intFile, strHead

    strHead = ""

    'Add the Data
    While Not rs.EOF

        For inti = 0 To rs.Fields.Count - 1
            If strData = "" Then
                strData = IIf(IsNumeric(rs.Fields(inti).value), rs.Fields(inti).value, IIf(IsDate(rs.Fields(inti).value), rs.Fields(inti).value, """" & rs.Fields(inti).value & """"))
            Else
                strData = strData & strDelimiter & IIf(IsNumeric(rs.Fields(inti).value), rs.Fields(inti).value, IIf(IsDate(rs.Fields(inti).value), rs.Fields(inti).value, """" & rs.Fields(inti).value & """"))
            End If
        Next

        Print #intFile, strData

        strData = ""

        rs.MoveNext
    Wend

        Close #intFile

rs.Close
Set rs = Nothing

'Open the file for viewing
Application.FollowHyperlink "C:\Untitled.csv"   

Exit Function

Handle_Err:
MsgBox Err & " - " & Err.Description

End Function

Это может потребовать несколько настроек, поскольку я вынул некоторые биты, которые имели отношение только к моему конкретному случаю, но это может быть отправной точкой.

Другие вопросы по тегам