【问题标题】:Convert Xlsx to CSV UTF-8 format将 Xlsx 转换为 CSV UTF-8 格式
【发布时间】:2018-06-21 16:09:23
【问题描述】:

我想使用 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

【问题讨论】:

  • 参考this
  • VBA 的优势在于它与文档一起存储并在文档的上下文中运行。您似乎正在处理外部文件。使用 PowerShell 等不同的编程环境是否更合适?
  • stackoverflow.com/users/2226988/tom-blodget 如何使用 powershell 实现它

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


【解决方案1】:

简单地说:

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

更多信息:

【讨论】:

  • 因为我是 vba 新手,如何在不使用 ActiveWorkbook 的情况下将其集成到现有脚本中
  • 此解决方案仅适用于 office 2016 。我如何在 Office 2010 中实现这一目标
  • 一种解决方法在 Office 2016 之前 是将xlUnicodeText 分配给 FileFormat 参数,例如ThisWorkbook.SaveAs Filename:=ThisWorkbook.Path &amp; "\test.txt", FileFormat:=xlUnicodeText。此后,您可以手动更改分隔符或将文本文件保存为“test.csv”或其他任何内容。
  • 对于某些用户来说 xlCSVUTF8 未定义存在一些问题,即使在使用 Excel 2016(我正在使用)时也是如此。我已经搜索了一段时间,但没有找到任何有关如何修复它的信息。
【解决方案2】:

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

OpenXML SDK 使用起来有点困难,因此有一些包装器可以用来优化 Workbook 编程。 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 会丢弃几乎所有的元数据,并引入了对更多元数据的需求。与文件一起,您需要传达字符编码、每列的数据类型、是否有标题行、行终止符、字段分隔符(不总是逗号)、特定于文化的数字格式、引号字符(又名“文本限定符”)和引号字符转义机制。当您使用其文本导入向导时,您可以看到 Excel 必须提出的所有这些问题。

【讨论】:

    猜你喜欢
    • 2022-01-10
    • 1970-01-01
    • 1970-01-01
    • 2019-02-10
    • 2012-06-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-30
    • 2014-02-01
    相关资源
    最近更新 更多