我收到了一个Excel文件,希望使用Powershell将其处理为CSV。 我必须非常具体地改变它,因此它可以成为处理csv信息的程序的可靠输入。 我不知道确切的标题,但我知道可能有重复。 我所做的是用excel打开xlsx文件并将其保存为CSV:
$objExcel = New-Object -ComObject Excel.Application
$objExcel.Visible = $True
$objExcel.DisplayAlerts = $True
$Workbook = $objExcel.Workbooks.open($xlsx1)
$WorkSheet = $WorkBook.sheets.item($sheet)
$xlCSV = 6
$Workbook = $objExcel.Workbooks.open($xlsx2)
$WorkSheet = $WorkBook.sheets.item($sheet)
$WorkBook.SaveAs($csv2,$xlCSV)
现在,XLSX文件将包含逗号,所以首先我想将它们更改为点。 我尝试了这个,但它不起作用:
$objRange = $worksheet.UsedRange
$objRange.Replace ",", "."
错误地说:意外的令牌'","'。
然后在保存时我想将分隔符设置为逗号,因为它使用";"标准。 有类似的东西:
$WorkBook.SaveAs($csv2,$xlCSV) -delimiter ","
最后一个问题是重复的标题;这可以防止PS使用Import-CSV。在这里我试过,当文件用逗号分隔时,它可以工作:
Get-Content $downloads\BBKS_DIR_AUTO_COMMA.csv -totalcount 1 >$downloads\Headers.txt
但是我需要重命名de重复的名字,比如我可以拥有Regio,Regio,Regio。 我想将其更改为Regio,Regio2,Regio3
我的计划是查找txt的数据,搜索重复项,然后添加一个增量数字。
最后我需要添加一个带有增量数字的列,但总是有四个数字,比如; 0001,002,0010,0020,0200,1500,我不会超过9999.如何做到这一点?
如果你可以帮助我,如果只是部分我很高兴。 此外,我正在运行Windows 7 x64,Powershell 3.0,Excel 2016(如果相关) 如果更容易,可以返回命令提示符进行某些任务。
答案 0 :(得分:1)
就个人而言,我不会尝试通过Excel本身和COM使用Excel工作表 - 我会使用优秀模块https://github.com/dfinke/ImportExcel
然后,您可以从工作表直接导入到本机Powershell对象数组,并使用Export-Csv -Delimiter重新导出。
编辑:回答跟进:
加载模块后,您可以执行" Get-Module ImportExcel | Select-Object -ExpandProperty ExportedCommands"看看它有什么用。
要首先导入Excel,请执行以下操作:
$WorkBook = Import-Excel
如果你需要处理重复的列名,你可以这样做:
$WorkBook = Import-Excel -Header @("Regio1", "Regio2", "Regio")
传递给-Header的数组需要包含工作簿中所需的每一列。