test
# 元のExcelファイルのパス
$originalFilePath = "C:\Path\to\Original\File.xlsx"
# 分割されたファイルの保存先ディレクトリ
$outputDirectory = "C:\Path\to\Output\Directory"
# 1万件ごとに分割する行数
$rowLimit = 10000
# Excelオブジェクトを作成
$excel = New-Object -ComObject Excel.Application
$excel.Visible = $false
# ワークブックを開く
$workbook = $excel.Workbooks.Open($originalFilePath)
$worksheet = $workbook.Worksheets.Item(1)
# 列名を取得して保存用の配列に追加
$columnNames = @()
$worksheet.Rows.Item(1).Columns | ForEach-Object {
$columnName = $_.Text
$columnNames += $columnName
}
# 元ファイルの行数を取得
$rowCount = ($worksheet.UsedRange.Rows).Count
# 分割処理
for ($startRow = 2; $startRow -le $rowCount; $startRow += $rowLimit) {
$endRow = $startRow + $rowLimit - 1
if ($endRow -gt $rowCount) {
$endRow = $rowCount
}
# 新しいワークブックを作成
$newWorkbook = $excel.Workbooks.Add()
$newWorksheet = $newWorkbook.Worksheets.Item(1)
# 列名を新しいワークブックに追加
for ($col = 1; $col -le $columnNames.Count; $col++) {
$newWorksheet.Cells.Item(1, $col) = $columnNames[$col - 1]
}
# データをコピー
$range = $worksheet.Range($worksheet.Cells.Item($startRow, 1), $worksheet.Cells.Item($endRow, $columnNames.Count))
$destinationRange = $newWorksheet.Range("A2").Resize($range.Rows.Count, $range.Columns.Count)
$range.Copy($destinationRange)
# 新しいファイルに保存
$newFilePath = Join-Path -Path $outputDirectory -ChildPath ("Split_" + $startRow + "-" + $endRow + ".xlsx")
$newWorkbook.SaveAs($newFilePath)
$newWorkbook.Close()
}
# オブジェクトの解放
$workbook.Close()
$excel.Quit()
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($worksheet) | Out-Null
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($workbook) | Out-Null
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel) | Out-Null
[System.GC]::Collect()
[System.GC]::WaitForPendingFinalizers()
Write-Host "分割が完了しました。"