Экспорт результатов запроса 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
Это может потребовать несколько настроек, поскольку я вынул некоторые биты, которые имели отношение только к моему конкретному случаю, но это может быть отправной точкой.