PowerShell Excel 导入解决方案

在之前的工作中,为一家前雇主构建了一个PowerShell应用程序,该程序可以根据Excel电子表格中的规范构建SharePoint网站。问题在于,Excel中的每个工作表都需要导出为CSV格式,这使得维护变得非常困难。因此,进行了研究,并发现了Robert M. Troups, Jr的博客,其中介绍了将Excel导入到PowerShell的方法,以及Michael Sorens(msorens)在论坛上发表的帖子,讨论了如何利用该方法创建一个Import-Excel函数。这太酷了!复制并在虚拟机(VM)上运行了它,但是遇到了问题...需要安装Excel。

没有在虚拟机上安装Excel,希望这个脚本尽可能通用(且成本低)。此外,不能指望它安装在客户服务器上。以下是解决方案...

使用代码

此解决方案使用了可再分发的Access下载,但这是免费的!

下载并安装:

接下来,在PowerShell脚本顶部包含以下函数,或者将其放入另一个ps1文件,并使用PowerShell包含方法(一个点后面跟着函数文件的路径)来“安装”它,以便在想要导入Excel对象为PSObject之前。

function Import-Excel { param ( [string]$FileName, [string]$WorksheetName ) if ($FileName -eq "") { throw "请提供Excel文件的路径" Exit } if (-not (Test-Path $FileName)) { throw "路径 '$FileName' 不存在。" Exit } $strSheetName = $WorksheetName + '$' $query = 'select * from ['+$strSheetName+']'; $connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source='"$FileName'";Extended Properties='"Excel 12.0 Xml;HDR=YES'";" $conn = New-Object System.Data.OleDb.OleDbConnection($connectionString) $conn.open() $cmd = New-Object System.Data.OleDb.OleDbCommand($query,$conn) $dataAdapter = New-Object System.Data.OleDb.OleDbDataAdapter($cmd) $dataTable = New-Object System.Data.DataTable $dataAdapter.fill($dataTable) $conn.close() $myDataRow =""; $columnArray =@(); foreach($col in $dataTable.Columns) { $columnArray += $col.toString(); } $returnObject = @(); foreach($rows in $dataTable.Rows) { $i=0; $rowObject = @{}; foreach($columns in $rows.ItemArray){ $rowObject += @{$columnArray[$i]=$columns.toString()}; $i++; } $returnObject += new-object PSObject -Property $rowObject; } return $returnObject; }

像这样调用Import-Excel函数...

$listOne = Import-Excel "test.xlsx" -WorksheetName:"list Sample One" $listTwo= Import-Excel "test.xlsx" -WorksheetName:"list Sample Two"
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485