【问题标题】:Saving excel as csv with comma delimiter instead of semicolon使用逗号分隔符而不是分号将 excel 保存为 csv
【发布时间】:2017-11-23 01:48:05
【问题描述】:

我有一个从 xls 转换为 csv 的脚本。它非常简单,只需使用 Excel 对象打开 xls 并将其保存为 csv:

cls Remove-Item *.csv $stringBuilder = New-Object System.Text.StringBuilder $objExcel = New-Object -ComObject Excel.Application $objExcel.Visible = $false $Tab = [char]9 $Pestana = 2
# Lee todos los excel de esta carpet $ListadoExcel = Get-ChildItem  -filter "*.xlsx" foreach ($Linea in  $ListadoExcel) {
    $Archivo = $Linea.FullName
    $ArchivoCorto = $Archivo.Replace('.xlsx','')
    "Procesando: "+$Archivo
    $WorkBook = $objExcel.Workbooks.Open($Archivo,$null,$True) #Solo lectura
    #Leemos la tercera pestaña
    $WorkSheet = $WorkBook.sheets.item($Pestana)
    $WorkSheet.SaveAs($ArchivoCorto+".csv", 23)
    #"Filas leidas: "+$Filas
    #$range = $WorkSheet.UsedRange
    #$WorkSheet.Range('B5').Text

    #$stream.WriteLine($WorkSheet.UsedRange.Cells.Item.Text)
    $WorkBook.Close($False) #Sin guardar }

$objExcel.Quit()

奇怪的是,当我想用​​;分隔时,结果csv用,分隔。

如果我这样做(Get-Culture).TextInfo.ListSeparator,我会得到;

我在控制面板的区域和语言设置中也有相同的分隔符。

如果我使用相同的 Excel 并手动保存,则生成的 csv 用“;”分隔。

【问题讨论】:

  • 您是否尝试过使用Export-Csv?它允许不同的分隔符?
  • @rrirower 我做了,但我想我必须先做 Import-csv。 Import-csv .\myfile.csv -Delimiter ',' 它没有给我正确的内容。

标签: excel powershell csv


【解决方案1】:

您需要为SaveAsLocal 参数传递$True 以使其尊重控制面板设置。

true 根据 Excel 的语言保存文件(包括控制面板设置)。 false(默认)根据 Visual Basic for Applications (VBA) 的语言保存文件。

https://msdn.microsoft.com/en-us/library/microsoft.office.tools.excel.worksheet.saveas.aspx

为了跳过此方法的可选参数,您可以使用[Type]::Missing,如answer中所述。

【讨论】:

  • 我想试试这个,你能帮我在没有定义除nameFile、Format和Local之外的任何其他参数(如密码)的情况下使用SaveAs功能吗?
【解决方案2】:

由于您无法更改 Excel 中的分隔符(您必须在控制面板的区域和语言设置中更改系统范围), 系统列表分隔符无关紧要;您需要解决 该限制 Excel 的限制,以便为特定文件获取不同的分隔符。使用上面的代码将文件保存为“CSV”后,您需要执行以下操作:

$Worksheet = Import-CSV -delimiter ','
Export-CSV -InputObject $Worksheet -Path =path-to-csv-file= -Delimiter ';' -NoTypeInformation

【讨论】:

  • 当我做 Import-csv -delimiter ',' 时它没有打印正确的内容,它似乎在打印“,”之前的第一个单词
  • 然后,您需要提供有关文件内容的更多信息。编辑您的问题以显示文件中的一些数据。另外,你为什么要打印任何东西?您需要做的就是读入并使用新的分隔符将其写出,如上所示。
【解决方案3】:

试试:

$WorkSheet.SaveAs($ArchivoCorto+".csv", 6)

编辑 - 解释

23 is the xlCSVWindows enumeration。听起来你在关注xlCSV

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-05
    • 1970-01-01
    • 1970-01-01
    • 2018-04-02
    • 2015-03-15
    相关资源
    最近更新 更多