Vb.net 互操作-将UTF-8.csv保存到.xlsx

Vb.net 互操作-将UTF-8.csv保存到.xlsx,vb.net,interop,excel-interop,Vb.net,Interop,Excel Interop,使用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.xlOpenXMLWo

使用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包含特殊字符,如u、ä或ö-在这些情况下,这些字符将被生成的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()

谢谢你的帮助

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
参数支持。此外,标识符值中存在转录错误;它应该是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

如果您最初有文本文件,您可以(如果需要)编写一个小代码来打开和读取内容(
system.io.file.ReadAllLines(“c:\blah.txt”
)然后检查内容,看看是否包含这些字符?我不确定您如何处理这些字符,是否愿意删除它们?不,很遗憾,我需要它们,就像excel中csv中的方式一样…thx,可以工作-因此.Open方法中的Origin参数似乎只引用操作系统。