Как открыть файл Excel, написанный с неправильной кодировкой символов в VBA - PullRequest
2 голосов
/ 26 мая 2011

Я прочитал файл Excel 2003 с помощью текстового редактора, чтобы увидеть язык разметки.Когда я открываю файл в Excel, он отображает неправильные символы.При проверке файла я вижу, что кодировка - Windows 1252 или что-то подобное.Если я вручную заменю это на UTF-8, мой файл откроется нормально.Хорошо, пока все хорошо, я могу исправить это вручную.

Теперь хитрость в том, что этот файл генерируется автоматически, что мне нужно обрабатывать его автоматически (без участия человека) с ограниченными инструментами на моем рабочем столе (нет Perl или другого языка сценариев).

Есть ли простой способ открыть этот файл XL в VBA с правильной кодировкой (и игнорировать кодировку, указанную в файле)?

Примечание, рабочая книга.ReloadAs не работает для меня, он выдает ошибку (и требует ручного действия, поскольку файл уже открыт).

Или это единственный способ исправить файл, чтобы пройти через некоторые обручи?Либо: введите текст, проверьте строку для кодирования строки, замените при необходимости, запишите каждую строку в новый файл ...;или экспортировать в 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

1 Ответ

0 голосов
/ 27 мая 2011

Ну, я думаю, вы можете сделать это из другой рабочей книги. Добавьте ссылку на объекты данных 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

Затем вызовите эту подпрограмму с путем к файлу с отключенной кодировкой.

...