Google Sheets主资产台账按类型自动分发数据到子表咨询
错误原因排查
- 语法错误:首版改造代码末尾多了1个多余的
},会直接触发代码执行报错 - 条件判断逻辑错误:第二版代码中
t != "Asset B"||"Asset C"写法不符合JavaScript语法规则,非空字符串在布尔判断中默认为真,该条件会永远成立,导致所有资产类型的数据都会被同步 - 运算符使用错误:第三版代码中使用
in运算符判断字符串是否存在于数组的逻辑错误,JS中in仅用于判断对象是否包含指定键,无法用于数组元素匹配,导致筛选条件完全失效 - 逻辑方向错误:所有改造代码均采用排除非目标资产类型的逻辑,容易出现遗漏,远不如直接匹配目标资产类型的写法稳定
可行解决方案
提供一个通用的自定义函数,不需要单独编写三个资产类型的函数,只要传入指定资产类型参数即可完成对应数据的筛选汇总,自动合并相同资产名称的数量,符合需求:
function filter_asset_by_type(asset_names, asset_types, quantities, target_type) { var result = []; var quantity_sum = {}; // 遍历所有主台账行数据 for (var i = 0; i < asset_types.length; i++) { var current_type = asset_types[i] ? asset_types[i].toString().trim() : ""; // 仅匹配目标资产类型的行 if (current_type === target_type) { var current_name = asset_names[i] ? asset_names[i].toString().trim() : ""; var current_quantity = quantities[i] ? Number(quantities[i]) : 0; if (current_name && current_quantity > 0) { // 汇总相同资产名称的数量 if (current_name in quantity_sum) { quantity_sum[current_name] += current_quantity; } else { quantity_sum[current_name] = current_quantity; } } } } // 转换为二维数组返回给表格 for (var name in quantity_sum) { result.push([name, quantity_sum[name]]); } return result; }
函数使用步骤
- 打开你的Google Sheets,点击顶部菜单「扩展程序」-「Apps 脚本」,把默认代码全部删除,粘贴上面的代码,点击保存按钮,命名项目后关闭脚本编辑器
- 假设你的主台账工作表名为
主台账,列顺序为:A=日期、B=资产名称、C=资产类型、D=数量 - 打开Asset A子表,在A1单元格直接输入公式:
=filter_asset_by_type('主台账'!B:B, '主台账'!C:C, '主台账'!D:D, "Asset A") - Asset B子表输入公式:
=filter_asset_by_type('主台账'!B:B, '主台账'!C:C, '主台账'!D:D, "Asset B") - Asset C子表输入公式:
=filter_asset_by_type('主台账'!B:B, '主台账'!C:C, '主台账'!D:D, "Asset C")
输入后公式会自动填充所有符合条件的资产名称和汇总数量,主台账新增数据后子表会自动同步更新,不会出现重复条目。
内容的提问来源于stack exchange,提问作者Anshuman Sharma
相关产品推荐
相关产品推荐

