按列对 excel CSV 进行排序,保存并关闭 - 使用批处理或 powershell
Sorting excel CSV by column, saving and closing - with batch or powershell
我正在使用 bat 文件打开名为 'YYYYMMDD_foo.csv' 的每日生成的 Excel 文件,使用批处理 - 这很好用,但我也在尝试对 Excel 进行分组排序按其中一列归档 - 例如 C 列(部门)。
ID, Name, Dept.
001, Greg, Maths
002, Sue, Operations
003, Bob, Academics
004, Joan, Operations
如何批量完成这种排序,以便打开文件,然后这样排序?
ID, Name, Dept.
003, Bob, Academics
001, Greg, Maths
002, Sue, Operations
004, Joan, Operations
谢谢你
编辑:我试图用 Powershell 和 Batch 找到解决方案 - 我将 post 下面的脚本,希望能重新打开我的问题。
Powershell:
$FilePath = "C:\exceltest191203Records.csv"
$rawDate = Get-Date
$year = $rawDate.toString('yyyy')
$month = $rawDate.toString('mm')
$day = $rawDate.toString('dd')
$objExcel = New-Object -ComObject Excel.Application
$objExcel.Visible = $true
$objExcel.DisplayAlerts = $true
$WorkBook = $objExcel.Workbooks.Open($FilePath)
$WorkBook | Sort-Object Program
$WorkBook.Save()
Start-Sleep -s 30
批次:
@echo off
SET dY=%DATE:~0,4%
SET dM=%DATE:~5,2%
SET dD=%DATE:~8,2%
SET searchString=%dY%%dM%%dD%Records.csv
SET thePath=C:\exceltest\
echo %thePath%%searchString%
start Excel.exe %thePath%%searchString%
PAUSE
不需要使用Excel对List进行排序。这可以直接使用 Powershell 完成。
下面的示例读取文件,按列 "Dept." 排序并将其写入可直接在 Excel 中打开的新 CSV 文件。
#Make sure to use MM for Month, mm is Minutes
$dateString = (Get-Date).ToString('yyyyMMdd')
$filepath= "C:\temp\" + $dateString + "_foo.csv"
$list = Import-Csv -LiteralPath $filepath -Delimiter ","
$outPutFilePath = "C:\temp\"+$dateString+"_sorted.csv"
#sort the List and Export it into CSV-File. Use ; so excel will directly open it correctly
$list | Sort-Object -Property "Dept." | Export-Csv -LiteralPath $outPutFilePath -Delimiter ";" -NoTypeInformation
我正在使用 bat 文件打开名为 'YYYYMMDD_foo.csv' 的每日生成的 Excel 文件,使用批处理 - 这很好用,但我也在尝试对 Excel 进行分组排序按其中一列归档 - 例如 C 列(部门)。
ID, Name, Dept.
001, Greg, Maths
002, Sue, Operations
003, Bob, Academics
004, Joan, Operations
如何批量完成这种排序,以便打开文件,然后这样排序?
ID, Name, Dept.
003, Bob, Academics
001, Greg, Maths
002, Sue, Operations
004, Joan, Operations
谢谢你
编辑:我试图用 Powershell 和 Batch 找到解决方案 - 我将 post 下面的脚本,希望能重新打开我的问题。
Powershell:
$FilePath = "C:\exceltest191203Records.csv"
$rawDate = Get-Date
$year = $rawDate.toString('yyyy')
$month = $rawDate.toString('mm')
$day = $rawDate.toString('dd')
$objExcel = New-Object -ComObject Excel.Application
$objExcel.Visible = $true
$objExcel.DisplayAlerts = $true
$WorkBook = $objExcel.Workbooks.Open($FilePath)
$WorkBook | Sort-Object Program
$WorkBook.Save()
Start-Sleep -s 30
批次:
@echo off
SET dY=%DATE:~0,4%
SET dM=%DATE:~5,2%
SET dD=%DATE:~8,2%
SET searchString=%dY%%dM%%dD%Records.csv
SET thePath=C:\exceltest\
echo %thePath%%searchString%
start Excel.exe %thePath%%searchString%
PAUSE
不需要使用Excel对List进行排序。这可以直接使用 Powershell 完成。 下面的示例读取文件,按列 "Dept." 排序并将其写入可直接在 Excel 中打开的新 CSV 文件。
#Make sure to use MM for Month, mm is Minutes
$dateString = (Get-Date).ToString('yyyyMMdd')
$filepath= "C:\temp\" + $dateString + "_foo.csv"
$list = Import-Csv -LiteralPath $filepath -Delimiter ","
$outPutFilePath = "C:\temp\"+$dateString+"_sorted.csv"
#sort the List and Export it into CSV-File. Use ; so excel will directly open it correctly
$list | Sort-Object -Property "Dept." | Export-Csv -LiteralPath $outPutFilePath -Delimiter ";" -NoTypeInformation