【问题标题】:Powershell Excel - Save file with Encoding as Unicode UTF-8Powershell Excel - 将编码保存为 Unicode UTF-8 的文件
【发布时间】:2016-11-08 00:06:30
【问题描述】:

我有以下 Powershell 脚本,它非常适合将 excel 文件转换为 csv。我遇到了最后一个问题,当在特殊字符上运行时,这些字符正在丢失或替换。为了解决这个问题,我想在保存到 csv 时保存使用 UTF-8 编码的文件。

阅读Microsoft documentation 后,我相信我需要更改 .SaveAs 子句中的一个参数来对文件进行编码,但是我找不到这个工作的示例。

为了让 csv 文件以所需的编码保存,要添加的正确参数是什么?

$InputDirectory = 'Files are here'
$OutputDirectory = 'Files go here'

#Function to change excel files to csv

Function ExcelCSV ($File)
{
$Excel = New-Object -ComObject Excel.Application
$Excel.Visible = $false
$Excel.DisplayAlerts = $false
$wb = $Excel.Workbooks.Open($File.FullName)
foreach ($ws in $wb.Worksheets)
    {
        $ws.SaveAs(("{0}{1}" -f $OuputDirectory,$Files.Name -replace ‘.xlsx$’,"") + ".csv", 6)
    }
    $wb = $Excel.Workbooks.Close()
    $Excel.Quit()

    }


#Looping through files, checking their extensions, converting excel to csv.

foreach ($Files in (Get-ChildItem -Path $InputDirectory))
    {

    $extn = [IO.Path]::GetExtension($Files)

    if ($extn -eq ".xlsx")

    {
    ExcelCSV($Files)
    }

    Elseif ($extn -eq ".xls")

    {
    ExcelCSV($Files)
    }

    Else
    {
    Copy-Item ("{0}{1}" -f $InputDirectory,$Files.Name) ("{0}{1}" -f $OuputDirectory,$Files.Name)
    }
    }

【问题讨论】:

    标签: excel csv powershell utf-8


    【解决方案1】:

    如果没有一些变通方法,我认为这无法在 Excel 中完成。这是我在遇到该问题时创建的:

    Export-ExcelCSV.ps1

    在这里,每张工作表都转换为 CSV。

    此解决方案导出为 UnicodeText。 CRLF 可以在下一行传递,但在 " 内(这对某些 CSV 阅读器来说可能是个问题)。唯一的小问题是它会杀死或运行 Excel,而我没有找到解决方法。

    【讨论】:

    • 我刚刚在几行代码中为您提供了一个可行的解决方案,该解决方案可以生成有效的 CSV 文件。您的态度在 IMO 中被夸大了,与 powershell 本身无关。无论如何,你能分享你使用的python代码吗?
    • 如果你想要python,为什么这个问题会被标记为powershell
    • @gravity 我想要一个转换文件的解决方案。我认为 powershell 是一个很好的解决方案。在试用后,我意识到它不能以快速/简单/明智的方式完成,并且需要像上面提出的那样的解决方法。如果 Powershell 可以使用 .SaveAs 函数轻松完成此操作,它会工作得很好,但可惜它做不到。
    • @Tminer,这不是 powrshell 的东西,而是 Excel 的东西——似乎 Excel 没有正确实现这个功能,或者至少它不直观。来自pandas 的人们可以实现任何类型的逻辑来解决这个问题。为了在任意系统上使用您的解决方案,您必须至少安装 3 个东西 - python、gem 和 pandas。这些东西可能需要在企业环境(如代理服务器)中进行额外配置,并且由于 Windows 上的 Python 文化并不那么强大,工程师通常默认不知道这些东西。另一方面,Powershell 无需任何设置即可在任何地方工作。
    • @Tminer,此外,更不用说其他潜在问题的数量,如 python/库冲突、网络问题等。在这种情况下,Powershell 是完成这项工作的正确工具,也是最具弹性的选择。
    【解决方案2】:

    6 是保存为 CSV ANSI 的格式值 - 将其更改为 62 以保存为 CSV UTF-8。

    格式和值的完整列表在这里https://docs.microsoft.com/en-us/office/vba/api/excel.xlfileformat

    【讨论】:

      猜你喜欢
      • 2014-10-27
      • 1970-01-01
      • 2013-09-12
      • 1970-01-01
      • 1970-01-01
      • 2018-01-14
      • 1970-01-01
      • 2011-02-01
      相关资源
      最近更新 更多