使用重命名和设置分隔符

时间:2016-11-25 11:52:42

标签: excel powershell csv

我收到了一个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(如果相关) 如果更容易,可以返回命令提示符进行某些任务。

1 个答案:

答案 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的数组需要包含工作簿中所需的每一列。