【问题标题】:PowerShell - Excel - Select first worksheet in workbookPowerShell - Excel - 选择工作簿中的第一个工作表
【发布时间】:2014-02-04 03:39:33
【问题描述】:

我有一个循环遍历工作簿并将所有选项卡复制到新工作簿的脚本。但是,出于某种原因,总是会跳过第一个标签

for ($i=1; $i -lt $myworkbook.Worksheets.Count; $i++) {
... other code
$SheetToCopy = $source.Worksheets.Items($i)
$sheetToCopy.Copy($target)
}
  • 我尝试将 $i 设置为 0,但随后 powershell 抱怨零无效。
  • 尝试使用 $workbook.sheets.item$workbook.worksheets.item,但它们似乎做同样的事情

谁能解释一下这里发生了什么?

附加信息:

工作簿永远不会有相同的命名选项卡,因此我使用的是索引而不是名称。

【问题讨论】:

  • 你确定这是第一个被跳过的标签而不是最后一个吗?从您的代码中的样子来看,它应该是(i = 1; i <= worksheets.Count; i++),否则当它到达索引为 4 且 i 为 4 的最后一张纸时,它永远不会复制它。除非那是你的本意。
  • 啊,好眼力。我会去测试一下,但我认为你是对的。我习惯从 0 开始,所以可以使用<,但在这种情况下我需要使用<=
  • 是的,所有这些基于非零索引的语言都是为鸟类准备的!希望能解决。
  • 您可以将其添加为答案,我会接受。这就是问题所在。

标签: excel powershell


【解决方案1】:

从您发布的代码看来,它可能会跳过最后一张而不是第一张。应该是

(int i = 1; i <= worksheets.Count; i++) // roughly translated from C#

当您在那里有&lt; 符号(而不是&lt;=)并且因为您使用的是基于非零的索引时,当它到达最后一张纸时i 将等于worksheets.Count,因此跳过它,因为您要求它小于worksheets.Count

【讨论】:

    猜你喜欢
    • 2020-07-17
    • 2011-03-14
    • 2018-12-25
    • 1970-01-01
    • 2015-08-09
    • 2013-10-23
    • 2021-06-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多