Excel 在线工作簿链接 - 链接整行范围
Excel Online Workbook Links - Linking full row range
我正在浏览器中使用 Excel Online,已将工作簿 link 从源设置到我的主文件。在我的主文件中,我有 table headers 和带有公式的附加列。我只需要从 A2 降到 AC。问题是源文件每天都在变化。第二天可能会有更多行或更少。我需要能够引用集合列,然后检测数据源中有多少行并更新主文件
到目前为止,我有这样的东西
='https://sharepoint.com/personal/myFolder/Documents/[data_source.xlsx]in'!A2
B2 和 C2 列加载第一行。我可以 select 源数据中的一个范围,因此它会加载所有数据,但如果第二天有更多行,它不会加载这些行,或者如果行数较少,它将显示为空白。
如何将公式告诉 select A2 到 C2 列并向下扩展,或者在使用数据连接时像在 Excel 桌面中那样刷新数据?
如您所见,源数据中,第 2 天有额外的行不会加载到我的主文件中。
您可以使用 PowerAutomate 和两个 Office 脚本 link 将两个工作簿放在一起。
您将从使用重复开始。因此,您可以选择希望流向 运行 的频率(每周、每天等)
设置重复周期后,您必须编写一个处理 table 数据的办公脚本。您可以使用 table 的 GetRangeBetweenHeaderAndTotal() 方法处理 table 的 dataBodyRange。一旦你有了它,你就可以调整范围的大小来获得你需要的数据。接下来,您需要获取可与 GetValues 方法一起使用的值。 GetValues return 是一个二维数组,您不能从 PowerAutomate 运行 脚本中 return。由于您不能这样做,但您可以 return 一个字符串,因此您可以通过将二维数组转换为 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 中重复执行后,添加一个 运行 脚本步骤。像这样填写值和 select 脚本:
接下来,您必须创建一个脚本,该脚本接受来自上一个脚本的输入 return 并完成最后的步骤。因此,该脚本必须有一个参数,该参数从之前的脚本中获取字符串 returned(我将其称为 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 中,您必须创建第二个 运行 脚本步骤。在第二步中,在 select 编辑脚本后,系统会提示您输入一个值(该值在我的步骤中称为 tableValues。)在 table 值中输入,您必须输入动态内容结果值。完成后,您可以保存脚本并进行测试。
需要注意的一件事是第二个脚本不会删除之前 运行 中的旧范围值。这可以通过多种不同的方式来完成。但首选方式可能取决于工作簿的结构。所以我建议在开始的某个地方编写代码来清除第二个脚本中的范围。或者更好的是,将第一个脚本的输出添加到 Excel table 中。每次 运行 第二个脚本时,只需清空 table。
如果您想了解如何做到这一点,可以看看这个 post here
我正在浏览器中使用 Excel Online,已将工作簿 link 从源设置到我的主文件。在我的主文件中,我有 table headers 和带有公式的附加列。我只需要从 A2 降到 AC。问题是源文件每天都在变化。第二天可能会有更多行或更少。我需要能够引用集合列,然后检测数据源中有多少行并更新主文件
到目前为止,我有这样的东西
='https://sharepoint.com/personal/myFolder/Documents/[data_source.xlsx]in'!A2
B2 和 C2 列加载第一行。我可以 select 源数据中的一个范围,因此它会加载所有数据,但如果第二天有更多行,它不会加载这些行,或者如果行数较少,它将显示为空白。
如何将公式告诉 select A2 到 C2 列并向下扩展,或者在使用数据连接时像在 Excel 桌面中那样刷新数据?
如您所见,源数据中,第 2 天有额外的行不会加载到我的主文件中。
您可以使用 PowerAutomate 和两个 Office 脚本 link 将两个工作簿放在一起。
您将从使用重复开始。因此,您可以选择希望流向 运行 的频率(每周、每天等)
设置重复周期后,您必须编写一个处理 table 数据的办公脚本。您可以使用 table 的 GetRangeBetweenHeaderAndTotal() 方法处理 table 的 dataBodyRange。一旦你有了它,你就可以调整范围的大小来获得你需要的数据。接下来,您需要获取可与 GetValues 方法一起使用的值。 GetValues return 是一个二维数组,您不能从 PowerAutomate 运行 脚本中 return。由于您不能这样做,但您可以 return 一个字符串,因此您可以通过将二维数组转换为 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 中重复执行后,添加一个 运行 脚本步骤。像这样填写值和 select 脚本:
接下来,您必须创建一个脚本,该脚本接受来自上一个脚本的输入 return 并完成最后的步骤。因此,该脚本必须有一个参数,该参数从之前的脚本中获取字符串 returned(我将其称为 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 中,您必须创建第二个 运行 脚本步骤。在第二步中,在 select 编辑脚本后,系统会提示您输入一个值(该值在我的步骤中称为 tableValues。)在 table 值中输入,您必须输入动态内容结果值。完成后,您可以保存脚本并进行测试。
需要注意的一件事是第二个脚本不会删除之前 运行 中的旧范围值。这可以通过多种不同的方式来完成。但首选方式可能取决于工作簿的结构。所以我建议在开始的某个地方编写代码来清除第二个脚本中的范围。或者更好的是,将第一个脚本的输出添加到 Excel table 中。每次 运行 第二个脚本时,只需清空 table。
如果您想了解如何做到这一点,可以看看这个 post here