Office Script透视表过滤报错:无法读取undefined的get fields属性
Office Script透视表过滤错误修正:无法读取undefined的getFields属性
错误原因
- 第一个过滤逻辑里,
getFields()[0]是孤立语句,未关联到freierField对象,后续调用applyFilter时用的是PivotFilterHierarchy而非PivotField,触发错误。 - 若
getFilterHierarchy找不到指定名称的层级,会返回undefined,此时调用getFields()就会出现“无法读取undefined的getFields属性”的报错。
修正后的代码
function main(workbook: ExcelScript.Workbook) { // 获取工作表和透视表 const basisFreiBlatt = workbook.getWorksheet("Basis FreiER"); if (!basisFreiBlatt) { console.log("未找到工作表「Basis FreiER」"); return; } const pivotFreiER = basisFreiBlatt.getPivotTable("PivotFreiER"); if (!pivotFreiER) { console.log("未找到透视表「PivotFreiER」"); return; } // 过滤「frei ER」字段为「nein」 const freierHierarchy = pivotFreiER.getFilterHierarchy("frei ER"); if (freierHierarchy) { const freierField = freierHierarchy.getFields()[0]; freierField.applyFilter({ manualFilter: { selectedItems: ["nein"] } }); } else { console.log("未找到过滤层级「frei ER」"); } // 过滤「arch」字段为「nein」 const archHierarchy = pivotFreiER.getFilterHierarchy("arch"); if (archHierarchy) { const archField = archHierarchy.getFields()[0]; archField.applyFilter({ manualFilter: { selectedItems: ["nein"] } }); } else { console.log("未找到过滤层级「arch」"); } // 过滤「Ladetermin」字段为「x」 const ladeterminHierarchy = pivotFreiER.getFilterHierarchy("Ladetermin"); if (ladeterminHierarchy) { const ladeterminField = ladeterminHierarchy.getFields()[0]; ladeterminField.applyFilter({ manualFilter: { selectedItems: ["x"] } }); } else { console.log("未找到过滤层级「Ladetermin」"); } }
关键修正点
- 给每个操作添加存在性检查,避免因找不到工作表、透视表或过滤层级导致的
undefined错误。 - 确保每个过滤层级都正确获取对应的
PivotField(调用getFields()[0]),因为applyFilter方法属于PivotField对象,而非PivotFilterHierarchy。 - 修正第一个过滤逻辑中孤立的
getFields()[0]语句,将其与过滤层级对象关联。
内容的提问来源于stack exchange,提问作者Birgit-Fe
相关产品推荐
相关产品推荐

