1

私は PowerShell を初めて使用します。以下のコードの最初の方法が機能しないのに、2 番目の方法 (コメント アウト) が機能する理由がわかりません。

データベース レコードセットの結果を Excel ファイルに書き込もうとしているので、動的に拡張可能な配列が必要です。最初のタイプの配列でそれを行う方法は知っていますが、2番目のタイプでは知りません。

次の場合、私の問題は解決します。

  • 2 番目のタイプの配列を動的に拡張する方法を知ってい
    ます。
  • 最初のタイプの配列を範囲に書き込む方法を知っている
  • 編集:または、最初のタイプの配列を2番目のタイプに変換する効率的な方法を知っています。

コード:

#need this to work around bug if you have a non us-locale and English excel: http://support.microsoft.com/default.aspx?scid=kb;en-us;320369
[System.Threading.Thread]::CurrentThread.CurrentCulture = "en-US" 

# This doesn't work
$values = @(('test1','test2'),('test3','test4'))

# This works
<#
$values = New-Object 'object[,]' 2,2
$values[0,0] = 'test1'
$values[0,1] = 'test2'
$values[1,0] = 'test3'
$values[1,1] = 'test4'
#>

$excel = New-Object -ComObject Excel.Application
$excel.Visible = $False
$xls_workbook = $excel.Workbooks.Add()
$range = $xls_workbook.sheets.item(1).Range("A1:B2")
$range.Value2 = $values

$xls_workbook.SaveAs($MyInvocation.MyCommand.Definition.Replace($MyInvocation.MyCommand.Name, "") + "test.xlsx")
$excel.Quit()
4

2 に答える 2

1

両方の変数の型を取得すると:

$values1.GetType() 
$values2.GetType()

これは私が得るものです:

IsPublic IsSerial Name                                     BaseType                                                                                                               
-------- -------- ----                                     --------                                                                                                               
True     True     Object[]                                 System.Array                                                                                                           
True     True     Object[,]                                System.Array   

したがって、$values1 は 1 次元で、$values2 は 2 次元です。ここに関連する質問があります:

Powershell 多次元配列

于 2012-10-17T16:08:44.373 に答える