如何使用UTF-8在VBA(Excel)中保存带有BOM编码的文本文件(CSV)?

所以这是我最初的问题。 下面我的问题的答案 ,似乎是获得UTF-8(和没有BOM的UTF-8)编码的唯一解决scheme是使用ADODB.Stream对象。
在主题行中我的新问题的答案作为代码发布。

我正坐在这里,试图用一个VBAmacrosSave Excel工作表Save.CSV文件。
但是,我想知道是否我使用ADODB / ADODB.Stream或只是.SaveAs Fileformat:=xlCSV 我试图谷歌它,似乎我无法find哪个方法是“最好”的答案。 我需要用逗号分隔,UTF-8和双引号(“”)作为文本标识符。

是否正确,当您使用Fileformat:= ,不能保存为UTF-8,因为xlCSV没有使用该编码? 对,那是正确的。

此代码将转换您的Excel工作表,并将其保存为CSV文件,不带BOM编码的UTF-8。 我在一个网站上find了这个代码,所以我不会赞扬它。 没有BOM链接的CSV

 Sub CSVFileAsUTF8WithoutBOM() Dim SrcRange As Range Dim CurrRow As Range Dim CurrCell As Range Dim CurrTextStr As String Dim ListSep As String Dim FName As Variant Dim UTFStream As Object Dim BinaryStream As Object ' ask for file name and path FName = Application.GetSaveAsFilename("", "CSV File (*.csv), *.csv") ' prepare UTF-8 stream Set UTFStream = CreateObject("adodb.stream") UTFStream.Type = adTypeText UTFStream.Mode = adModeReadWrite UTFStream.Charset = "UTF-8" UTFStream.LineSeparator = adLF UTFStream.Open 'set field separator ListSep = "," 'set source range with data for csv file If Selection.Cells.count > 1 Then Set SrcRange = Selection Else Set SrcRange = ActiveSheet.UsedRange End If For Each CurrRow In SrcRange.Rows 'enclose each value with quotation marks and escape quotation marks in values CurrTextStr = "" For Each CurrCell In CurrRow.Cells CurrTextStr = CurrTextStr & """" & Replace(CurrCell.Value, """", """""") & """" & ListSep Next 'remove ListSep after the last value in line While Right(CurrTextStr, 1) = ListSep CurrTextStr = Left(CurrTextStr, Len(CurrTextStr) - 1) Wend 'add line to UTFStream UTFStream.WriteText CurrTextStr, adWriteLine Next 'skip BOM UTFStream.Position = 3 'copy UTFStream to BinaryStream Set BinaryStream = CreateObject("adodb.stream") BinaryStream.Type = adTypeBinary BinaryStream.Mode = adModeReadWrite BinaryStream.Open 'Strips BOM (first 3 bytes) UTFStream.CopyTo BinaryStream UTFStream.Flush UTFStream.Close 'save to file BinaryStream.SaveToFile FName, adSaveCreateOverWrite BinaryStream.Flush BinaryStream.Close End Sub