我通过Excel宏(VBScript)导出Microsoft Excel数据.因为文件是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
Run Code Online (Sandbox Code Playgroud)
我想从Test.lua中消除BOM,但我不知道如何.(因为Test.lua有一些unicode文本,我必须使用UTF-8格式.)
你知道如何在excel文件中制作没有BOM的UTF-8文件吗?提前致谢.
它可能很简单,这是我尝试过的:
Set objStream = CreateObject("ADODB.Stream")
Set objStreamNoBOM = CreateObject("ADODB.Stream")
With objStream
.Open
.Charset = "UTF-8"
.WriteText "aaaaaa"
.Position = 0
End With
With objStreamNoBOM
'.Charset = "Windows-1252" ' WORK
.Charset = "UTF-8" ' DOESN'T WORK!!
.Open
.Type = 2
.WriteText objStream.ReadText
.SaveToFile "toto.php", 2
.Close
End With
objStream.Close
Run Code Online (Sandbox Code Playgroud)
如果字符集是UTF-8,那么文件的开头就有ï».
有关如何使用UTF-8和没有BOM保存文件的任何想法?
我为这个愚蠢的问题道歉.我正在维护旧的遗留VB6代码,我有一个实际工作的功能 - 但我根本无法弄清楚它为何起作用,或者为什么没有它就无法运行代码.
基本上,此函数读取UTF-8文本文件并在DHTMLEdit组件中显示其内容.它的方式是,它将整个文件读入一个字符串,然后使用ANSI代码页将其从双字节转换为多字节字符串,然后将其转换回双字节.
使用这整个精心设计的机制可以使组件同时正确显示包含希伯来语,阿拉伯语,泰语和中文的页面.不使用此代码使文本看起来像被转换为ASCII,显示字母曾经的各种标点符号.
我不明白的是:
[码]
Private Declare Function MultiByteToWideChar Lib "kernel32" (ByVal codePage As Long, ByVal dwFlags As Long, ByVal lpMultiByteStr As Long, ByVal cchMultiByte As Long, ByVal lpWideCharStr As Long, ByVal cchWideChar As Long) As Long
Private Declare Function WideCharToMultiByte Lib "kernel32" (ByVal codePage As Long, ByVal dwFlags As Long, ByVal lpWideCharStr As Long, ByVal cchWideChar As Long, ByVal lpMultiByteStr As Long, ByVal cchMultiByte As Long, ByVal lpDefaultChar As Long, lpUsedDefaultChar As Long) …
Run Code Online (Sandbox Code Playgroud) 我需要将字符串HTML从西里尔和拉丁符号的混合转换为UNICODE.
我尝试了以下方法:
Public HTML As String
Sub HTMLsearch()
GetHTML ("http://nfs.mobile.bg/pcgi/mobile.cgi?act=3&slink=6jkjov&f1=1")
MsgBox HTML
HTML = StrConv(HTML, vbUnicode)
MsgBox HTML
End Sub
Function GetHTML(URL As String) As String
With CreateObject("MSXML2.XMLHTTP")
.Open "GET", URL, False
.Send
HTML = .ResponseText
End With
End Function
Run Code Online (Sandbox Code Playgroud)
您可以看到StrConv之前和之后的内容.如果您想在文件中获取html,可以使用以下代码:
Public HTML As String
Sub HTMLsearch()
GetHTML ("http://nfs.mobile.bg/pcgi/mobile.cgi?act=3&slink=6jkjov&f1=1")
Dim path As String
path = ThisWorkbook.path & "\html.txt"
Open path For Output As #1
Print #1, HTML
Close #1
HTML = StrConv(HTML, vbUnicode)
path = ThisWorkbook.path & "\htmlUNICODE.txt"
Open path …
Run Code Online (Sandbox Code Playgroud) 有一个项目需求,我们需要检查单元格的货币类型。
我在这个论坛中遇到了类似的问题(如何检查单元格格式是否为货币?)。它解释了如何对$
符号执行此操作。但我无法$
在 Visual Basic 编辑器中将该符号替换为其他货币符号(例如印度卢比、欧元等)。为了在 VBE 中使用其他符号,我尝试了以下操作:
但它是像?
在VBE中一样粘贴的。
请帮我在 VBE 中添加货币符号。如果上述方法不可行,请建议一种识别单元格货币类型的方法。
例:
Open "C:\...\someFile.txt" For Output As #1
Print #1, someString
Close #1
Run Code Online (Sandbox Code Playgroud)
如果someString包含非ASCII字符,它们如何编码?(UTF-8,Latin-1,一些代码页取决于Windows语言环境,...)
在我的系统上,上面的代码似乎使用的是Windows-1252,但由于Open语句的文档和Print#语句的文档都没有提到字符串编码,我无法确定这是否是某些内置默认值或某些系统设置,我正在寻找一个明确的答案.
注意:感谢大家建议如何使用特定编码创建文件的替代方法(ADODB.Stream,Scripting.FileSystemObject等) - 感谢他们.然而,这个问题是关于理解遗留代码的确切行为,所以我只对上面引用的代码的行为感兴趣.
我有以下Excel VBA脚本,在Excel for Mac 2011中使用该脚本将 Excel 文件的所有工作表导出到 .csv 文件。
Sub save_all_csv()
On Error Resume Next
Dim ExcelFileName As String
ExcelFileName = ThisWorkbook.Name
For Each objWorksheet In ThisWorkbook.Worksheets
ExcelFileNameWithoutExtension = RemoveExtension(ExcelFileName)
CsvFileName = ExcelFileNameWithoutExtension & "__" & objWorksheet.Name & ".csv"
Application.DisplayAlerts = False
objWorksheet.SaveAs Filename:="data:storage:original_excel:" & CsvFileName, FileFormat:=xlCSV, CreateBackup:=False
Application.DisplayAlerts = True
Next
Application.DisplayAlerts = False
Application.Quit
End Sub
Function RemoveExtension(strFileName As String)
strFileName = Replace(strFileName, ".xlsx", "")
strFileName = Replace(strFileName, ".xls", "")
RemoveExtension = strFileName
End Function …
Run Code Online (Sandbox Code Playgroud)