使用逗号分隔符而不是分号将excel保存为csv

时间:2017-06-20 13:25:02

标签: excel powershell csv

我有一个脚本,可以从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将以“;”分隔。

3 个答案:

答案 0 :(得分:4)

您需要为$True Local SaveAs参数传递[Type]::Missing才能尊重控制面板设置。

  

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

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

为了跳过此方法的可选参数,您可以使用此answer中所述的<xsl:for-each-group select="EVENTS/ROW" group-by="EVENT_ID"> <xsl:variable name="B" select="current-group()[EVENT_TYPE='B']/PRICE/ROW/@EVENT_PRICE"/> <xsl:variable name="P" select="current-group()[EVENT_TYPE='P']/PRICE/ROW/@EVENT_PRICE"/> <xsl:variable name="diff" select="translate($B, ',', '.') - translate($P, ',', '.')" /> <EVENT_ID> <xsl:value-of select="current-grouping-key()" /> </EVENT_ID> <DIFF> <xsl:value-of select="format-number($diff, '0.00')" /> </DIFF> </xsl:for-each-group>

答案 1 :(得分:0)

尝试:

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

修改 - 解释

23 is the xlCSVWindows enumeration。这听起来像是在xlCSV之后。

答案 2 :(得分:0)

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

AVPlayer