不使用 Sheets API 从 Google Sheets 获取数据

Fun*_*net 1 javascript get google-sheets google-apps-script

我创建了一个应用程序(React Native),需要在其中显示谷歌表单的响应,因此我创建了响应表。

虽然 Sheets API 将是最好的解决方案,但我不想使用它(除非没有其他选择)。

有没有办法在不使用 Google API 的情况下从工作表中获取数据(csv/json/arrays?/其他任何内容)?我只想要单元格中的值,不需要其他任何东西。

笔记:

  • 我想用 JavaScript 解析数据。

Tan*_*ike 7

我相信你的目标如下。

  • 您希望在不使用 Sheets API 的情况下从 Google 电子表格中检索值。
    • 据我了解,在这种情况下,您希望在不使用访问令牌和 API 密钥的情况下检索值。
  • 您想使用 Javascript 来实现这一点。

问题和解决方法:

当 Google Spreadsheet 与 Sheets API 一起使用时,需要使用访问令牌和 API 密钥。当您想在不使用访问令牌和 API 密钥的情况下从 Google 电子表格中检索值时,在本答案中,我想建议使用由 Google Apps 脚本创建的 Web Apps 进行以下解决方法。此解决方法的流程如下。

  1. 从 Javascript 向 Web 应用程序发出请求。
  2. 在 Web Apps 中,值是从 Google 电子表格返回的。
    • 在此解决方法中,无需公开共享 Google 电子表格。
  3. 通过 Javascript 从 Web 应用程序中检索值。

用法:

请执行以下流程。

1. 创建 Google Apps 脚本的新项目。

Web Apps 的示例脚本是 Google Apps 脚本。因此,请创建一个 Google Apps 脚本项目。

如果您想直接创建,请访问https://script.new/。在这种情况下,如果您尚未登录 Google,则会打开登录屏幕。所以请登录谷歌。这样,Google Apps 脚本的脚本编辑器就打开了。

2. 准备脚本。

请将以下脚本(Google Apps 脚本)复制并粘贴到脚本编辑器中。该脚本适用于 Web 应用程序。

function doGet(e) {
  const id = e.parameter.spreadsheetId;
  const sheetName = e.parameter.sheetName;
  const sheet = SpreadsheetApp.openById(id).getSheetByName(sheetName);
  const values = sheet.getDataRange().getValues();
  return ContentService.createTextOutput(JSON.stringify({values: values})).setMimeType(ContentService.MimeType.JSON);
}
Run Code Online (Sandbox Code Playgroud)

3. 部署 Web 应用程序。

  1. 在脚本编辑器上,通过“发布”->“部署为 Web 应用程序”打开一个对话框。
  2. 对于“执行应用程序为:”选择“我”
    • 这样,脚本就会以所有者身份运行。
  3. “谁有权访问该应用程序:”选择“任何人,甚至匿名”
    • 在这种情况下,不需要请求访问令牌。我认为我推荐此设置来实现您的目标。
    • 当然,您也可以使用访问令牌。届时,请将其设置为“任何人”。请包含访问令牌的范围https://www.googleapis.com/auth/drive.readonly和范围。https://www.googleapis.com/auth/drive访问 Web 应用程序需要这些范围。
  4. 单击“部署”按钮作为新的“项目版本”。
  5. 自动打开“需要授权”对话框。
    1. 单击“查看权限”。
    2. 选择自己的帐户。
    3. 单击“此应用程序未经验证”处的“高级”。
    4. 点击“转到###项目名称###(不安全)”
    5. 单击“允许”按钮。
  6. 单击“确定”。
  7. 复制 Web 应用程序的 URL。就像是https://script.google.com/macros/s/###/exec
    • 当您修改 Google Apps 脚本时,请重新部署为新版本。这样,修改后的脚本就会反映到Web Apps中。请小心这一点。

4. 使用 Web 应用程序运行该函数。

您可以使用以下脚本从 Google 电子表格中检索值。

const baseUrl = "https://script.google.com/macros/s/###/exec";  // Please set your Web Apps URL.
const para = {
  spreadsheetId: "###",  // Please set your Google Spreadsheet ID.
  sheetName: "Sheet1"  // Please set the sheet name you want to retrieve the values.
};
const q = new URLSearchParams(para);
const url = baseUrl + "?" + q;
fetch(url)
  .then(res => res.json())
  .then(res => {
    const values = res.values;
    console.log(values);
  });
Run Code Online (Sandbox Code Playgroud)

如果您想使用curl命令测试上述Web Apps,也可以使用以下curl命令。

$ curl -L "https://script.google.com/macros/s/###/exec?spreadsheetId=###&sheetName=Sheet1"
Run Code Online (Sandbox Code Playgroud)

笔记:

  • 当您修改Web Apps的脚本时,请将Web Apps重新部署为新版本。这样,最新的脚本就会反映到 Web 应用程序中。请小心这一点。
  • 最近,在我的环境中,我确认当使用 Javascript 从公开共享的电子表格和发布到 Web 的电子表格中检索值时,会发生与 CORS 相关的错误。我担心您的环境中也可能会出现此类问题。所以为了实现你的目标,我建议使用Web Apps。在这种情况下,我已经确认没有发生错误。

参考: