Interop - 将 UTF-8 .csv 保存到 .xlsx
Interop - save UTF-8 .csv to .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()
感谢您的帮助!
Workbooks.Open Method 的 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)
正在尝试指定 code page identifier. This is supported by the Origin
parameter of the Workbooks.OpenText Method。此外,您在标识符值中存在转录错误;它应该是 65001 而不是 61005。
下面是一个使用 then 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
使用 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()
感谢您的帮助!
Workbooks.Open Method 的 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)
正在尝试指定 code page identifier. This is supported by the Origin
parameter of the Workbooks.OpenText Method。此外,您在标识符值中存在转录错误;它应该是 65001 而不是 61005。
下面是一个使用 then 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