excel - 将 TXT 文件保存为不带 BOM 的 UTF-8
问题描述
一切正常,但是代码用 BOM 用 UTF-8 创建了一个 txt 文件,我想用 UTF-8 创建一个 txt,但没有 BOM。
我怎样才能做到这一点?
Option Explicit
Sub SaveWorkSheetAsCSV()
ActiveSheet.Buttons.Delete
Dim FolderPath As String
FolderPath = "C:\Users\" & Environ("USERNAME") & "\Test"
Dim FileName As String: FileName = Format(Now, "yyyymmdd-hh.mm ") & " Test file"
Dim sws As Worksheet: Set sws = ThisWorkbook.Worksheets(4)
Application.ScreenUpdating = False
sws.Copy
Dim dwb As Workbook: Set dwb = ActiveWorkbook
Application.DisplayAlerts = False
dwb.SaveAs FolderPath & "\" & FileName & ".txt", xlCSVUTF8, Local:=True
Application.DisplayAlerts = True
dwb.Close SaveChanges:=False
Application.ScreenUpdating = True
ThisWorkbook.FollowHyperlink FolderPath
End Sub
解决方案
要删除 BOM,请将文件读入 ADODB 流对象,将位置移动 3 个字节,然后使用另一个流将字节保存到新文件中。
dwb.Close SaveChanges:=False
Call RemoveBOM(FolderPath, filename) ' add this line to your code
ThisWorkbook.FollowHyperlink FolderPath
添加这个子
Sub RemoveBOM(FolderPath As String, filename As String)
Dim objStreamUTF8, objStreamUTF8NoBOm
Set objStreamUTF8 = CreateObject("ADODB.Stream")
Set objStreamUTF8NoBOm = CreateObject("ADODB.Stream")
With objStreamUTF8
.Charset = "UTF-8"
.Open
.LoadFromFile FolderPath & "\" & filename & ".txt"
.Type = 2 'adTypeText
.Position = 3
End With
With objStreamUTF8NoBOm
.Type = 1 'adTypeBinary
.Open
objStreamUTF8.CopyTo objStreamUTF8NoBOm
.SaveToFile FolderPath & "\" & filename & "_noBOM.txt", 2 'adSaveCreateOverWrite
End With
objStreamUTF8.Close
objStreamUTF8NoBOm.Close
End Sub
推荐阅读
- ios - 我应该如何等待所有数据完全下载并显示在 TableView 上?
- reactjs - 触发 redux 操作后如何在组件内部执行操作?
- blockchain - Libra VM (Move) 是图灵完备的语言吗?
- python - 对具有相同内容的行进行分组和求和
- ruby-on-rails - Hstore Query 使用 ruby on rails 查找与任何数组元素匹配的记录
- python - 哪个 SKLearn 接口定义了 .fit、.predict 等
- c# - Selenium 无法在日期时间文本框中发送密钥
- visual-studio - Visual Studio 2019 内存分析器工具将托管堆中的所有对象列为 UNKNOWN
- c# - 在创建之前强制搜索
- testing - 对于新的测试用例,如何阻止 Tester 字段自动默认为创建卡片的人的名字?