2012-11-09 122 views
3

我有一個訪問數據庫,它操縱來自Magento電子商務商店的數據,重新格式化數據和(希望!)吐出一個CSV文件,然後可以導入到ebay Turbolister進行批量上傳易趣。導出訪問查詢結果到CSV csv

我已經儘可能創建一個查詢,正確地將數據放入Turbolister所需的格式。

我的問題是各種各樣的(包括一些似乎與Access處理大型字段內容有關),但是我的問題的關鍵是我努力工作一個簡單的腳本,導出查詢結果爲格式正確的CSV(包括在文本值內需要雙引號的情況下加倍,即如果該值本身包含需要保留的引號)。

DoCmd.TransferText解決方案會引發與字段大小相關的錯誤('該字段太小而無法接受您嘗試添加的數據量'),因此這沒有用。

有沒有人得到一個良好的VBA工作CSV導出例程,他們可以建議?

乾杯

+1

你看過使用schema.ini(http://stackoverflow.com/questions/13255004/exporting-data-into-a-preformatted-file/13255522#13255522)? – Fionnuala

+0

不要忘記,您可以使用replace替換查詢 - 'replace(myfield,「」「,」「」「」「) - - 您可以在查詢的任何文本導出字段中使用它來導出。 – Fionnuala

回答

2

這是一個古老的功能,有時我用用,它允許你指定的分隔符,它還會檢查它的輸出數據,如果無法評估到任何一個日期或數字等等,那麼它使用雙引號:

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 

它可能需要一些調整,因爲我已經採取了一些位,只到我的具體情況有關,但是這可能是一個起點。

+0

謝謝你。即使這是努力處理文本字段與逗號和報價已經出現在他們,但會看看我是否可以調整一點。會讓你知道我如何繼續。 – cheshirepine

+0

@cheshirepine對不起,我錯過了這一點,你的數據不應該包含你打算使用的分隔符,因爲這會使事情複雜化,一般爲什麼csv不是最好的格式:( –

+0

是的,我意識到,但是當你的數據包含HTML在CSV中是唯一可供您導入Turbolister的選項,您的選擇是有限的!D:我一個一個的圍繞着它們工作 – cheshirepine