通过 powershell 按用户定义的行将大型 excel 文件拆分为多个较小的文件
Split large excel file to multiple smaller file by user defined rows through powershell
我希望将大型 excel 文件拆分为多个 excel 文件
我的样本excel文件
Name Value value2
abc1 10 100
abc2 20 200
abc3 30 300
abc4 40 400
abc5 50 500
abc6 60 600
abc7 70 700
abc8 80 800
预期结果
Batch1.xlsx
Name Value Value2
abc1 10 100
abc2 20 200
abc3 30 300
Batch2.xlsx
Name Value Value2
abc4 40 400
abc5 50 500
abc6 60 600
Batch3.xlsx
Name Value Value2
abc7 70 700
abc8 80 800
Myscript 出现循环..作为初学者寻求帮助..
示例:用户选择数据拆分为3行。,如果输入文件有8行数据。,file3.xlsx可以保留剩余的2行。
$nom = Read-Host 'Enter number of rows of data want to be in a file'
$nom = [int]$nom + [int]1
$nom1 = 'A'+ $nom
$nxc = 100
$meto = 'A1'
For ($nom; $nom -le $nxc) {
$excel = New-Object -ComObject Excel.Application
$excel.visible = $true
$workbook = $excel.workbooks.open("C:\Users\admin\Desktop\rax\Master\in.xlsx")
$worksheet = $workbook.sheets.item("Sheet1")
$worksheet.Range("$meto","$nom1").EntireRow.copy()
$wb2=$excel.workbooks.open("C:\Users\admin\Desktop\rax\out.xlsx")
$targetRange=$wb2.Worksheets.Item('Sheet1').Range("A1").EntireRow
$wb2.Worksheets.Item('Sheet1').Activate()
$targetRange.PasteSpecial(-4163)
$meto = $wb2.Worksheets.Item('Sheet1').UsedRange.Rows.Count
$wb2.RefreshAll()
$wb2.Save()
$workbook.Worksheets.Item('Sheet1').Activate()
$met = $workbook.Worksheets.Item('Sheet1').UsedRange.Rows.Count
$nxc = $met
$meto = [int]$meto + [int]1
$nom = [int]$meto - [int]1
$nom = [int]$nom + [int]$nom
$nom
$excel.Quit()
}
您可以利用 Doug finke . Import-Excel
开发的一个很棒的模块
下面的代码可以解决你的问题。
$r=@()
$t=$C=1
Import-Excel -Path C:\Temp\test.xlsx|Foreach-Object -Process {
#Append rows in an array
$r += $_
#Save in a new excel when count reaches 3
if($C -eq 3){
$r | Export-Excel -Path C:\Temp\test_$t.xlsx
#reset values
$r=@()
$c=1
$t++
}
else{
#increment row count
$c++
}
}
#save remaining rows
$r|Export-Excel -Path C:\Temp\test_$t.xlsx
您可以相应地重命名变量。
我希望将大型 excel 文件拆分为多个 excel 文件
我的样本excel文件
Name Value value2
abc1 10 100
abc2 20 200
abc3 30 300
abc4 40 400
abc5 50 500
abc6 60 600
abc7 70 700
abc8 80 800
预期结果
Batch1.xlsx
Name Value Value2
abc1 10 100
abc2 20 200
abc3 30 300
Batch2.xlsx
Name Value Value2
abc4 40 400
abc5 50 500
abc6 60 600
Batch3.xlsx
Name Value Value2
abc7 70 700
abc8 80 800
Myscript 出现循环..作为初学者寻求帮助..
示例:用户选择数据拆分为3行。,如果输入文件有8行数据。,file3.xlsx可以保留剩余的2行。
$nom = Read-Host 'Enter number of rows of data want to be in a file'
$nom = [int]$nom + [int]1
$nom1 = 'A'+ $nom
$nxc = 100
$meto = 'A1'
For ($nom; $nom -le $nxc) {
$excel = New-Object -ComObject Excel.Application
$excel.visible = $true
$workbook = $excel.workbooks.open("C:\Users\admin\Desktop\rax\Master\in.xlsx")
$worksheet = $workbook.sheets.item("Sheet1")
$worksheet.Range("$meto","$nom1").EntireRow.copy()
$wb2=$excel.workbooks.open("C:\Users\admin\Desktop\rax\out.xlsx")
$targetRange=$wb2.Worksheets.Item('Sheet1').Range("A1").EntireRow
$wb2.Worksheets.Item('Sheet1').Activate()
$targetRange.PasteSpecial(-4163)
$meto = $wb2.Worksheets.Item('Sheet1').UsedRange.Rows.Count
$wb2.RefreshAll()
$wb2.Save()
$workbook.Worksheets.Item('Sheet1').Activate()
$met = $workbook.Worksheets.Item('Sheet1').UsedRange.Rows.Count
$nxc = $met
$meto = [int]$meto + [int]1
$nom = [int]$meto - [int]1
$nom = [int]$nom + [int]$nom
$nom
$excel.Quit()
}
您可以利用 Doug finke . Import-Excel
开发的一个很棒的模块下面的代码可以解决你的问题。
$r=@()
$t=$C=1
Import-Excel -Path C:\Temp\test.xlsx|Foreach-Object -Process {
#Append rows in an array
$r += $_
#Save in a new excel when count reaches 3
if($C -eq 3){
$r | Export-Excel -Path C:\Temp\test_$t.xlsx
#reset values
$r=@()
$c=1
$t++
}
else{
#increment row count
$c++
}
}
#save remaining rows
$r|Export-Excel -Path C:\Temp\test_$t.xlsx
您可以相应地重命名变量。