Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将CSV(UTF-8)导入Excel而不设置格式_Excel_Vba - Fatal编程技术网

将CSV(UTF-8)导入Excel而不设置格式

将CSV(UTF-8)导入Excel而不设置格式,excel,vba,Excel,Vba,我有将数据从CSV文件粘贴到工作表的代码。一切都很好,但我面临着一些问题,目前的解决方案 有没有一种方法可以按原样粘贴数据而不格式化?现在Excel正在格式化,例如-Name到=-Name,那么还有Name吗?错误而不是值。此外,它正在将215067910018格式化为215068E+11 我的CSV字符串如下所示: 123456,"Word1","Word2","-Word3",,"Word4","Word5","00076",,"Word7","Word8" 运行代码后-Word3看起来像

我有将数据从CSV文件粘贴到工作表的代码。一切都很好,但我面临着一些问题,目前的解决方案

有没有一种方法可以按原样粘贴数据而不格式化?现在Excel正在格式化,例如-Name到=-Name,那么还有Name吗?错误而不是值。此外,它正在将215067910018格式化为215068E+11

我的CSV字符串如下所示:

123456,"Word1","Word2","-Word3",,"Word4","Word5","00076",,"Word7","Word8"
运行代码后-Word3看起来像Name?在Excel单元格中。我得到的是76,而不是00076

这是我目前的代码:

Sub GetCustomers()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets.Add(After:= _
             ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))
    ws.Name = "Sheet1"

    Dim strText As String

    Dim file As String
    file = "L:\15\186507.CSV

    ' read utf-8 file to strText variable
   With CreateObject("ADODB.Stream")
        .Open
        .Type = 1  ' Private Const adTypeBinary = 1
        .LoadFromFile file
        .Type = 2  ' Private Const adTypeText = 2
        .Charset = "utf-8"
        strText = .ReadText(-1)  ' Private Const adReadAll = -1
    End With

    ' parse strText data to a sheet
    intRow = 1
    For Each strLine In Split(strText, Chr(10))
        If strLine <> "" Then
            With ws
                .Cells(intRow, 1) = strLine
                .Cells(intRow, 1).TextToColumns Destination:=Cells(intRow, 1), DataType:=xlDelimited, _
                    TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
                    Semicolon:=False, Comma:=True, Space:=False, Other:=False
            End With

            intRow = intRow + 1
        End If
    Next strLine

End Sub
编辑:

我可以手动将文本转换为列。VBA是否也能做到这一点?我的意思是设置列数据格式,而.TextToColumns


我曾尝试将目标单元格的格式设置为文本格式,但有时在复制操作上会起作用,但这也没有帮助

这不是一个优雅的解决方案,但在测试时对我很有用,它是在之后更正.TextToColumns操作引入的任何公式。见下文:

Dim cl As Range, rg As Range
作为你的strLineLoop的一部分


可以使用TextToColumns的参数FieldInfo指定数据类型。例如,要为第1列和第4列指定文本,您可以使用以下内容

.Cells(intRow, 1).TextToColumns _
            Destination:=.Cells(intRow, 1), _
            DataType:=xlDelimited, _
            TextQualifier:=xlDoubleQuote, _
            ConsecutiveDelimiter:=False, _
            Tab:=False, _
            Semicolon:=False, _
            Comma:=True, _
            Space:=False, _
            Other:=False, _
            FieldInfo:=Array(Array(1, 2), Array(2, 1), Array(3, 1), Array(4, 2), Array(5, 1), _
                Array(6, 1), Array(7, 1), Array(8, 1), Array(9, 1), Array(10, 1), Array(11, 1))

对于数组中的每一对,第一个数字表示列号,第二个数字表示数据类型1=常规;2=文本;等有关更多详细信息,请查看。

TextToColumns方法指定TextQualifier=xlDoubleQuote。类似于双引号中的-Name吗?如果有,这个问题可能会消失?@Cindymister他们用双引号引起来,就像-Word3。但问题仍然存在。如果您使用Excel 2010+中提供的Power Query导入,它会将双引号和imports-Wordn作为文本字符串进行导入。@RonRosenfeld我在考虑过它,但我不确定如果我的CSV不断更新并且出现新行,它将如何工作。每次打开工作簿时都会更新表。我想创建VBS以每天运行此应用程序。因此,它将两个CSV文件导入一个工作簿,将它们连接在一起,并将对象导出到我们的文件管理系统。刷新选项列在“查询属性”对话框窗口中。“打开文件”是选项之一。你也可以使用定时器。如果需要其他触发器,也可以编写VBA事件代码。
.Cells(intRow, 1).TextToColumns _
            Destination:=.Cells(intRow, 1), _
            DataType:=xlDelimited, _
            TextQualifier:=xlDoubleQuote, _
            ConsecutiveDelimiter:=False, _
            Tab:=False, _
            Semicolon:=False, _
            Comma:=True, _
            Space:=False, _
            Other:=False, _
            FieldInfo:=Array(Array(1, 2), Array(2, 1), Array(3, 1), Array(4, 2), Array(5, 1), _
                Array(6, 1), Array(7, 1), Array(8, 1), Array(9, 1), Array(10, 1), Array(11, 1))