根据单击的按钮从同一脚本运行不同的 Office 脚本功能

问题描述 投票:0回答:1

假设您有一个 Excel 文件,其中包含两个按钮,名为

populate-current
populate-all
。两个按钮都会触发相同的 Office 脚本,其中包含如下内容:

function populateByRowIndex(workbook: ExcelScript.Workbook, rowIndex: number): void {
    // populate values for row
}

function getAllRowIndexesToPopulate(workbook: ExcelScript.Workbook): number[] {
    // get row indexes
}

function main(workbook: ExcelScript.Workbook) {
    const IS_POPULATE_ALL_BUTTON = ???

    if (IS_POPULATE_ALL_BUTTON) {
        for (const rowIndex of getAllRowIndexesToPopulate(workbook)) {
            populateByRowIndex(workbook, rowIndex)
        }
    } else {
        populateByRowIdx(workbook, workbook.getActiveCell().getRowIndex())
    }
}

为了根据单击的按钮运行所需的功能,

IS_POPULATE_ALL_BUTTON
应该是什么?

另一种选择:除了复制粘贴之外,是否可以通过其他方式在另一个脚本中重用一个脚本中的逻辑?

import { ... } from ...
给出“不能在模块外部使用 import 语句”,
const { ... } = require(...)
给出“找不到名称‘require’”。基本上,我只是想要一种重新使用
populateByRowIndex
中的逻辑而不重复代码的方法 - 我不介意结果是否需要一个或多个脚本文件。

typescript office365 office-scripts
1个回答
0
投票

您可以使用脚本参数。这样,当有人使用脚本时,他们将输入要更新的行(或所有行或当前行的二进制选项,如您的场景中)。

这是一个让用户在两个选项之间进行选择的示例。它使用字符串文字的联合为用户提供两种选择。

function main(workbook: ExcelScript.Workbook, populationSetting: "PopulateAll" | "PopulateCurrentRow") {
  if (populationSetting == "PopulateAll" ) {
    // get row indexes
  } else if (populationSetting == "PopulateCurrentRow") {
    // populate values for row
  }
}

这是用户运行脚本时将看到的内容。

© www.soinside.com 2019 - 2024. All rights reserved.