AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / coding / 问题 / 79593756
Accepted
bricks96
bricks96
Asked: 2025-04-26 17:01:35 +0800 CST2025-04-26 17:01:35 +0800 CST 2025-04-26 17:01:35 +0800 CST

异常:由于访问负行导致访问电子表格时服务电子表格失败

  • 772

我最近看到了一篇关于这个错误的帖子,因为无法重现该错误,所以帖子被关闭了。我昨晚也遇到了同样的错误,而且很容易重现。我不确定这两者之间有什么联系,但以下是我遇到的情况。

我试图确定可到达的最远行。例如,即使你的工作表只有默认的 1000 行,你也可以写入=ROW(OFFSET(A1,9999,))reach A10000。它会返回 10000。经过反复试验,我发现可以使用嵌套的 来获取最远行OFFSET。

=row(offset(offset(offset($A$1,B1,),C1,),D1,))

最后可到达的行是第 行2,147,483,647。如果我尝试转到2,147,483,649或更远,就会出现OFFSET 计算结果为超出范围的错误。但就在那之前,我发现了一个虫洞。没错,我尝试2,147,483,648使用到达第 行=row(offset(offset(offset($A$1,700000000,),700000000,),747483647,)),结果返回的是-2,147,483,648。您可以在下面看到结果(E 列包含用于启用或禁用公式的复选框)。

B 碳 D 埃 F 格
7亿 7亿 747483646 真的 2147483647 =if(E1,行(偏移量(偏移量(偏移量($A$1,B1,),C1,),D1,)),)
7亿 7亿 747483647 真的 -2147483648 =if(E2,行(偏移量(偏移量(偏移量($A$1,B2,),C2,),D2,)),)
7亿 7亿 747483648 真的 #参考! =if(E3,行(偏移量(偏移量(偏移量($A$1,B3,),C3,),D3,)),)

它就像虫洞一样,通向纸张宇宙的另一边。我可以在那一行左右移动,甚至可以回到这一边,但我无法在那一边上下移动任何行。确实很奇怪,但没什么危害,我打算报告。

然而,后来当我尝试打开我的个人插件时,出现了以下运行时错误。异常:访问 ID 为 #### 的文档时,服务电子表格失败。[行:77,函数:myGlobalConfig,文件:core/lib/Config。

在费尽心思寻找问题根源之后,我突然冒出个念头,想看看虫洞是不是问题根源。结果也确实如此。我激活那个特定公式时收到了错误提示。禁用那个公式后,问题就消失了。

我甚至在绑定脚本中创建了一个基本函数,用于检索工作表的名称并使用 Toast 显示它。当激活中间那个公式时,出现了相同的错误,得出了负行的值。关闭后,错误就消失了。

这与之前提到的另一篇文章有​​联系吗?有人知道为什么这一行是负数吗?

google-sheets
  • 2 2 个回答
  • 62 Views

2 个回答

  • Voted
  1. Best Answer
    Lajos Arpad
    2025-04-26T18:11:16+08:002025-04-26T18:11:16+08:00

    2,147,483,647 等于 2^(31 - 1)。你的数字用 32 位表示,例如

    B31 B30 ... B0
    

    并且您可以用您喜欢的数基(可能是十进制)以数字形式表示它们,如下所示:

    2^31 + 2^30 + ... + 2^0
    

    这个数字可以用无符号或有符号的方式表示。当我们将其视为无符号数时,B31被视为该数字的二进制部分,实际上是 2^31。在这种情况下,您可以表示 [0, 2^32) = [0, 4294967296) = [0, 4294967295] 之间的整数。

    但是,如果数字表示为有符号数,则数字的第一位就是所谓的符号位,因此 B31 不代表数字的绝对值,而是表示其符号,0 表示正数,1 表示负数。这样,​​就可以表示 [-2147483648, 2147483647] 之间的整数。

    由于 2147483647 是最后一个要表示的数字,因此作为二进制数它看起来像这样:

    0111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111
    

    现在,如果你给它添加一个数字,那么你就会得到

    1000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
    

    其符号位为 1,因此它是一个负数,等于 -2^(-31) = -2147483648。

    因此,如果你在有限位上将最大正数加一,那么你增加的是一个以 0(符号位)开头、后面全为 1 表示的数,这会溢出为一个以 1(符号位)开头、后面全为 0 表示的负数。这就是你的工作表中发生的情况。

    • 1
  2. Wicket
    2025-04-26T22:57:03+08:002025-04-26T22:57:03+08:00

    从问题

    我尝试使用以下方法到达第 2,147,483,648 行=row(offset(offset(offset($A$1,700000000,),700000000,),747483647,)),得到的结果是 -2,147,483,648

    公式如果抛出行数,或者试图达到大于 10,000,000 的行数,那么在实际应用中是没有意义的,因为 Google Sheets 电子表格中所有工作表的最大单元格数就是这个数字。参考: https://support.google.com/drive/answer/37603 ?hl= en 。

    在调试 Google Sheets / Apps 脚本时,您最终可能会发现某些情况下的错误消息无法提供任何有用的故障排除信息。因此,创建一个最小完整示例 (MCE) 非常有助于查找公式/脚本是否存在问题,或者问题是否出在 Google 方面。

    关于 MCE 的创建,可能发现的问题之一是,它超出了一个众所周知的限制,但 Google 端的故障也可能是导致问题的原因。经验发现的问题之一是,繁忙的电子表格可能会由于版本历史记录功能的“限制”而失败。

    尝试自行寻找云平台限制时要小心,因为这可能会引发可能阻止您的帐户甚至网络的标志。

    在这种特定情况下,您可能希望从 Google Sheets 帮助菜单向 Google 提交有关您的公式的反馈。

    在我看来,OFFSET 不允许数字大于 10,000,000,原因如上所述。

    至于这是否与另一篇帖子“异常:访问电子表格时服务电子表格失败”相关,由于该帖子的原帖作者没有提供足够的详细信息,我们唯一可以确定的是,错误消息是相似的。另一个问题不太可能与使用嵌套 OFFSET 尝试访问无法获取的行有关,或者与获取超出最后一个数字的数字以二进制数表示有关(如上一个答案所述) 。

    • 0

