簡體   English   中英

如何打開 Excel 文件在 VBA 中使用不正確的字符編碼寫入

[英]How to open Excel file written with incorrect character encoding in VBA

我使用文本編輯器閱讀了 Excel 2003 文件以查看一些標記語言。 當我在 Excel 打開文件時,它顯示不正確的字符。 在檢查文件時,我看到編碼是 Windows 1252 或類似的。 如果我用 UTF-8 手動替換它,我的文件可以正常打開。 好的,到目前為止一切順利,我可以手動更正。

現在的訣竅是這個文件是自動生成的,我需要使用桌面上的有限工具(沒有 perl 或其他腳本語言)自動處理它(無需人工交互)。

有沒有什么簡單的方法可以在 VBA 中以正確的編碼打開這個 XL 文件(並忽略文件中指定的編碼)?

請注意,Workbook.ReloadAs 對我來說不是 function,它會因錯誤而退出(並且需要手動操作,因為文件已經打開)。

或者是通過一些箍將文件更正為 go 的唯一方法? 要么:輸入文本,檢查編碼字符串的行,如果需要替換,將每一行寫入新文件......; 或者導出到csv,然后再從csv導入指定編碼,另存為xls?

任何提示表示贊賞。

編輯:

ADODB 對我不起作用(XL 表示用戶定義類型,未定義)。

我用一種解決方法解決了我的問題:

name2 = Replace(name, ".xls", ".txt")
Set wb = Workbooks.Open(name, True, True) ' open read-only
Set ws = wb.Worksheets(1)
ws.SaveAs FileName:=name2, FileFormat:=xlCSV
wb.Close False                    ' close workbook without saving changes
Set wb = Nothing                  ' free memory
Workbooks.OpenText FileName:=name2, _
                   Origin:=65001, _
                   DataType:=xlDelimited, _
                   Comma:=True

好吧,我認為您可以從另一個工作簿中做到這一點。 添加對 AcitiveX 數據對象的引用,然后添加以下子項:

Sub Encode(ByVal sPath$, Optional SetChar$ = "UTF-8")

    Dim stream As ADODB.stream
    Set stream = New ADODB.stream

    With stream
        .Open
        .LoadFromFile sPath ' Loads a File
        .Charset = SetChar  ' sets stream encoding (UTF-8)
        .SaveToFile sPath, adSaveCreateOverWrite
        .Close
    End With

    Set stream = Nothing
    Workbooks.Open sPath
End Sub

然后使用關閉編碼的文件路徑調用此子程序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM