用VBA做工具的過程中,遇見這樣一個(gè)問題。使用FSO方式或者直接OPEN文件方式,生成的文本文件采用的字符集為當(dāng)前操作系統(tǒng)默認(rèn)字符集,不能選擇字符集類型。這樣的文件作為應(yīng)用程序的配置文件或者作為js代碼文件,常常會(huì)因?yàn)樽址皇荱TF-8,不能直接使用,需要利用記事本進(jìn)行一次人工的字符集轉(zhuǎn)換。特別麻煩。
近日發(fā)現(xiàn)有一辦法,可以較好的解決這個(gè)問題。即是采用ADO的方式,將字符串生成以指定字符集的流文件輸出。
函數(shù)代碼如下,VB或VBA中均可用。注意:需要添加對(duì)ADO 對(duì)象庫的引用。
ADO方式寫入
'功能:text保存為文件(ADO方式)
'輸入:輸出文件地址、內(nèi)容文本、字符集
'輸出:無
Sub WriteToTextFileADO(filePath As String, strContent As String, CharSet As String)
Set stm = New ADODB.Stream
stm.Type = 2 '以本模式讀取
stm.Mode = 3
stm.CharSet = CharSet
stm.Open
stm.WriteText strContent
'如果文件存在,刪除文件
If Len(Dir(filePath)) > 0 Then
Kill filePath
End If
stm.SaveToFile filePath, 2
stm.Flush
stm.Close
Set stm = Nothing
End Sub
使用示例:
Call WriteToTextFileADO(Sheets('channel-list').Cells(3, 5) & '\' & feedName & '.xml', feedXml, 'utf-8')
ADO方式讀取
'功能:讀取text文件(ADO方式)
'輸入:輸入文件地址、字符集
'輸出:無
Function ReadFromFileADO(filePath As String, CharSet As String) As String
Dim strRtn As String
Set stm = New ADODB.Stream
stm.Type = 2 '以本模式讀取
stm.Mode = 3
stm.CharSet = CharSet
stm.Open
stm.LoadFromFile filePath
strRtn = stm.ReadText
stm.Close
Set stm = Nothing
ReadFromFileADO = strRtn
End Function

|