加快在Powershell中读取Excel文件的速度
我想知道是否有任何方法可以加快使用powershell读取Excel文件的速度。很多人会说我应该停止使用do,直到,但问题是我非常需要它,因为在我的Excel工作表中可能有2行或5000行。我知道5000行需要一些时间。但两行不需要90秒以上加快在Powershell中读取Excel文件的速度,excel,powershell,Excel,Powershell,我想知道是否有任何方法可以加快使用powershell读取Excel文件的速度。很多人会说我应该停止使用do,直到,但问题是我非常需要它,因为在我的Excel工作表中可能有2行或5000行。我知道5000行需要一些时间。但两行不需要90秒以上 $Excel = New-Object -ComObject Excel.Application $Excel.Visible = $true $Excel.DisplayAlerts = $fals
$Excel = New-Object -ComObject Excel.Application
$Excel.Visible = $true
$Excel.DisplayAlerts = $false
$Path = EXCELFILEPATH
$Workbook = $Excel.Workbooks.open($Path)
$Sheet1 = $Workbook.Worksheets.Item(test)
$URows = @()
Do {$URows += $Sheet1.Cells.Item($Row,1).Text; $row = $row + [int] 1} until (!$Sheet1.Cells.Item($Row,1).Text)
$URows | foreach {
$MyParms = @{};
$SetParms = @{};
我在剧本里也写了30遍:
If ($Sheet1.Cells.Item($Row,2).Text){$var1 = $Sheet1.Cells.Item($Row,2).Text
$MyParms.Add("PAR1",$var1)
$SetParms.Add("PAR1",$var1)}
}
我有同时运行$MyParms的想法,但我不知道如何运行。有什么建议吗
或
提高阅读速度,但我不知道如何在不破坏“无所不读”的情况下达到这一目的
或
速度是正常的,我不应该抱怨。使用
+=
操作符附加到数组非常慢,因为它会将所有元素从现有数组复制到新数组。改用类似的方式:
$URows = for ($row = 1; !$Sheet1.Cells.Item($row, 1).Text; $row++) {
if ($Sheet1.Cells.Item($Row,2).Text) {
$MyParms['PAR1'] = $Sheet1.Cells.Item($Row, 2).Text)
$SetParms['PAR1'] = $Sheet1.Cells.Item($Row, 2).Text)
}
$Sheet1.Cells.Item($Row,1).Text
}
您的Do
循环基本上是一个计数循环。这种循环的标准形式是
for (init counter; condition; increment counter) {
...
}
所以我相应地改变了循环。当然,你也会得到这样的结果:
$row = 1
$URows = Do {
...
$row += 1
}
但这只意味着更多的代码没有任何好处。不过,此修改不会对性能产生任何影响
与绩效相关的还有另外两个变化:
Add
方法为哈希表赋值,可以防止代码在哈希表中已经存在键时引发错误$URows
使用
+=
运算符附加到数组速度非常慢,因为它会将现有数组中的所有元素复制到新数组中。改用类似的方式:
$URows = for ($row = 1; !$Sheet1.Cells.Item($row, 1).Text; $row++) {
if ($Sheet1.Cells.Item($Row,2).Text) {
$MyParms['PAR1'] = $Sheet1.Cells.Item($Row, 2).Text)
$SetParms['PAR1'] = $Sheet1.Cells.Item($Row, 2).Text)
}
$Sheet1.Cells.Item($Row,1).Text
}
您的Do
循环基本上是一个计数循环。这种循环的标准形式是
for (init counter; condition; increment counter) {
...
}
所以我相应地改变了循环。当然,你也会得到这样的结果:
$row = 1
$URows = Do {
...
$row += 1
}
但这只意味着更多的代码没有任何好处。不过,此修改不会对性能产生任何影响
与绩效相关的还有另外两个变化:
Add
方法为哈希表赋值,可以防止代码在哈希表中已经存在键时引发错误$URows
如果需要速度,首先不要使用Excel.Application。您可以使用Excel电子表格作为ODBC数据源—该文件类似于数据库,每个工作表都是一个表。速度差很大。这里有一个如果你需要速度,首先不要使用Excel.Application。您可以使用Excel电子表格作为ODBC数据源—该文件类似于数据库,每个工作表都是一个表。速度差很大。这里有一个听起来不错,你能简单解释一下它是如何工作的吗?特别是你即兴表演的第一行。我的$MyParms.Add有什么问题-它是否仍能像splatting一样工作??我想了解将所有内容转换为新代码的原因,除了+=到++非常感谢!知道了!改编了我的剧本。效果更好!听起来不错,你能简单解释一下它是怎么工作的吗?特别是你即兴表演的第一行。我的$MyParms.Add有什么问题-它是否仍能像splatting一样工作??我想了解将所有内容转换为新代码的原因,除了+=到++非常感谢!知道了!改编了我的剧本。效果更好!非常感谢您的链接。不容易理解,但我会试试看!我问了另一个关于ODBC数据库的问题。你能看一下吗?我被卡住了。有点晚了,但我想你指的是OLEDB数据源。看起来technet链接已经更新了。非常感谢您的链接。不容易理解,但我会试试看!我问了另一个关于ODBC数据库的问题。你能看一下吗?我被卡住了。有点晚了,但我想你指的是OLEDB数据源。看起来technet链接已经更新了。