【问题标题】:Semicolon delimited UTF8 CSV Excel using VBA and sep=;分号分隔的 UTF8 CSV Excel 使用 VBA 和 sep=;
【发布时间】:2021-05-23 11:49:30
【问题描述】:

上下文: 我有一个 csv UTF8 文件,它是从 excel 工作簿中的值生成的。分隔符必须是分号,API 才能获取文件并处理数据。这必须自动完成,因为很多人都会使用这个宏。

问题: 我当前的设置是用逗号分隔符保存 csv UTF8 文件,由于 API,这对我不起作用。

解决方案: 我发现通过在单元格 A1 中添加“sep=;”我能够绕过 excel 中的当前设置,它会使用分号而不是逗号。

问题 2: 当我将文件直接保存在宏中时, sep=;不管用。如果用户单击 Excel 中的保存图标,分隔符将变为分号而不是逗号。

我试图理解为什么直接在宏中保存文件不会让我的分隔符切换到分号,而是手动保存。

谢谢!

【问题讨论】:

  • 您是否在控制该宏,或者它是否为您完成?我相信 A1 值“sep=;”不是 Excel 知道的(放置配置的地方很愚蠢),而是宏使用的东西。如果您可以控制宏,您可以粘贴保存文件的行吗?我认为这是自己创建文件和使用 Excel API 函数来创建文件的区别。
  • 嗨 MyICQ,感谢您的回答。要回答您的问题,是的,我可以控制宏。如果我手动把它放在 A1 中,那么我插入一个 lign 并添加 sep=;在单元格中,保存文档,删除 lign 并重新保存文档,它工作正常。我将它添加到我的宏中是因为目标是自动执行,但是当它在宏中时,它的行为就不一样了。就像在宏中完成与手动完成时 Excel 无法识别它一样。在宏中它不会将逗号切换为分号,实际上它只是告诉我当前的分隔符是什么。
  • 我还没有深入研究 VBA 来记录这一点,但其他人也在为此苦苦挣扎。这取决于是否保存以及更改区域设置。微软的笨重和愚蠢。我会手动编译这些行:stackoverflow.com/questions/7079009/…

标签: vba utf-8 csv


【解决方案1】:

这是我的团队成员找到的解决方案。

Sub SaveAsCSV(ByRef cells As Range, ByVal filename As String, Optional ByVal separator As String = ";")


Dim csv As String
Dim r As range, c As range
For Each r In cells.Rows
    For Each c In r.Columns
         If Application.IsText(c) Then
            csv = csv & Chr(34) & c & Chr(34)
         Else
            csv = csv & c
        End If
        csv = csv & separator
    Next
    csv = Left(csv, Len(csv) - Len(separator))
    csv = csv & Chr(13)
Next
    
Dim file As Object
Set file = CreateObject("adodb.stream")
file.Type = 2
file.Mode = 3
file.Charset = "UTF-8"
file.Open
file.WriteText (csv)
file.SaveToFile (filename)
file.Close
End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-14
    • 1970-01-01
    • 2012-11-09
    • 2017-09-02
    • 1970-01-01
    • 2017-11-23
    • 2014-06-03
    • 1970-01-01
    相关资源
    最近更新 更多