使用 Google Sheets 脚本比较多个列以检测不一致的支票数据

使用 google sheets 脚本比较多个列以检测不一致的支票数据

本文档旨在指导您使用 Google Sheets 脚本来比较两个工作表中支票号码和金额,以识别不一致的数据。我们将创建一个脚本,该脚本能够检测无效的支票号码、无效的支票金额以及支票号码匹配但金额不匹配的情况,并将结果记录到控制台中。通过学习本教程,您将能够有效地验证和清理财务数据,确保数据的准确性和一致性。

脚本实现

以下是一个 Google Apps Script 函数,用于比较两个工作表中的支票号码和金额,并识别不一致之处:

function CHK_BothChecks_V3() {  const ss = SpreadsheetApp.getActive();  const sh1 = ss.getSheetByName("OpenCheckDataBase");  const sh2 = ss.getSheetByName("IncomingChecks");  var rg1 = sh1.getRange("C1:D" + sh1.getLastRow()).getValues();  var rg2 = sh2.getRange("C1:D" + sh2.getLastRow()).getValues();  var correctChecks = 0;  var invalidChecks = 0;  var invalidAmounts = 0;  // 创建一个 Map 来存储 OpenCheckDataBase 中的支票号码和金额  const openCheckData = new Map();  for (let i = 0; i < rg1.length; i++) {    const checkNumber = rg1[i][0];    const checkAmount = rg1[i][1];    openCheckData.set(checkNumber, checkAmount);  }  for (var i = 0; i < rg2.length; i++) {    const checkNumber = rg2[i][0];    const checkAmount = rg2[i][1];    if (openCheckData.has(checkNumber)) {      // 支票号码存在于 OpenCheckDataBase 中      if (openCheckData.get(checkNumber) === checkAmount) {        correctChecks++;      } else {        invalidAmounts++;        console.log(`Row ${i + 1} in IncomingChecks has an inconsistent check amount.`);      }    } else {      // 支票号码不存在于 OpenCheckDataBase 中      invalidChecks++;      console.log(`Row ${i + 1} in IncomingChecks has an inconsistent check number.`);    }  }  console.log("Total number of valid check numbers is " + correctChecks);  console.log("Total number of invalid check numbers is " + invalidChecks);  console.log("Total number of invalid amounts is " + invalidAmounts);}

代码解释

获取工作表和数据范围:

SpreadsheetApp.getActive() 获取当前活跃的电子表格。getSheetByName() 获取名为 “OpenCheckDataBase” 和 “IncomingChecks” 的两个工作表。getRange(“C1:D” + sh1.getLastRow()).getValues() 获取两个工作表 C 列和 D 列的数据,其中 getLastRow() 用于动态获取最后一行的行号。

初始化计数器:

correctChecks:记录支票号码和金额都匹配的支票数量。invalidChecks:记录支票号码不匹配的支票数量。invalidAmounts:记录支票号码匹配但金额不匹配的支票数量。

使用 Map 存储 OpenCheckDataBase 数据:

创建一个 Map 对象 openCheckData,用于存储 “OpenCheckDataBase” 工作表中的支票号码和金额。这可以提高查找效率。遍历 “OpenCheckDataBase” 工作表的数据,将支票号码作为键,金额作为值存储到 openCheckData 中。

循环遍历 “IncomingChecks” 工作表的数据:

使用 for 循环遍历 “IncomingChecks” 工作表的数据。对于每一行数据,获取支票号码和金额。使用 openCheckData.has(checkNumber) 检查支票号码是否存在于 openCheckData 中。如果存在,则比较金额是否匹配。如果匹配,则 correctChecks 加 1;如果不匹配,则 invalidAmounts 加 1,并在控制台中输出错误信息。如果不存在,则 invalidChecks 加 1,并在控制台中输出错误信息。

输出统计结果:

在控制台中输出 correctChecks、invalidChecks 和 invalidAmounts 的值,用于统计分析。

使用方法

打开你的 Google Sheets 电子表格。点击 “工具” -> “脚本编辑器”。复制上面的代码并粘贴到脚本编辑器中。修改 sh1 和 sh2 的工作表名称,确保它们与你的实际工作表名称匹配。保存脚本。运行 CHK_BothChecks_V3 函数。 首次运行可能需要授权。查看控制台输出,了解不一致的支票数据。 可以通过 “查看” -> “日志” 打开控制台。

注意事项

确保 “OpenCheckDataBase” 和 “IncomingChecks” 工作表存在,并且包含支票号码和金额数据,分别位于 C 列和 D 列。此脚本假设数据从第一行开始,并且没有标题行。如果你的数据包含标题行,请修改 getRange() 函数的起始行号。此脚本区分大小写。如果支票号码或金额的大小写不一致,可能会导致错误的比较结果。在处理大量数据时,脚本的运行时间可能会较长。可以考虑使用批量更新或优化算法来提高性能。

总结

本教程提供了一个使用 Google Sheets 脚本比较多个列以检测不一致支票数据的完整解决方案。通过使用 Map 对象来提高查找效率,该脚本能够有效地识别无效的支票号码和金额,并将结果记录到控制台中。通过学习本教程,您可以轻松地验证和清理财务数据,确保数据的准确性和一致性。 您可以根据实际需求修改脚本,例如,将错误信息写入到工作表中,或者添加更多的验证规则。

以上就是使用 Google Sheets 脚本比较多个列以检测不一致的支票数据的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1510136.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月20日 05:48:06
下一篇 2025年12月20日 05:48:19

相关推荐

  • js如何创建自定义事件

    创建自定义事件需使用new event()或new customevent()构造函数,2. 通过dispatchevent()方法触发事件,3. 使用addeventlistener()监听事件,4. customevent可通过detail属性传递数据,5. 设置bubbles为true使事件冒…

    2025年12月20日 好文分享
    000
  • 什么是状态机?有限状态机的实现

    有限状态机常见实现方式有:基于枚举和switch/case语句,适合简单场景但难以维护;状态模式通过封装状态类提升扩展性但类数量增多;状态转换表以表格形式清晰表达转换规则但规模大时复杂;基于框架或库如Spring Statemachine可支持高级功能。选择方式需根据复杂度和需求权衡。 状态机,简单…

    2025年12月20日
    000
  • JS如何替换字符串

    replace()默认只替换第一个匹配项,需用正则加g标志实现全局替换;replaceAll()则直接替换所有匹配项,语法更简洁,但不支持正则表达式,且兼容性较差。 在JavaScript中,替换字符串主要依赖于String对象的 replace() 方法,它能让你用新的内容替换掉字符串中匹配到的部…

    2025年12月20日
    000
  • js 怎样处理鼠标滚轮事件

    最推荐的方式是监听wheel事件。它提供deltaY、deltaX和deltaMode属性,能精确获取滚动方向与幅度,通过preventDefault()阻止默认行为并结合{passive: false}实现自定义滚动,现代浏览器支持良好,优于旧的mousewheel和DOMMouseScroll事…

    2025年12月20日
    000
  • 什么是解释器模式?解释器的实现

    解释器模式通过定义语言文法并构建表达式树来解释执行特定语句,适用于SQL解析、正则表达式、编译器、规则引擎、数学表达式计算及游戏脚本解析等场景;其核心组件包括抽象表达式、终结符表达式、非终结符表达式和上下文,优点是扩展性好、实现灵活,但存在类数量多、性能较低、维护困难等缺点,适合文法简单且需动态解析…

    2025年12月20日
    000
  • File API如何操作文件

    File API的核心对象包括File、FileList、FileReader及URL.createObjectURL()。File代表用户选择的文件,包含名称、大小、类型等元数据;FileList是File对象的集合,用于处理多文件选择;FileReader负责异步读取文件内容,支持readAsT…

    2025年12月20日
    000
  • js如何实现页面平滑滚动

    实现页面平滑滚动主要有两种方式:一是使用javascript的scrollintoview({ behavior: ‘smooth’ })方法,简单高效,适用于大多数现代浏览器;二是结合requestanimationframe与window.scrollto()手动实现,可…

    2025年12月20日
    000
  • js 怎样用omit排除对象数组的某些属性

    在javascript中,从对象数组排除属性最直接的方法是使用map结合解构赋值和剩余操作符,1. 可通过({ excludedprop, …rest }) => rest排除单个或多个属性;2. 可封装通用omit函数支持单属性或数组传参,并利用set提升查找性能;3. 处理嵌套…

    2025年12月20日
    000
  • JS模块化是什么概念

    js模块化的核心答案是:它通过将代码拆分为独立、可复用的文件来解决命名冲突和依赖管理问题,提升代码的可维护性、可读性和协作效率。其本质是一种架构思维,通过作用域隔离和明确的导入导出机制实现高内聚、低耦合的代码组织方式。commonjs适用于node.js环境,采用同步加载;amd专为浏览器设计,支持…

    2025年12月20日
    000
  • js 怎样解压JSON数据

    解压json数据的核心方法是使用json.parse()函数,它能将json格式的字符串转换为可操作的javascript对象;2. 使用时需注意常见陷阱,如确保json字符串合法、避免解析null或undefined,并始终用try…catch处理可能的语法错误;3. 安全性方面应避免…

    2025年12月20日
    000
  • JS如何实现单向数据流

    单向数据流在js中的核心实现是通过“数据向下传递,事件向上冒泡”的模式,即父组件通过props将数据传给子组件,子组件通过事件或回调通知父组件修改状态,从而保证数据流向的清晰与可预测;在复杂场景中,采用中心化状态管理(如redux模式),通过定义全局状态、不可变更新的reducer函数、dispat…

    2025年12月20日
    000
  • 什么是DataView?二进制数据的操作

    DataView是JavaScript中操作二进制数据的核心工具,它基于ArrayBuffer提供灵活的字节级读写能力,支持多种数据类型和字节序控制,尤其适用于解析混合类型的复杂二进制协议。与仅支持单一类型的TypedArray不同,DataView允许在同一个缓冲区中按指定偏移量读写不同类型的值(…

    2025年12月20日
    000
  • JS如何实现扫码功能

    javascript实现扫码功能的核心是通过getusermedia api获取摄像头视频流,并结合jsqr、quaggajs或zxing-js等解码库对视频帧进行实时图像识别与解码,整个过程需在https环境下运行以确保权限正常调用;首先利用navigator.mediadevices.getus…

    2025年12月20日
    000
  • JS如何处理JSON数据

    JavaScript处理JSON的核心是JSON.parse()和JSON.stringify()。前者将JSON字符串转为JS对象,需用try…catch捕获非法格式错误;后者将JS对象序列化为JSON字符串,支持replacer和space参数优化输出。解析时需注意JSON语法严格性…

    2025年12月20日
    000
  • 递归方法检查嵌套数组中数字的出现次数

    本文将介绍如何使用递归算法来统计一个数字在多层嵌套数组中出现的次数,并判断其出现次数是否等于给定的目标次数。这种方法可以有效地处理任意深度的嵌套数组,避免了手动展开数组的复杂性。我们将通过一个辅助函数来计算数字的出现次数,并最终判断其是否满足给定的条件。 递归统计嵌套数组中数字出现次数 要解决在嵌套…

    2025年12月20日
    000
  • 使用递归检查嵌套数组中数字的出现次数

    本文将介绍如何使用递归算法来统计一个数字在多层嵌套数组中出现的次数,并判断该次数是否等于给定的目标次数。我们将提供一个清晰简洁的 JavaScript 代码示例,并解释其实现原理,帮助读者理解递归在处理嵌套数据结构时的应用。 递归统计嵌套数组中数字出现次数 在处理嵌套数据结构时,递归是一种非常强大的…

    2025年12月20日
    000
  • 递归算法:检查嵌套数组中数字出现的次数

    本文旨在提供一个使用递归算法检查嵌套数组中特定数字出现次数的解决方案。我们将通过一个 count 函数递归地遍历嵌套数组,统计目标数字的出现次数,然后通过 doesNumAppearKTimes 函数判断该次数是否等于给定的目标次数。本文将提供详细的代码示例和解释,帮助读者理解和应用该算法。 在处理…

    2025年12月20日
    000
  • JS中的树是什么?二叉树的基本概念

    二叉树是JavaScript中重要的分层数据结构,每个节点最多有两个子节点,广泛用于高效搜索、排序和数据组织;通过节点值比较实现插入与查找,常用遍历方式包括前序、中序和后序,其中中序遍历可得到有序数据;为避免树形退化为链表,需使用AVL或红黑树等平衡二叉树以维持O(log n)操作效率;删除节点时需…

    2025年12月20日
    000
  • js如何实现base64编码

    处理ascii字符串直接用btoa();2. 处理unicode字符串需先用textencoder转为uint8array,再转换为二进制字符串后使用btoa();3. 处理二进制数据如文件或图片应使用filereader的readasdataurl()方法获取base64编码。btoa()不能直接…

    2025年12月20日
    000
  • 什么是代数数据类型?ADT的概念

    ADT的核心组成部分包括:1. 和类型(Sum Types),表示一个值可以是多种类型之一,如Success或Failure;2. 积类型(Product Types),表示一个类型由多个字段组合而成,如包含name和age的Person类型;3. 构造器(Constructors),用于创建ADT…

    2025年12月20日
    000

发表回复

登录后才能评论
关注微信