如何在Powershell中执行基本的Excel算法?

时间:2015-02-25 00:45:52

标签: excel powershell

$excel_test = New-Object -ComObject Excel.Application

$excel_test.visible =$true
$excel_test.DisplayAlerts =$true

$excel_test.Workbooks.Add("C:\Users\Lab-User\Documents\Test1.xlsx")

$strFormula =  "=((A1:O29/10000)-1)"

$excel_test.Worksheets.Item(2).Cells.Item(2,2).Formula() = $strFormula

基本上,我有一个虚拟的Excel文件。这个文件包含一堆数字。从每个单元格中,我想将数字除以10000,然后将其减去1.我希望将答案放在Sheet2,第2列和第2行(Excel中的B2)中。我希望每个单元格的结果放在第二个工作表中,偏移1行1列。

1 个答案:

答案 0 :(得分:0)

所以你需要一个For循环以便你可以处理每个单元格,我建议将变量设置为范围A1:O29,然后将另一个变量设置为范围B2:P30。然后($ RangeA.Cells.Item(1)/ 10000)-1 = $ Range2.Cells.Item(1),因此For循环很容易。我将使用您的代码启动,然后制作一个空白的电子表格并生成一些随机数据进行测试(您可以使用现有的数据),设置范围,然后循环设置Sheet2中的值。

$excel_test = New-Object -ComObject Excel.Application

$excel_test.visible =$true
$excel_test.DisplayAlerts =$true

$workbook = $excel_test.Workbooks.Add()

$Range1 = $workbook.Worksheets.Item(1).range("A1:O29")
$Range2 = $workbook.Worksheets.Item(2).range("B2:P30")

#Generate random data in sheet 1
$range1.cells | %{$_.value2 = get-random -Minimum 10000 -Maximum 100000}

#Set associated item in Range2 to the calculated value from the source in Range1
For($i = 1;$i -le $Range1.Cells.count;$i++){
    $Range2.Cells.Item($i).value2 = ($Range1.Cells.Item($i).Value2/10000)-1
}

如果需要,可以将($Range1.Cells.Item($i).Value2/10000)-1括在[Math]::Round(<formula>)之内,或使用[Math]::Floor()始终向下舍入,或[Math]::Ceiling()始终向上舍入。