【问题标题】:Excel Online Workbook Links - Linking full row rangeExcel Online 工作簿链接 - 链接整个行范围
【发布时间】:2022-01-24 12:12:36
【问题描述】:

我在浏览器中使用 Excel Online,已从源设置了指向我的主文件的工作簿链接。在我的主文件中,我有表格标题和带有公式的附加列。我只需要从 A2 到 AC 下来。问题是源文件每天都在变化。第二天可能会有更多行或更少。我需要能够引用集合列,然后检测数据源中有多少行并更新主文件

到目前为止,我有这样的东西

='https://sharepoint.com/personal/myFolder/Documents/[data_source.xlsx]in'!A2

在 B2 和 C2 列上加载第一行。我可以从源数据中选择一个范围,以便加载所有数据,但如果第二天有更多行,它不会加载这些,或者如果更少,它将显示为空白。

如何告诉公式选择列 A2 到 C2 并向下扩展,或者在使用数据连接时像在 Excel 桌面中一样刷新数据?

您可以看到源数据,第 2 天有额外的行不会加载到我的主文件中。

【问题讨论】:

    标签: excel connection office-scripts excel-online


    【解决方案1】:

    您可以使用 PowerAutomate 和两个 Office 脚本将两个工作簿链接在一起。

    您将从使用重复开始。因此,您可以选择希望流程运行的频率(每周、每天等)

    设置重复周期后,您必须编写一个处理表格数据的办公脚本。您可以使用表的 GetRangeBetweenHeaderAndTotal() 方法来处理表的 dataBodyRange。一旦你有了它,你就可以调整范围的大小来获得你需要的数据。接下来,您需要获取可用于 GetValues 方法的值。 GetValues 返回一个无法从 PowerAutomate RunScript 返回的二维数组。因为你不能这样做,但你可以返回一个字符串,你可以通过将二维数组转换为 json 字符串来解决这个问题。可以看下面的代码:

    function main(workbook: ExcelScript.Workbook): string {
      let sh: ExcelScript.Worksheet = workbook.getActiveWorksheet();
      //get table
      let tbl: ExcelScript.Table = sh.getTable("Table1");
      //get table's column count
      let tblColumnCount: number = tbl.getColumns().length;
      //set number of columns to keep
      let columnsToKeep: number = 3;
      //set the number of rows to remove
      let rowsToRemove: number = 0;
      //resize the table range
      let tblRange: ExcelScript.Range = tbl.getRangeBetweenHeaderAndTotal().getResizedRange(rowsToRemove,columnsToKeep - tblColumnCount);
      //get the table values
      let tblRangeValues: string[][] = tblRange.getValues() as string[][];
      //create a JSON string
      let result: string = JSON.stringify(tblRangeValues);
      //return JSON string
      return result;
    }
    

    创建脚本后,请考虑将其命名为您在 PowerAutomate 中调用它时会记住的名称(我将其命名为 getTableValues)。接下来,在 PowerAutomate 中重复之后,添加一个运行脚本步骤。填写值并选择脚本,如下所示:

    接下来,您必须创建一个脚本,该脚本接受从前一个脚本返回的输入并完成最后的步骤。所以脚本必须有一个参数,该参数接受从前一个脚本返回的字符串(我在我的脚本中称之为 tableValues)。在脚本中,您必须解析 json 字符串数组以创建二维数组,调整初始范围的大小,然后设置调整后的范围的值。您可以在下面看到执行此操作的脚本:

    function main(workbook: ExcelScript.Workbook, tableValues: string)
    {
      let sh: ExcelScript.Worksheet = workbook.getWorksheet("Sheet1")
      //parses the JSON string to create array
      let tableValuesArray: string[][] = JSON.parse(tableValues);
      //gets row count from the array
      let valuesRowCount: number = tableValuesArray.length - 1
      //gets column count from the array
      let valuesColumnCount: number = tableValuesArray[0].length - 1
      //resizes the range
      let rang: ExcelScript.Range = sh.getRange("A1").getResizedRange(valuesRowCount,valuesColumnCount)
      //sets the value of the resized range to the array
      rang.setValues(tableValuesArray)
    }
    

    在 PowerAutomate 中,您必须创建第二个运行脚本步骤。第二步,在你选择脚本后应该会提示你输入一个值(在我的步骤中该值称为tableValues。)在表值输入中,你必须输入动态内容结果值。完成后,您可以保存脚本并进行测试。

    需要注意的一点是,第二个脚本不会删除之前运行的旧范围值。这可以通过多种不同的方式来完成。但首选方式可能取决于工作簿的结构。所以我建议在开始的某个地方编写代码来清除第二个脚本中的范围。或者更好的是,将第一个脚本的输出添加到 Excel 表中。每次运行第二个脚本时只需清空表格即可。

    【讨论】:

    • 谢谢布赖恩,这是一个很好的解决方案,对于未来的变化也可以非常灵活。
    猜你喜欢
    • 1970-01-01
    • 2017-09-25
    • 2023-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多