【发布时间】:2016-08-29 23:09:43
【问题描述】:
如您所知,Excel 有 1048574 行。如何在我的代码下方导出超过一百万行?如果达到最大行数,那么我该如何继续循环中的新工作表?如何适应它? 在我找到不错的powershell functions 之后,我正在谷歌上搜索一些。
[Reflection.Assembly]::LoadFrom("C:\DRIVERS\NPOI 2.2.1 binary package\Release\Net40\NPOI.dll")
[Reflection.Assembly]::LoadFrom("C:\DRIVERS\NPOI 2.2.1 binary package\Release\Net40\NPOI.OOXML.dll")
[Reflection.Assembly]::LoadFrom("C:\DRIVERS\NPOI 2.2.1 binary package\Release\Net40\NPOI.OpenXml4Net.dll")
[Reflection.Assembly]::LoadFrom("C:\DRIVERS\NPOI 2.2.1 binary package\Release\Net40\NPOI.OpenXml4Net.dll")
[Reflection.Assembly]::LoadFrom("C:\DRIVERS\NPOI 2.2.1 binary package\Release\Net40\NPOI.OpenXmlFormats.dll")
[Reflection.Assembly]::LoadFrom("C:\DRIVERS\NPOI 2.2.1 binary package\Release\Net40\ICSharpCode.SharpZipLib.dll")
$wb = New-Object NPOI.XSSF.UserModel.XSSFWorkbook;
$ws = $wb.CreateSheet("Company_NTFS_Permissions");
$wr = $ws.CreateRow(0);
$wr.createCell(0).setCellValue("Folder Path");
$wr.createCell(1).setCellValue("Users/Groups");
$wr.createCell(2).setCellValue("Permissions");
$wr.createCell(3).setCellValue("AccessControlType");
$wr.createCell(4).setCellValue("Permissions Inherited")
$dirToAudit = Get-ChildItem -Path "C:\inetpub" -recurse | Where { $_.psIsContainer -eq $true }
$intRow = 1
foreach ($dir in $dirToAudit)
{
$colACL = Get-Acl -Path $dir.FullName
foreach ($acl in $colACL)
{
$fileNameRow = $ws.CreateRow($intRow)
$fileNameRow.CreateCell(0).SetCellValue($dir.FullName)
$intRow++
foreach ($accessRight in $acl.Access)
{
$values = $ws.CreateRow($intRow)
$values.CreateCell(1).SetCellValue($($AccessRight.IdentityReference).ToString())
$values.CreateCell(2).SetCellValue($($AccessRight.FileSystemRights).ToString())
$values.CreateCell(3).SetCellValue($($AccessRight.AccessControlType).ToString())
$values.CreateCell(4).SetCellValue($($acl.AreAccessRulesProtected).ToString())
$intRow++
}
}
}
$fs = new-object System.IO.FileStream("C:\DRIVERS\test.xlsx",[System.IO.FileMode]'Create',[System.IO.FileAccess]'Write')
$wb.Write($fs);
$fs.Close()
【问题讨论】:
-
您已经在跟踪
$intRow中的行数,所以您不能只检查您是否刚刚达到行数限制,然后重新分配您的工作表变量,例如$ws = $wb.CreateSheet("Next_Sheet");? -
我怎样才能适应像 $ws = $wb.CreateSheet("Next_Sheet") 这样的变量?请澄清一下
-
您在代码顶部设置了工作表的变量,该变量决定了将数据添加到哪个工作表的所有内容。只需稍后在代码中将该变量重新设置为不同的工作表(我发布的确切行,但将变量名称从“Next_Sheet”更改),所有新数据都将添加到该不同的工作表中。
-
$wb = 新对象 NPOI.XSSF.UserModel.XSSFWorkbook; $ws = $wb.CreateSheet("Company_NTFS_Permissions"); $ws = $wb.CreateSheet("Company_NTFS_Permissions_2"); $wr = $ws.CreateRow(0);我说的对吗?
标签: excel windows powershell filesystems