我一直在尝试实现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
似乎将同一日期复制到目的地而不是进行转换。
有什么想法吗?
答案 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))