【问题标题】:How to perform basic Excel arithmetic in Powershell?如何在 Powershell 中执行基本的 Excel 算术?
【发布时间】:2015-02-25 00:45:52
【问题描述】:
$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 列的第二张工作表中。

【问题讨论】:

  • 所以您希望 Sheet2.B2 包含来自数百个单元格的结果数字?你想用逗号分隔吗?你需要更清楚你的问题。你有错误吗?是否要将指定范围内的数字总和除以 10000,然后减去 1?请澄清。
  • 假设在 Excel 的 Sheet 1-A1 中有一个数字,(数字是 20000)。我希望这个数字除以 10,000,然后减去 1。这个结果(即 1)将成为工作表 2-B2 单元格中的输出。这有意义吗?
  • 确实如此,但是否只有 1 个单元格具有值?如果 Sheet1.A1 = 20000 和 Sheet1.A3 = 50000 怎么办?那永远不会发生吗?您是否将 1 放在一个单元格中,将 4 放在另一个单元格中的工作表 2 中?
  • 是的,你明白了。因为我在电子表格中没有一个值,所以我有多个值。所以所有的值都需要除以1。例如,我在Sheet 1中的单元格A1:O29的每个单元格中都有值。算术的结果需要在Sheet 2中,来自B2:P30跨度>
  • 好的,你没有说你问题的最后一部分。您希望将每个单元格的结果放置在偏移 1 行 1 列的第二张工作表中。

标签: excel powershell


【解决方案1】:

所以你需要一个 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() 始终向上舍入。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-16
    • 2017-04-15
    相关资源
    最近更新 更多