【问题标题】:Importing csv file with hidden characters into Excel using vba使用vba将带有隐藏字符的csv文件导入Excel
【发布时间】:2013-09-22 04:55:03
【问题描述】:

在这个论坛的帮助下,已经能够解决大多数问题,但这让我陷入了困境。

我有一个逗号分隔的 csv 文件 ("xxxx","zzz",),其中隐藏了 chr(10)chr(13)。如果我使用脚本来替换这两个字符,我会丢失记录的结尾chr(10),因此只能作为一条记录导入。

在记事本中,文件显示完美 - 每行一条记录。如果我作为 excel 文件打开就可以了,只有当我作为 csv 分隔文件导入时才可以

感谢其他贡献者,以下是我一直在使用的。

理想情况下我想做的是:

  1. 选择 csv 文件
  2. 复制文件以保留原来的
  3. 清除所有会影响导入的隐藏字符
  4. 然后导入

-

Private Sub CSV_ImportRepl()
    Dim strFile As String
    Dim strBuffer As String
    Dim ff As Integer
    Dim strFileName As String
    Dim ws As Worksheet

    'ENTRIES CSV FILE ----------------------------------
    ' ---open file ----------
    strFile = Application.GetOpenFilename("Text Files (*.csv),*.*", _
    , "SELECT ENTRIES csv FILE")
    strFileName = strFile
    MsgBox strFileName

    ' ---start cleaning file ----------
    strBuffer = Space(FileLen(strFile))
    ff = FreeFile
    Open strFile For Binary Access Read As #ff
    Get #ff, , strBuffer
    Close #ff

    strBuffer = Replace(strBuffer, Chr(13), "")
    Kill strFile

    Open strFile For Binary Access Write As #ff
    Put #ff, , strBuffer
    Close #ff

    ' --- clear contents & import  ----------
    Sheets("Entries").Cells.ClearContents
    Set ws = ActiveWorkbook.Sheets("Entries") 'set to current worksheet name
    strFile = strFileName

    With ws.QueryTables.Add(Connection:="TEXT;" & strFile, _
    Destination:=ws.Range("A1"))
         .TextFileParseType = xlDelimited
         .TextFileCommaDelimiter = True
         .Refresh
    End With
End Sub

任何帮助将不胜感激。

【问题讨论】:

  • If I open as a an excel file it is ok 如果您可以将其作为 excel 文件打开,那么请执行此操作,然后将工作表复制到您的工作簿中,而不是进行所有清洁工作?
  • 非常感谢您的提示 Siddharth Rout - 我又尝试了这个选项,终于让它起作用了。是的,它是一种更聪明的方法。对于任何其他人参考这里是我使用的。 (必须为当地的英国日期格式添加 Local:= True)。再次感谢。 Sub opencsv() strFile = Application.GetOpenFilename("文本文件 (.csv),.*", , "请选择文本文件...") strFileName = strFile Set src = Workbooks.Open( Filename:=strFile, Local:=True) Cells.Copy ThisWorkbook.Activate Sheets("Entries").Activate Range("A1").Select ActiveSheet.Paste Application.CutCopyMode = False src.Close End Sub
  • Gr8 :) 你为什么不把它作为答案发布然后接受呢?
  • 作为新手,我不得不等待一个小时才能发布它!

标签: csv excel vba


【解决方案1】:
Sub opencsv()

    strFile = Application.GetOpenFilename("Text Files (*.csv),*.*", , "Please selec text file...")
    strFileName = strFile

    Set src = Workbooks.Open(Filename:=strFile, Local:=True)
    Cells.Copy
    ThisWorkbook.Activate
    Sheets("Entries").Activate
    Range("A1").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    src.Close

End Sub

【讨论】:

猜你喜欢
  • 2015-02-23
  • 2011-10-21
  • 1970-01-01
  • 2017-07-07
  • 2016-11-25
  • 1970-01-01
  • 2013-08-13
  • 1970-01-01
  • 2014-09-19
相关资源
最近更新 更多