我创建了以下函数,它将数组的值导出到 Excel,但它只导出第一个元素。
Function Export_Excel ($Array,$Column,$Sheet) {
[System.Threading.Thread]::CurrentThread.CurrentCulture = "en-US"
[System.Threading.Thread]::CurrentThread.CurrentUICulture = "en-US"
$Global:sheet = $Global:wkbk.WorkSheets.Item("$Sheet")
$intRow = 3
$LastRow = $Array.count + 2
$Range = "$Column" + $intRow +":$Column" + "$LastRow"
$RangeSet = $Global:sheet.Range("$Range")
$RangeSet.Value2 = $Array
[gc]::collect()
[gc]::WaitForPendingFinalizers()
[System.Threading.Thread]::CurrentThread.CurrentCulture = $Global:OldCulture
[System.Threading.Thread]::CurrentThread.CurrentUICulture = $Global:OldUICulture
}
我的数组是用
$Array+=$ValueForArray
生成的.当我执行
Export_Excel $Array "B" "Sheet1"
它只为数组的整个长度导出每个单元格中的第一个元素。谁能看到我做错了什么?
最佳答案
这只是一个字符串数组吗?如果是这样,这可以简单得多。将每个字符串转换为一个对象,将对象数组转换为没有类型信息的 CSV,并使其以制表符分隔,跳过标题行,复制到剪贴板,粘贴到您希望它向下流动的任何位置。如果你真的想把它作为一个函数,你可以这样做:
Function Export_Excel ($Array,[String]$Column,[String]$Sheet) {
$ColNum = ([int][char]$Column.ToUpper()) - 64
$Array | Select @{n='Header';e={$_}} | ConvertTo-Csv -NoTypeInformation -Delimiter "`t" | Select -Skip 1 | clip
[void]$Wkbk.WorkSheets.Item("Sheet1").Columns.Item($ColNum).Cells.Item(3).PasteSpecial()
}
哦,对了,我也将列字母转换为数字等价物。所以,为了测试这个......
Function Export_Excel ($Array,[String]$Column,[String]$Sheet) {
$ColNum = ([int][char]$Column.ToUpper()) - 64
$Array | Select @{n='Header';e={$_}} | ConvertTo-Csv -NoTypeInformation -Delimiter "`t" | Select -Skip 1 | clip
[void]$Wkbk.WorkSheets.Item("Sheet1").Columns.Item($ColNum).Cells.Item(3).PasteSpecial()
}
$Excel = New-Object -ComObject Excel.Application
$Excel.Visible = $True
$Wkbk = $Excel.Workbooks.Add()
$Fruit = @("Apple","Orange","Banana")
Export_Excel $Fruit 'f' 'Sheet1'
结果:Excel 打开,创建了一个空白工作簿,然后用单词 Apple 填充单元格 F3,使用单词 Orange 填充单元格 F4,使用单词 Banana 填充单元格 F5。我很确定那是你的意图。
关于arrays - 数组到 Excel 范围仅给出数组的第一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30345660/