要使用的PowerShell脚本优秀的TextToColumns功能

时间:2014-01-06 16:44:45

标签: excel powershell

我一直在尝试实现Range.TextToColumns()函数,但我似乎无法让它工作。我可以在excel中手动执行此操作并且工作正常。 (数据选项卡 - >数据工具组 - >“文字到列” - >第三步选择日期,MDY)

http://msdn.microsoft.com/en-us/library/office/ff193593(v=office.14).aspx

我正在尝试使用PowerShell将美国日期格式转换为英国日期格式。我想要一个excel解决方案,而不是将所有日期导出到PowerShell中,然后将它们发送回电子表格。

这是我的尝试

dateConversion.ps1

$excel = New-Object -comobject Excel.Application
$excel.DisplayAlerts = $True
$excel.Visible = $True

$wb = $excel.Workbooks.Open("C:\Users\danny\Desktop\datesUS.csv")
$ws = $wb.WorkSheets.Item(1)

#r,c
$dateColumn = $ws.Range($ws.Cells.Item(2, 1), $ws.Cells.Item(7, 1))
$destination = $ws.Cells.Item(2, 3)
$dateColumn.TextToColumns($destination, 1, -4142, $False, $False, $False, $False, $False, $False, @(1, 3))

#$excel.Quit()

dateUS.csv

date,dateName
1/29/2013,29th Jan
6/18/2012,18th June
6/28/2012,28th June
7/27/2012,27th July
8/1/2012,1st Aug
8/20/2012,20th Aug

似乎将同一日期复制到目的地而不是进行转换。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

这似乎是一个奇怪的错误/例外。

我必须做两件事才能让它发挥作用。似乎我必须在 TextToColumns函数调用中手动指定目标的范围。这打开了OtherChar字段,因此可以将其指定为“3”,然后使其工作。

似乎错误是您“认为”您为字段信息指定的数组可能已被解释为OtherChar字段...除非您手动指定范围,而不是通过一个变量。 (奇怪和奇怪,我知道,但它确实有效):

将TextToColumns调用更改为:

$dateColumn = $ws.Range($ws.Cells.Item(2, 1), $ws.Cells.Item(7, 1))
$dateColumn.TextToColumns($ws.Range($ws.Cells.Item(2,3),$ws.Cells.Item(7,3)), 1, -4142, $False, $False, $False, $False, $False, $False, 3, @(1,3))