PowerShell スクリプトで読み取り、ダウン ストリーム プロセスのデータを抽出できる「名簿」スプレッドシートを設計するという単純なビジネス要件があります。スプレッドシートには、FirstName、LastName、Company、StartDate などのヘッダーがあります。これらのヘッダーは A1 から始まり、J1 まで続きます。スプレッドシートは 2007 (xlsm) で、書式設定されたテーブル (DataTable?) を含む 1 つのワークシートが含まれています。DataTable の右側には、NumberOfRecords や ContactInfo などのいくつかのフィールドがあります。
これまでの PowerShell スクリプトは、DataTable が最初の列/行である限り正常に機能します。NumberOfRecords & ContactInfo フィールドを上または左に切り替えると、レコードの読み取り順序全体が乱れます。
以下は現在のスクリプトです
function getData {
$excelPath = "c:\temp\Roster.xlsm"
$global:roster = @()
$conn = new-object System.Data.OleDb.OleDbConnection
$conn.ConnectionString = 'Provider=Microsoft.ACE.OLEDB.12.0;Data Source='+$excelPath+';Extended Properties="Excel 12.0 Xml;HDR=YES";'
$cmd = new-object System.Data.OleDb.OleDbCommand("SELECT * FROM [Roster$] WHERE [Valid] = true",$conn)
$conn.open()
$reader = $cmd.ExecuteReader()
while ($reader.Read())
{
$user = new-object object
$user | add-member -MemberType NoteProperty -Name "FirstName" -Value $reader.item(1).ToString()
$user | add-member -MemberType NoteProperty -Name "MName" -Value $reader.item(2).ToString()
$user | add-member -MemberType NoteProperty -Name "LastName" -Value $reader.item(3).ToString()
$user | add-member -MemberType NoteProperty -Name "Company" -Value $reader.item(6).ToString()
$user | add-member -MemberType NoteProperty -Name $reader.GetName(8) -Value $reader.item(8).ToString()
$global:roster += $user
}
$conn.close()
$global:roster | out-gridview
#
}
この DataTable を直接参照する方法はありますか? Excel 2010 では、データをテーブルとしてフォーマットするときに、名前を付けることができることを知っています (デフォルトの Table1)。次のようなことができますか"SELECT Table1.* FROM [Roster$] WHERE [VALUE] = true"
??
私の目標は、適切にフォーマットされたスプレッドシートを提供し、Powershell を介してフォーマットされたテーブルからデータを抽出することです。