Взаимодействие - сохранение .csv UTF-8 в .xlsx

Используя 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()

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

Если у вас изначально есть текстовый файл, вы можете (при необходимости) написать небольшой код для открытия и чтения содержимого (system.io.File.ReadAllLines("c:\blah.txt") и проверить содержимое, чтобы увидеть, содержит ли он какие-либо из этих символов? Что вы с этим делаете, я не уверен, вы бы вообще были счастливы удалить их?

Chicken 02.05.2018 17:11

нет, к сожалению, они мне нужны именно такие, как в CSV в Excel ....

dunkleosteus 02.05.2018 17:15
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
2
553
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Параметр Origin в Рабочие тетради. Открытый метод должен быть значением из перечисления 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 Method. Кроме того, у вас есть ошибка транскрипции в значении идентификатора; это должно быть 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

спасибо, это работает - поэтому параметр Origin в методе .Open, похоже, относится только к операционной системе.

dunkleosteus 03.05.2018 09:56

Другие вопросы по теме