将Xlsx转换为CSV UTF-8格式

时间:2018-01-12 08:20:23

标签: excel vba utf-8 character-encoding export-to-csv

我想使用vb脚本或宏将 XLXS文件转换为CSV UTF-8格式

    if WScript.Arguments.Count < 2 Then
    WScript.Echo "Error! Please specify the source path and the destination. Usage: XlsToCsv SourcePath.xls Destination.csv"
    Wscript.Quit
End If
Dim oExcel
Set oExcel = CreateObject("Excel.Application")
Dim oBook
Set oBook = oExcel.Workbooks.Open(Wscript.Arguments.Item(0))
oBook.SaveAs WScript.Arguments.Item(1), 6
oBook.Close False
oExcel.Quit
WScript.Echo "Done"enter code here

上述脚本适用于普通格式。

请帮助我转换为UTF-8格式

我也尝试了以下代码,但它会转换为垃圾字符

Public Sub convert_UnicodeToUTF8()

   Dim parF1, parF2 As String

   parF1 = "C:\shrangi\SX_Hospital.xlsx"

   parF2 = "C:\shrangi\SX_Hospital.csv"

    Const adSaveCreateOverWrite = 2
    Const adTypeText = 2

    Dim streamSrc, streamDst ' Source / Destination
    Set streamSrc = CreateObject("ADODB.Stream")
    Set streamDst = CreateObject("ADODB.Stream")
    streamDst.Type = adTypeText
    streamDst.Charset = "UTF-8"
    streamDst.Open

    With streamSrc
        .Type = adTypeText
        .Charset = "UTF-8" 
        .Open
        .LoadFromFile parF1
        .copyTo streamDst
        .Close
    End With
    streamDst.SaveToFile parF2, adSaveCreateOverWrite
    streamDst.Close
    Set streamSrc = Nothing
    Set streamDst = Nothing

End Sub

2 个答案:

答案 0 :(得分:1)

简单地:

ActiveWorkbook.SaveAs Filename:="C:\yourPath\yourFileName.csv", FileFormat:=xlCSVUTF8

更多信息:

答案 1 :(得分:0)

由于您要将外部文件转换为外部文件,因此您不需要在Excel中使用VBA执行此操作。这开辟了一些可能性。使用OpenXML SDK,您甚至不需要Excel。

OpenXML SDK有点难以使用,所以有一些包装器可以优化工作簿编程。 EPPlus有一个名为PSExcel的PowerShell包装器。它使PowerShell中的任务变得非常简单

一次性设置,通常作为管理员:

Install-Module PSExcel

每个PowerShell会话一次:

Import-Module PSExcel

然后:

Import-XLSX 'C:\shrangi\SX_Hospital.xlsx' | Export-CSV 'C:\shrangi\SX_Hospital.csv' -Encoding UTF8

对于简单的工作簿,这就是你所需要的。

关于CSV的附注:从xlsx转换为csv会抛出几乎所有元数据,并引入了对更多元数据的需求。与文件一起,您需要传达字符编码,每列的数据类型,是否有标题行,行终止符,字段分隔符(不总是逗号),特定于文化的数字格式,引号字符(又名&#34;文本限定符&#34;),以及引号字符转义机制。您可以在使用文本导入向导时看到Excel必须询问的所有问题。