Используя 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()
Спасибо за любую помощь!
нет, к сожалению, они мне нужны именно такие, как в CSV в Excel ....
Параметр 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, похоже, относится только к операционной системе.
Если у вас изначально есть текстовый файл, вы можете (при необходимости) написать небольшой код для открытия и чтения содержимого (
system.io.File.ReadAllLines("c:\blah.txt"
) и проверить содержимое, чтобы увидеть, содержит ли он какие-либо из этих символов? Что вы с этим делаете, я не уверен, вы бы вообще были счастливы удалить их?