如果没有BOM,我可以用UTF-8导出EXCEL数据吗?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (16)

我通过ExcelMacro(VBScript)导出MicrosoftExcel数据。因为文件是Lua脚本,所以我将其导出为UTF-8。在Excel中生成UTF-8的唯一方法是像这样使用adodb.stream

set fileLua = CreateObject("adodb.stream")
fileLua.Type = 2
fileLua.Mode = 3
fileLua.Charset = "UTF-8"
fileLua.Open
fileLua.WriteText("test")
fileLua.SaveToFile("Test.lua")
fileLua.flush
fileLua.Close

我想从Test.lua中消除BOM,但我不知道如何做到。(因为Test.lua有一些Unicode文本,所以我必须使用UTF-8格式。)

知道如何在EXCEL文件中制作没有BOM的UTF-8文件吗?提前谢谢。

提问于
用户回答回答于

有几种可能性:

  1. 将文本以UTF-8,Type=2的形式放入缓冲区,然后将Type=1(作为二进制)设置并写出。这可能会说服ADODB.Stream跳过添加BOM。
  2. 创建另一个缓冲区,类型为二进制,并使用CopyTo将数据从BOM之后的某个点复制到该缓冲区。
  3. 使用Scripting.FileSystemObject再次读取文件,修剪BOM,再写一次
用户回答回答于

我还有同样的问题:必须将数据从Excel(Office 2003,VBA6.5)导出到UTF-8编码文件。从你的问题中找到答案!下面是我的例子,在这里,我还使用了Boost的第2技巧(谢谢!)回答BOM。

Sub WriteUTF8WithoutBOM()
    Dim UTFStream As Object
    Set UTFStream = CreateObject("adodb.stream")
    UTFStream.Type = adTypeText
    UTFStream.Mode = adModeReadWrite
    UTFStream.Charset = "UTF-8"
    UTFStream.LineSeparator = adLF
    UTFStream.Open
    UTFStream.WriteText "This is an unicode/UTF-8 test.", adWriteLine
    UTFStream.WriteText "First set of special characters: öäåñüûú€", adWriteLine
    UTFStream.WriteText "Second set of special characters: qwertzuiopõúasdfghjkléáûyxcvbnm\|Ä€Í÷×äðÐ[]í³£;?¤>#&@{}<;>*~¡^¢°²`ÿ´½¨¸0", adWriteLine

    UTFStream.Position = 3 'skip BOM

    Dim BinaryStream As Object
    Set BinaryStream = CreateObject("adodb.stream")
    BinaryStream.Type = adTypeBinary
    BinaryStream.Mode = adModeReadWrite
    BinaryStream.Open

    'Strips BOM (first 3 bytes)
    UTFStream.CopyTo BinaryStream

    'UTFStream.SaveToFile "d:\adodb-stream1.txt", adSaveCreateOverWrite
    UTFStream.Flush
    UTFStream.Close

    BinaryStream.SaveToFile "d:\adodb-stream2.txt", adSaveCreateOverWrite
    BinaryStream.Flush
    BinaryStream.Close
End Sub

扫码关注云+社区