- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
来自 node.js 应用程序(discord 机器人)我尝试使用 npm 包 google-spreadsheet 访问公共(public) googlesheet
我仔细遵循了每个步骤,但我只想使用 API key 身份验证方法,而不是风险更大的 Oauth 身份验证
(我的不和谐机器人是公开的,在heroku上,即使我使用环境变量,我也不想弄乱太多敏感信息)
在 google-spreadsheet.js 的文档中提到:
// OR use API key -- only for read-only access to public sheets
doc.useApiKey('YOUR-API-KEY');
我可以成功连接到 spreadsheet 并阅读它的标题并获取每张纸的标题但是当我打电话时等待sheet.loadCells();
它给了我以下错误
Google API error - [401]
Request is missing required authentication credential.
Expected OAuth 2 access token,
login cookie or other valid authentication credential.
See https://developers.google.com/identity/sign-in/web/devconsole-project.
如果可能,仅使用 API key 身份验证,正确的方式或仅读取单元格是什么?
这是我的完整代码:
const sheetId = "1Bny-ZsCG_oUuS0nTbR-7tBBZu47_ncS9qGYaMpuprWU"
var loaded = {}
if (message) {
message.reply("je me connecte à Google Sheets...")
}
const doc = new GoogleSpreadsheet(sheetId);
doc.useApiKey(process.env.GOOGLE_API_KEY);
await doc.loadInfo();
loaded.docTitle = doc.title;
loaded.sheets = {};
if (message) {
message.reply("...connection réussie, je récupère les infos...")
}
// get the spreadsheets
for (let s = 0; s < doc.sheetCount; ++s ) {
const sheet = doc.sheetsByIndex[s];
loaded.sheets[sheet.title] = {sheetReference:sheet};
loaded.sheets[sheet.title].data = []
await sheet.loadCells(); // <---------it seems to block here
for (let row= 0; row < sheet.rowCount; ++row) {
loaded.sheets[sheet.title].data.push([])
for (let col = 0; col < sheet.columnCount; ++col) {
let cell = sheet.getCell(row, col).value;
loaded.sheets[sheet.title].data[row].push(cell)
}
}
非常感谢!
最佳答案
如果我的理解是正确的,这个答案怎么样?请将此视为几个可能答案之一。
当我看到the source script时在 google-spreadsheet 中,似乎 sheet.loadCells()
使用 API key 通过 POST 方法进行请求。 Ref不幸的是,API key 无法使用 POST 方法。于是就出现了这样的错误。我认为这个问题的原因就是这个原因。例如,当使用 OAuth2 和服务帐户的访问 token 时,我可以确认 sheet.loadCells()
有效。从这种情况来看,这可能是一个错误或库的规范。
幸运的是,可以使用 API key 从公开共享的 Google 电子表格中检索这些值。因此,作为几种解决方法之一,在这个答案中,googleapis for Node.js被用作一种简单的方法。这是官方库。
首先,请安装googleapis。请设置spreadsheetId
和APIKey
变量。
const { google } = require("googleapis");
const spreadsheetId = "1Bny-ZsCG_oUuS0nTbR-7tBBZu47_ncS9qGYaMpuprWU"; // This is from your script.
const APIKey = "### your API key ###";
const sheets = google.sheets({version: "v4", auth: APIKey});
sheets.spreadsheets.get({ spreadsheetId: spreadsheetId }, (err, res) => {
if (err) {
console.error(err);
return;
}
sheets.spreadsheets.values.batchGet(
{
spreadsheetId: spreadsheetId,
ranges: res.data.sheets.map(e => e.properties.title)
},
(err, res) => {
if (err) {
console.error(err);
return;
}
console.log(JSON.stringify(res.data));
}
);
});
如果我误解了您的问题并且这不是您想要的方向,我深表歉意。
关于node.js - google-spreadsheet.js (npm) 只读访问不使用 API KEY 的单元格 - 需要 OAuth?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60095462/
我试图找出对电子表格建模的最佳方法(从数据库的角度来看),考虑到: 电子表格可以包含可变数量的行。 电子表格可以包含可变数量的列。 每一列可以包含一个值,但其类型未知(整数、日期、字符串)。 生成包含
我在谷歌表格中有一个整列的数组公式,例如C1中的以下公式 ArrayFormula(A1:A+B1:B) A列和B列有数据。 如果我要捕获一行并将其移动到另一个位置。一旦我移动它,该行 C 列中的相应
我正在尝试使用 Net::Google::Spreadsheets 读出(稍后甚至可能写入)Google 电子表格。 最样板脚本死于“登录失败”并且没有错误: use Net::Google::Spr
-我想做什么 我想在没有身份验证的情况下使用 Google 电子表格 API Java 库从 Google 电子表格获取数据。Google 电子表格是公开发布的。我想使用以下方法:com.google
使用phpSpredSheet开始使用PHP。测试基本代码会返回错误FATAL ERROR:UNAUCAT ERROR:CLASS“PhpOffice\PhpSpreadSheet\SpreadShe
我有一个 LibreOffice Calc 电子表格,用于跟踪工作中的应收账款。每张表都列出了发票及其状态(已付、未付等)以及有关每张发票的信息。我正在尝试创建一个汇总表,其中列出了每个表中的某些数据
我只是想让列自动调整大小。我正在使用 php 电子表格,但找不到如何操作。我搜索了其他问题,但他们使用了我在 lib worksheet.php 中找不到的函数,例如 getActiveSheet()
嗨,我在我的脚本参数中传递 2 个单元格时遇到问题: function myFunction(c1, c2) { var ss = SpreadsheetApp.getActiveSpreadshee
电子表格太漂亮了!单元格可以相互链接,如果任何公式/值/单元格之一发生任何变化,一切都会正确更新! 有谁知道电子表格如何做到这一点的一般概念? 我所说的是如果 A1 = 1、A2 = 2 和 A3 =
我有一个Powershell脚本,该脚本调用Google App Script函数。 运行Powershell脚本时,我可以在GCP项目的错误报告中看到以下错误: Exception: You do
我正在编写一个AWS Lambda代码,用于使用Golang访问和更新带有URL作为输入的电子表格。到目前为止,我已经可以按照Google指南使用OAuth客户端ID在本地访问电子表格-https:/
我们正在为我们的客户构建电子表格网络应用程序。他们可以上传任何 csv (20 MB+),然后对数据执行操作(如下所列)。数据高度非结构化。 在过去的几个月里,我们尝试了几种架构: 最初,我们以二维数
我遇到过这个 sumif 公式,我在 Google 搜索 N:N 时找不到任何帮助 =sumif(N:N,"Cat",C:C) 所以我根据文档理解了 SumIf: SUMIF(range, crite
我正在使用 C# WebApi 2,存储在未安装办公室的 Azure 服务器上。 我需要创建一个 excel 文件,并且知道 GemBox 电子表格不需要在机器上安装 office。 问题是我需要文件
我正在查看CellEntry API(https://developers.google.com/gdata/javadoc/com/google/gdata/data/spreadsheet/Cel
我需要使用谷歌电子表格 API 设置 majorDimension 值。我已经阅读了文档,它只是说我可以将值设置为 ROW 或 COLUMN,但它没有讨论如何在 URL 中执行此操作。 文档:http
如何使用 google spreadsheet feeds 从多张纸中获取提要api? 以下 URL 仅从第一张工作表中获取提要。在我的 spreadsheet我有 3 work sheets我也想获
请问有人可以帮忙解决 Google 电子表格中的一个问题吗? 更改“ field ”表中一个具体列中的值后,我想在更改该值时写入有关名称和时间的日志。但我无法真正意识到,如果我正在使用电子表格“ fi
我正在尝试创建一个多表 Excel 文档,到目前为止我一直在 PHP 中完成它 - 但使用 PHPExcel 总共大约 60,000 个电子表格单元格占用了 70MB 的 RAM。 我想知道是否有人有
在我的 Perl 脚本中,我使用 Spreadsheet::WriteExcel模块创建 Excel 文件。该文件包含一个表,其大小是动态的 - 即,在创建表之前我不知道它将有多少行。我希望表格的最后
我是一名优秀的程序员,十分优秀!