Interop - сохранить UTF-8 .csv в .xlsx - PullRequest
0 голосов
/ 02 мая 2018

Использование Excel.Interop Я хочу открыть файл .txt или .csv и сохранить его как файл Excel. В большинстве случаев этот простой код работает:

Dim Exl As New Excel.Application()
Dim wb1 As Excel.Workbook = Exl.Workbooks.Open("C:\MyFile.txt", Format:=4)
wb1.SaveAs("C:\MyFile.xlsx", FileFormat:=Excel.XlFileFormat.xlOpenXMLWorkbook)
wb1.Close()
Exl.Quit()

Однако иногда преобразуемый .txt / .csv содержит специальные символы, такие как ü, ä или ö - и в этих случаях эти символы заменяются другими символами в полученном файле Excel. Проблема заключается в том, что входные файлы имеют кодировку UTF-8. Поэтому я попытался изменить вторую строку на

Dim wb1 As Excel.Workbook = Exl.Workbooks.Open("C:\MyFile.txt", Format:=4, Origin:=61005)

, который тоже не работает.

Другой вариант, с которым я столкнулся, - просто использовать OpenText вместо Open, однако теперь я получаю исключение:

    Dim wb1 As Excel.Workbooks
    wb1.OpenText("C:\MyFile.txt")
    Exl.wb1.SaveAs("C:\MyFile.xlsx", FileFormat:=Excel.XlFileFormat.xlOpenXMLWorkbook)
    wb1.Close()
    Exl.Quit()

Спасибо за любую помощь!

1 Ответ

0 голосов
/ 02 мая 2018

Параметр Origin метода Workbooks.Open * должен быть значением из перечисления XlPlatform;

 Name          Value               Description  
 xlMacintosh     1                 Macintosh  
 xlMSDOS         3                 MS-DOS 
 xlWindows       2                 Microsoft Windows

Ваш код:

wb1 As Excel.Workbook = Exl.Workbooks.Open("C:\MyFile.txt", Format:=4, Origin:=61005)

пытается указать идентификатор кодовой страницы . Это поддерживается параметром Origin метода Workbooks.OpenText . Кроме того, у вас есть ошибка транскрипции в значении идентификатора; это должно быть 65001, а не 61005.

Вот пример использования тогда метода OpenText.

Sub Example()
    Const UTF8CodePage As Int32 = 65001
    Dim app As New Excel.Application
    app.Visible = True
    Dim filePath As String = "F:\TestUTF_8Quoted.txt"
    Dim fi As New IO.FileInfo(filePath)
    app.Workbooks.OpenText(Filename:=filePath, Semicolon:=True, Origin:=UTF8CodePage, TextQualifier:=Excel.XlTextQualifier.xlTextQualifierDoubleQuote)
    Dim wb As Excel.Workbook = app.Workbooks.Item(fi.Name)
    wb.Close(False)
    app.Quit()
End Sub
...