公式值的 Google 脚本返回 #N/A

1 formula google-sheets google-apps-script google-sheets-api

当我在脚本中读取时,F 列有一个公式值,显示 #N/A。

下面是一个非常简单的脚本代码,但我无法理解为什么它显示#N/A,我没有实现任何触发器。

var spreadsheet = 
         SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1');
         var values = spreadsheet.getDataRange().getValues();
         Logger.log(values[1][0]);
         Logger.log(values[1][5]);
Run Code Online (Sandbox Code Playgroud)

https://docs.google.com/spreadsheets/d/18EsMMrC1IbzkZaIb5aIx3OfwvN1VzdmHm5B-YVuCMs4/edit?usp=sharing

Tan*_*ike 5

下面的修改怎么样?

\n

从 :

\n
var values = spreadsheet.getDataRange().getValues();\n
Run Code Online (Sandbox Code Playgroud)\n

到 :

\n
var values = spreadsheet.getDataRange().getDisplayValues();\n
Run Code Online (Sandbox Code Playgroud)\n

的详细信息getDisplayValues()这里

\n

如果我误解了你的问题,我很抱歉。

\n

编辑

\n

当我尝试使用 Sheet API v4 检索数据时,出现以下错误消息。

\n
"#N/A (Historical GOOGLEFINANCE data is not available outside of the Google Sheets UI.)"\n
Run Code Online (Sandbox Code Playgroud)\n

所以我调查了这个错误。我找到了以下文件。

\n
\n

我们想让您了解 GOOGLEFINANCE 功能的一个小变化,这使得您可以轻松地将当前或历史证券信息直接提取到 Google 表格中的电子表格中。从今天开始,将无法使用 Apps 脚本或 API 下载历史数据或在表格之外访问历史数据。如果您有一个包含 GOOGLEFINANCE 函数生成的历史数据的电子表格,并且您尝试下载该电子表格或通过 Apps 脚本或 API 访问该电子表格,则相应的单元格将显示 \xe2\x80\x9c#N/A。\xe2\x80\ x9d 您仍然可以从表格应用程序中查看历史数据,并且仍然可以下载当前数据并通过 Apps 脚本或 API 访问当前数据。今后使用 GOOGLEFINANCE 功能时请牢记这一点。

\n
\n

文档:https ://gsuiteupdates.googleblog.com/2016/09/historical-googlefinance-data-no-longer.html

\n

更新于 2022 年 7 月 30 日:

\n

2022 年 5 月 18 日,我注意到可以使用 Google Apps 脚本检索电子表格上 GOOGLEFINANCE 的值。

\n

测试:

\n

将以下示例公式放入电子表格中。

\n
=GOOGLEFINANCE("NASDAQ:GOOG","price",DATE(2022,5,1),DATE(2022,5,10),"DAILY")\n
Run Code Online (Sandbox Code Playgroud)\n

该示例情况的图像如下。

\n

在此输入图像描述

\n

当使用以下带有电子表格服务(SpreadsheetApp)的示例脚本时,

\n
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1");\nconst values = sheet.getDataRange().getDisplayValues(); // or getValues()\nconsole.log(values);\n
Run Code Online (Sandbox Code Playgroud)\n

并且,当使用以下具有 Sheets API 的示例脚本时,

\n
const spreadsheetId = SpreadsheetApp.getActiveSpreadsheet().getId();\nconst values = Sheets.Spreadsheets.Values.get(spreadsheetId, "Sheet1").values;\nconsole.log(values);\n
Run Code Online (Sandbox Code Playgroud)\n

得到以下结果。

\n
[\n  ["Date", "Close"],\n  ["2022/05/02 16:00:00", "2343.14"],\n  ["2022/05/03 16:00:00", "2362.59"],\n  ["2022/05/04 16:00:00", "2451.5"],\n  ["2022/05/05 16:00:00", "2334.93"],\n  ["2022/05/06 16:00:00", "2313.2"],\n  ["2022/05/09 16:00:00", "2261.68"]\n]\n
Run Code Online (Sandbox Code Playgroud)\n

笔记:

\n
    \n
  • 不幸的是,我在官方文档中找不到这个规范的变化。而且,我不确定这是否是当前的规范。因此,这种情况可能会在未来的更新中得到改变。请注意这一点。
  • \n
\n

参考:

\n\n