相关问题

  • 如何计算两列中两个单元格匹配但不为空白的实例数?

  • 在谷歌表格中使用谷歌财务公式时如何自动化交换部分?

  • 需要帮助:创建匹配数据超链接的公式疑难解答

  • 如何使用查询根据多个复选框和下拉菜单进行过滤?

  • 使用 App 脚本检查单元格值与范围的比较

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    重新格式化数字,在固定位置插入分隔符

    • 6 个回答
  • Marko Smith

    为什么 C++20 概念会导致循环约束错误,而老式的 SFINAE 不会?

    • 2 个回答
  • Marko Smith

    VScode 自动卸载扩展的问题(Material 主题)

    • 2 个回答
  • Marko Smith

    Vue 3:创建时出错“预期标识符但发现‘导入’”[重复]

    • 1 个回答
  • Marko Smith

    具有指定基础类型但没有枚举器的“枚举类”的用途是什么?

    • 1 个回答
  • Marko Smith

    如何修复未手动导入的模块的 MODULE_NOT_FOUND 错误?

    • 6 个回答
  • Marko Smith

    `(表达式,左值) = 右值` 在 C 或 C++ 中是有效的赋值吗?为什么有些编译器会接受/拒绝它?

    • 3 个回答
  • Marko Smith

    在 C++ 中,一个不执行任何操作的空程序需要 204KB 的堆,但在 C 中则不需要

    • 1 个回答
  • Marko Smith

    PowerBI 目前与 BigQuery 不兼容:Simba 驱动程序与 Windows 更新有关

    • 2 个回答
  • Marko Smith

    AdMob:MobileAds.initialize() - 对于某些设备,“java.lang.Integer 无法转换为 java.lang.String”

    • 1 个回答
  • Martin Hope
    Fantastic Mr Fox msvc std::vector 实现中仅不接受可复制类型 2025-04-23 06:40:49 +0800 CST
  • Martin Hope
    Howard Hinnant 使用 chrono 查找下一个工作日 2025-04-21 08:30:25 +0800 CST
  • Martin Hope
    Fedor 构造函数的成员初始化程序可以包含另一个成员的初始化吗? 2025-04-15 01:01:44 +0800 CST
  • Martin Hope
    Petr Filipský 为什么 C++20 概念会导致循环约束错误,而老式的 SFINAE 不会? 2025-03-23 21:39:40 +0800 CST
  • Martin Hope
    Catskul C++20 是否进行了更改,允许从已知绑定数组“type(&)[N]”转换为未知绑定数组“type(&)[]”? 2025-03-04 06:57:53 +0800 CST
  • Martin Hope
    Stefan Pochmann 为什么 {2,3,10} 和 {x,3,10} (x=2) 的顺序不同? 2025-01-13 23:24:07 +0800 CST
  • Martin Hope
    Chad Feller 在 5.2 版中,bash 条件语句中的 [[ .. ]] 中的分号现在是可选的吗? 2024-10-21 05:50:33 +0800 CST
  • Martin Hope
    Wrench 为什么双破折号 (--) 会导致此 MariaDB 子句评估为 true? 2024-05-05 13:37:20 +0800 CST
  • Martin Hope
    Waket Zheng 为什么 `dict(id=1, **{'id': 2})` 有时会引发 `KeyError: 'id'` 而不是 TypeError? 2024-05-04 14:19:19 +0800 CST
  • Martin Hope
    user924 AdMob:MobileAds.initialize() - 对于某些设备,“java.lang.Integer 无法转换为 java.lang.String” 2024-03-20 03:12:31 +0800 CST

热门标签

python javascript c++ c# java typescript sql reactjs html

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve