如何处理Excel工作表中的数据更改事件以刷新所有数据透视表?

问题描述

我将VBA代码应用于工作表及其更改。因此,只要工作表中有新条目或删除(任何更改),它就会刷新附加到它的所有数据透视表-

Private Sub Worksheet_Change(ByVal Target As Range)

ThisWorkbook.RefreshAll

End Sub

(我对VBA或Office脚本代码不是很熟悉,因此很抱歉出现基本问题。)

但这不适用于excel在线。因此,我需要在excel在线代码编辑器(或打字稿)中使用的代码。到目前为止,我已经可以编写这段代码-

async function main(workbook: ExcelScript.Workbook) {
  await Excel.run(async (context) => {
    console.log("Adding Sheet OnChange Handler");
    let mysheet = context.workbook.worksheets.getItem("Attendance");
    mysheet.onChanged.add(ref);
    await context.sync();
    console.log("Added a worksheet-level data-changed event handler.");
  }
  )};
function ref(workbook: ExcelScript.Workbook) {
  let selectedsheet = workbook.getActiveWorksheet();
  selectedsheet.refreshAllPivottables();
  console.log("Pivot Refreshed.");
};

我遇到错误找不到名称'Excel',并且只要工作表中没有任何更改,它就可以正常工作。请帮我解决一下这个。 谢谢。

解决方法

我认为您在()方法末尾缺少refreshAllPivotTables

请尝试-

function main(workbook: ExcelScript.Workbook) {
  workbook.refreshAllPivotTables(); // Refresh all pivot tables
}
,

正如@Daniel G. Wilson回答的那样,当前无法在脚本中使用。所以我使用了Power Automate方法。

我在代码编辑器中编写了脚本并将其保存-

function main(workbook: ExcelScript.Workbook) {
let selectedsheet = workbook.getWorksheet("Pivot");
selectedsheet.refreshAllPivotTables();
console.log("Pivot Refreshed");
};

然后,我在Power Automate中创建了计划流。步骤是-

  1. 创建新的计划流。
  2. 给个名字。
  3. 设置开始时间和自动运行的间隔。
  4. 选择新步骤。
  5. 选择Excel Online Business。
  6. 选择“运行脚本”。
  7. 选择文件位置和脚本名称。
  8. 保存并测试流程。

工作正常。谢谢。