首页 > 解决方案 > 如何在powershell中创建这样的数组?

问题描述

我需要为 TextToColumns Excel 自动化存储如下数据。我需要实现 Code-2 或 Code-3 或 Code-4 有什么方法可以实现吗?我有超过 350 多个数据,所以我不能使用 Code-1,这对我来说不公平。


代码 1:工作正常

$var = (1,2),(2,2),(3,2),(4,2),(5,2),(6,2)........(300,2)
$ColumnA.texttocolumns($colrange,1,-412,$false,$false,$false,$false,$false,$true,"|",$var)


代码 2:不工作

$var = @((1,2)..(300,2))
$ColumnA.texttocolumns($colrange,1,-412,$false,$false,$false,$false,$false,$true,"|",$var)


代码 3:不工作

$var = @()
   
#forloop upto 300 
{ $var += ($i,2) }

$ColumnA.texttocolumns($colrange,1,-412,$false,$false,$false,$false,$false,$true,"|",$var)


代码 4:不工作

[array]$var = 1..300 | foreach-object { ,@($_, 2) }
$ColumnA.texttocolumns($colrange,1,-412,$false,$false,$false,$false,$false,$true,"|",$var)

标签: arrayspowershellpowershell-4.0excel-automation

解决方案


我无法完全解释这里发生了什么,但我想这与texttocolumns需要一个(延迟的)表达式而不是一个(评估的)对象的事实有关。

这意味着以下内容似乎适用于@mclayton的Minimal, Reproducible Example

$Var = Invoke-Expression ((1..6 |% { "($_, `$xlTextFormat)" }) -Join ',')

并期望以下内容可以解决最初问题中的问题:

$Var = Invoke-Expression ((1..300 |% { "($_, 2)" }) -Join ',')

推荐阅读