Powershell - Excel 带有指定分隔符的 SaveAs csv
Powershell - Excel SaveAs csv with specified delimiter
大家下午好,
是否可以使用带有不同分隔符的 Powershell 保存 CSV 文件,在我的例子中是“§”。我正在使用以下脚本打开和更改 XLSX 文件中的项目,然后希望保存为“§”分隔的 CSV。查找和替换方法在我的情况下不起作用 ((Get-Content -Path $CSVfile).Replace(',','§') | Set-Content -Path $CSVfile2)
$Path = "C:\ScriptRepository\CQC\DataToLoad\"
$FileName = (Get-ChildItem $path).FullName
$FileName2 = (Get-ChildItem $path).Name
$CSVFile = "$Path$Filename2.csv"
$Excel = New-Object -ComObject Excel.Application -Property @{Visible =
$false}
$Excel.displayalerts=$False
$Workbook = $Excel.Workbooks.Open($FileName)
$WorkSheet = $WorkBook.Sheets.Item(2)
$Worksheet.Activate()
$worksheet.columns.item('G').NumberFormat ="m/d/yyyy"
$Worksheet.Cells.Item(1,3).Value = "Site ID"
$Worksheet.Cells.Item(1,4).Value = "Site Name"
$Worksheet.SaveAs($CSVFile,
[Microsoft.Office.Interop.Excel.XlFileFormat]::xlCSVWindows)
$workbook.Save()
$workbook.Close()
$Excel.Quit()
运行 以下命令将让您使用分隔符 §
保存 CSV 文件
Import-CSV filename.csv | ConvertTo-CSV -NoTypeInformation -Delimiter "§" | Out-File output_filename.csv
您应该检查 ImportExcel - import/export Excel 电子表格的 PowerShell 模块,没有 Excel。使用 powershell 可以更轻松地处理 excel 文件。
我知道这是一个较旧的 post 但这是我最近遇到的一个选项:
只需使用源位置和文件更新 e:\projects\dss\pse&g.xlsx
,并使用位置和文件名更新 file.csv
。最后是您的工作表,如果它的名称不同 [Sheet1$]
。
$oleDbConn = New-Object System.Data.OleDb.OleDbConnection
$oleDbCmd = New-Object System.Data.OleDb.OleDbCommand
$oleDbAdapter = New-Object System.Data.OleDb.OleDbDataAdapter
$dataTable = New-Object System.Data.DataTable
$oleDbConn.ConnectionString="Provider=Microsoft.ACE.OLEDB.12.0;Data
Source=e:\projects\dss\pse&g.xlsx;Extended Properties=Excel 12.0;Persist Security Info=False"
$oleDbConn.Open()
$oleDbCmd.Connection = $OleDbConn
$oleDbCmd.commandtext = “Select * from [Sheet1$]”
$oleDbAdapter.SelectCommand = $OleDbCmd
$ret=$oleDbAdapter.Fill($dataTable)
Write-Host "Rows returned:$ret" -ForegroundColor green
$dataTable | Export-Csv file.csv -Delimiter ';'
$oleDbConn.Close()
我正在使用 SaveAs(file.csv,6)
但无法更改分隔符。 Ishan 的解决方案也有效,但我想要更多的 OOB,因为这将在我自己跨不同系统的 SSIS 包中使用,并且这只是有效。 =)
大家下午好,
是否可以使用带有不同分隔符的 Powershell 保存 CSV 文件,在我的例子中是“§”。我正在使用以下脚本打开和更改 XLSX 文件中的项目,然后希望保存为“§”分隔的 CSV。查找和替换方法在我的情况下不起作用 ((Get-Content -Path $CSVfile).Replace(',','§') | Set-Content -Path $CSVfile2)
$Path = "C:\ScriptRepository\CQC\DataToLoad\"
$FileName = (Get-ChildItem $path).FullName
$FileName2 = (Get-ChildItem $path).Name
$CSVFile = "$Path$Filename2.csv"
$Excel = New-Object -ComObject Excel.Application -Property @{Visible =
$false}
$Excel.displayalerts=$False
$Workbook = $Excel.Workbooks.Open($FileName)
$WorkSheet = $WorkBook.Sheets.Item(2)
$Worksheet.Activate()
$worksheet.columns.item('G').NumberFormat ="m/d/yyyy"
$Worksheet.Cells.Item(1,3).Value = "Site ID"
$Worksheet.Cells.Item(1,4).Value = "Site Name"
$Worksheet.SaveAs($CSVFile,
[Microsoft.Office.Interop.Excel.XlFileFormat]::xlCSVWindows)
$workbook.Save()
$workbook.Close()
$Excel.Quit()
运行 以下命令将让您使用分隔符 §
保存 CSV 文件Import-CSV filename.csv | ConvertTo-CSV -NoTypeInformation -Delimiter "§" | Out-File output_filename.csv
您应该检查 ImportExcel - import/export Excel 电子表格的 PowerShell 模块,没有 Excel。使用 powershell 可以更轻松地处理 excel 文件。
我知道这是一个较旧的 post 但这是我最近遇到的一个选项:
只需使用源位置和文件更新 e:\projects\dss\pse&g.xlsx
,并使用位置和文件名更新 file.csv
。最后是您的工作表,如果它的名称不同 [Sheet1$]
。
$oleDbConn = New-Object System.Data.OleDb.OleDbConnection
$oleDbCmd = New-Object System.Data.OleDb.OleDbCommand
$oleDbAdapter = New-Object System.Data.OleDb.OleDbDataAdapter
$dataTable = New-Object System.Data.DataTable
$oleDbConn.ConnectionString="Provider=Microsoft.ACE.OLEDB.12.0;Data
Source=e:\projects\dss\pse&g.xlsx;Extended Properties=Excel 12.0;Persist Security Info=False"
$oleDbConn.Open()
$oleDbCmd.Connection = $OleDbConn
$oleDbCmd.commandtext = “Select * from [Sheet1$]”
$oleDbAdapter.SelectCommand = $OleDbCmd
$ret=$oleDbAdapter.Fill($dataTable)
Write-Host "Rows returned:$ret" -ForegroundColor green
$dataTable | Export-Csv file.csv -Delimiter ';'
$oleDbConn.Close()
我正在使用 SaveAs(file.csv,6)
但无法更改分隔符。 Ishan 的解决方案也有效,但我想要更多的 OOB,因为这将在我自己跨不同系统的 SSIS 包中使用,并且这只是有效。 =)