# ADOライブラリを読み込む
$ado = New-Object -ComObject ADODB.Connection
$ado.Open("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=path\\to\\your\\excel\\file.xlsx;Extended Properties='Excel 12.0 Xml;HDR=YES'")
# SQLクエリを作成する
$query = "SELECT * FROM [Sheet1$]"
# レコードセットを取得する
$rs = New-Object -ComObject ADODB.Recordset
$rs.Open($query, $ado)
# レコードセットを操作する
while (!$rs.EOF) {
Write-Output "Name: $($rs.Fields.Item('Name').Value), Age: $($rs.Fields.Item('Age').Value)"
$rs.MoveNext()
}
# リソースを解放する
$rs.Close()
$ado.Close()
# ADOライブラリを読み込む
$ado = New-Object -ComObject ADODB.Connection
$ado.Open("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=path\\to\\your\\excel\\file.xlsx;Extended Properties='Excel 12.0 Xml;HDR=YES'")
# SQLクエリを作成する
$query = "SELECT * FROM [Sheet1$]"
# レコードセットを取得する
$rs = New-Object -ComObject ADODB.Recordset
$rs.Open($query, $ado)
# レコードセットを操作する
while (!$rs.EOF) {
Write-Output "Name: $($rs.Fields.Item('Name').Value), Age: $($rs.Fields.Item('Age').Value)"
$rs.Fields.Item('Age').Value = $rs.Fields.Item('Age').Value + 1
$rs.MoveNext()
}
# Excelから切断する
$rs.Close()
$ado.Close()
# 新しいレコードセットを作成する
$new_rs = New-Object -ComObject ADODB.Recordset
$new_rs.CursorLocation = 3 # サーバーサイドカーソル
$new_rs.Open()
# 取得したレコードセットを新しいレコードセットにコピーする
$rs.MoveFirst()while (!$rs.EOF) {
$new_rs.AddNew()
for ($i = 0; $i -lt $rs.Fields.Count; $i++) {
$new_rs.Fields.Item($i).Value = $rs.Fields.Item($i).Value
}
$rs.MoveNext()
}
$new_rs.UpdateBatch()
# レコードセットを一括で配列にする場合
$rows = $rs.GetRows()
# 10行ずつ行う場合
$rows = $rs.GetRows(10)
# リソースを解放する
$new_rs.Close()
# レコードセットの取得
$rs1 = New-Object -ComObject ADODB.Recordset
$rs1.Open("SELECT * FROM [Sheet1$]", $conn, 1, 3)
# レコードセットのコピーを作成
# sheet1,rs1,rs2が接続した状態
$rs2 = $rs1.Clone()
# コピー元のレコードセットと接続を閉じる
$rs1.Close()
$conn.Close()
# コピーしたレコードセットの内容を確認
while (!$rs2.EOF) {
for ($i = 0; $i -lt $rs2.Fields.Count; $i++) {
Write-Host $rs2.Fields.Item($i).Value
}
$rs2.MoveNext()
}
powershellCopy code
$conn = New-Object -ComObject ADODB.Connection
$conn.Open("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\path\\to\\sample.xlsx;Extended Properties='Excel 12.0;HDR=YES;IMEX=1';")
powershellCopy code
$rs1 = New-Object -ComObject ADODB.Recordset
$rs1.Open("SELECT * FROM [Sheet1$]", $conn, 1, 3)
この時点で、Excelファイルと$rs1の間に接続が確立され、rs1がExcelファイルからデータを取得できる状態になります。
powershellCopy code
$rs2 = New-Object -ComObject ADODB.Recordset
$rs2.CursorLocation = 3
$rs2.Open("SELECT * FROM [Sheet1$]", $conn, 1, 3)
$rs2.Open("SELECT * FROM [Sheet1$]", $conn, 3, 1)
$rs2.MoveFirst()
$rs2.CopyFromRecordset($rs1)
この時点で、Excelファイルと$rs1、$rs2の間に接続が確立され、rs1と$rs2がExcelファイルから同じデータを取得できる状態になります。
powershellCopy code
$rs2.MoveFirst()
$rs2.Fields.Item("Column1").Value = "New Value"
この時点で、Excelファイル、$rs1、$rs2の間に接続が確立されたまま、$rs2のデータが編集されています。Excelファイルと$rs1は、$rs2の変更には影響を受けません。
powershellCopy code
$rs1.Close()
$rs2.Close()
$conn.Close()
この時点で、Excelファイル、$rs1、$rs2の間の接続が切断され、それぞれのオブジェクトは独立した状態になります。