似乎使用新版本的谷歌电子表格不再可能使用 JS 下载整个谷歌电子表格。到目前为止,我一直在使用这种方法(对于之前创建的文件仍然可以正常工作):
var xhr = new XMLHttpRequest();
xhr.open('GET', 'https://docs.google.com/feeds/download/spreadsheets/Export?key=' + id + '&exportFormat=xlsx');
xhr.responseType = 'arraybuffer';
xhr.setRequestHeader('Authorization', 'Bearer ' + gapi.auth.getToken().access_token);
xhr.onload = function() {
...
};
xhr.send();
Run Code Online (Sandbox Code Playgroud)
https://docs.google.com/spreadsheets/d/_ID_/export?format=xlsx&id=_ID_
Run Code Online (Sandbox Code Playgroud)
但不幸的是,没有Access-Control-Allow-Origin标题,因此无法使用 JS 访问该链接。我还有其他可能下载文件吗?
Google Drive API 将导出 url 显示为:
https://docs.google.com/spreadsheets/export?id=_ID_&exportFormat=xlsx
Run Code Online (Sandbox Code Playgroud)
但也没有Access-Control-Allow-Origin标题。
是否有其他可能仅使用 JS 下载此文件?
考虑以下 Google 应用脚本代码:
var ui = SpreadsheetApp.getUi();
var result = ui.prompt(
'How many days in advance you want to receive the event notification?',
'',
ui.ButtonSet.OK_CANCEL);
Run Code Online (Sandbox Code Playgroud)
我希望对话框在输入框中显示默认值。
其次,我们是否有输入/发送数据的键盘快捷键?以便用户可以点击Enter(或喜欢)接受默认值或value-Enter 发送他/她自己的值。
modal-dialog google-api google-docs-api google-apps-script google-spreadsheet-api
我有一个 AngularJS + C#.NET OnePage 应用程序网站。目标是从我使用 C#(而不是使用 AngularJS)拥有的私有 Google 电子表格中检索 JSON。我阅读了各种 Google Sheets 文档和 API、OAuth 2.0 等,并尝试了一些示例,但它们似乎都不适合我。我看到有不同的方法可以从 Google 电子表格访问和检索数据,但它们仍然不适用于我的情况。谁能帮我?谢谢你。
编辑:我设法通过在 Google Developers Console=>Credentials=>Create Client ID 下创建其他应用程序类型来获得令牌。这是 C# 控制台应用程序:
using System;
using Google.GData.Client;
using Google.GData.Spreadsheets;
namespace MySpreadsheetIntegration
{
class Program
{
static void Main(string[] args)
{
////////////////////////////////////////////////////////////////////////////
// STEP 1: Configure how to perform OAuth 2.0
////////////////////////////////////////////////////////////////////////////
// TODO: Update the following information with that obtained from
// https://code.google.com/apis/console. After registering
// your application, these will be provided for you.
string …Run Code Online (Sandbox Code Playgroud) 我在Google表格上运行了一个非常简单的脚本。
该脚本接受Webhook POST,并将Webhook的内容写为电子表格中的新行。
该脚本可以正常运行,并且在接收数据时会写一个新行。
但是,出于某些原因,我从中发送Webhook的应用程序收到“ Bad Request 400”错误消息。即使该脚本可以工作,并且可以完成应有的工作。
这是我正在使用的脚本的小提琴。
如果我手动调用此方法,则会收到200响应:
var response = UrlFetchApp.fetch("https://script.google.com/macros/s/AKfycbx5ubu78yi5sj2D9z-2m3Wqog604wY1ENwP3pZstnB95Mc5_N3b/exec", options);
Run Code Online (Sandbox Code Playgroud)
这是一个带有表单的登录页面。提交表单时,表单数据通过Webhook推送到Google表格。(单击“单击我以测试此脚本”以查看该表单,如果提交该表单,则将看到实际的工作表。)
您好,我需要从谷歌电子表格 API 访问电子表格。我启用了 Google Sheets API 并添加了 API 密钥,但这不起作用!!! https://sheets.googleapis.com/v4/spreadsheets/[my_spreadsheet_id]/values/A1?key=[my_api_key]
结果是:403 - 调用者没有权限
但是,如果我为此电子表格提供公共访问权限 ---> 它有效!!!
结果是:200 - [正确请求的数据......]
我的问题是:如何从 API 访问私有电子表格?
我需要使用 php 的函数(如 file_get_contents())从我的网站读取和写入订单数据
我们正在使用Google Sheets API v4来获取和附加工作表中的行。当多个行追加请求同时发送时会出现问题,例如 4 个并发请求。有时,此类请求会发生交叉,并且某些附加的行会被其他请求覆盖。例如,如果每个请求只有 1 行用于追加,并且同时发送了 4 个此类请求,则只会创建 3 行。在顺序请求的情况下不会出现此问题。是已知问题吗?是否有任何解决方法如何实现行不被并发追加请求覆盖?
为了发送追加请求,我们使用批量更新请求端点:
POST https://sheets.googleapis.com/v4/spreadsheets/{spreadsheetId}:batchUpdate
批量更新请求的主体具有“appendCells”属性和适当的附加单元格请求数据:
根据API,我似乎无法指定将数据附加到何处的工作表。它将所有内容附加到第一个工作表中。真的是这样吗?
因为我可以创建一个包含多张纸的文件,但是我不能在第二张纸上写字?
我有一个应用程序允许我使用 API 密钥从 Google 电子表格中读取数据。我只是让 HTTP GET 到这个地址并得到一个带有数据的响应。
https://sheets.googleapis.com/v4/spreadsheets/18soCZy9H4ZGuu**********BeHlNY1lD8at-Pbjmf8c/values/Sheet1!A1?key=AIzaSyAYJ***********pB-4iKZjYf4y0vhXP8OM
Run Code Online (Sandbox Code Playgroud)
但是当我尝试使用 HTTP PUT 写数据来寻址时
https://sheets.googleapis.com/v4/spreadsheets/18soCZy9H4ZGuu**********BeHlNY1lD8at-Pbjmf8c/values/Sheet1!A4?valueInputOption=RAW?key=AIzaSyAYJ***********pB-4iKZjYf4y0vhXP8OM
Run Code Online (Sandbox Code Playgroud)
它给了我 401 错误。发出 PUT 请求的代码:
using (WebClient wc = new WebClient())
{
byte[] res = wc.UploadData(link, "PUT", Encoding.ASCII.GetBytes(textBox1.Text));
MessageBox.Show(Encoding.Default.GetString(res));
}
Run Code Online (Sandbox Code Playgroud)
此外,电子表格是完全公开的,任何人都可以在未经授权的情况下读写。我的猜测是我不能使用 API Key 将数据写入电子表格,唯一的方法是使用 OAuth。
更新: 所以我刚刚尝试使用 Google.Apis.Sheets.v4 来写入值,现在我几乎 100% 确定 API 密钥不能用于将数据写入 Google 电子表格。好吧,那我就用 OAuth 2.0。
我可以使用以下代码向 Google 电子表格添加新行:
$valueRange = new Google_Service_Sheets_ValueRange();
$valueRange->setValues(["values" => ['data1', 'data2']]);
$range = 'Sheet1!A1:A';
$conf = ["valueInputOption" => "USER_ENTERED"];
$service->spreadsheets_values->append($spreadsheetId, $range, $valueRange, $conf);
Run Code Online (Sandbox Code Playgroud)
我应该如何更改 setValues 参数以添加多行?
谢谢你。
更新
同时我使用这种方法:
$range_number = 1; // Keep spreadsheet header
$data = array();
for($i=0;$i<count($data);$i++){
$range_number++;
$range = 'Sheet1!A'.$range_number.':XX';
$values = array( array($data1[$i], $data2[$i], $data3[$i]) );
$data[] = new Google_Service_Sheets_ValueRange(
array( 'range' => $range, 'values' => $values )
);
}
$body = new Google_Service_Sheets_BatchUpdateValuesRequest(array(
'valueInputOption' => "USER_ENTERED",
'data' => $data
));
$result = $service->spreadsheets_values->batchUpdate($spreadsheetId, $body); …Run Code Online (Sandbox Code Playgroud) 问好!正如您通过查看我的个人资料可能已经猜到的那样,我对这个社区很陌生,所以我会尽我所能,尽可能详细和清楚地解释。:)
PS:如果您看到我可以做些什么来改进我的代码,请随时提出建议!(我有点初学者)
P.S2.:请记住,英语是我的第二语言,所以我可能会犯拼写/语法错误。
好的,这里是:
$client = new Google_Client();
$client->setAuthConfig(__DIR__ . '/client_secret.json');
$client->addScope(Google_Service_Drive::DRIVE);
$client->setIncludeGrantedScopes(true);
$service = new Google_Service_Sheets($client);
Run Code Online (Sandbox Code Playgroud)
上面的代码是我的初始化
while(($row = $mssql->fetch()) != false){
$nbRows++;
$data['MatchType'][] = $row['MatchType'];
$data['AccountNo'][] = $row['AccountNo'];
$data['AccountName'][] = $row['AccountName'];
}
Run Code Online (Sandbox Code Playgroud)
所以基本上上面的代码块所做的是填充一个以列标题命名的数组,其中包含来自数据库一列的所有值。它将对数据库的所有列执行此操作。所以你最终会得到类似的东西:
data (
MatchType (
[0] => Success
[1] => Failed
[2] => Pending
...
)
AccountNo (
[0] => 12345
[1] => 23456
[2] => 34567
...
)
AccountName (
[0] => Family Dental
[1] => Chez Germain et ses amis!
[2] => 123 travellers's …Run Code Online (Sandbox Code Playgroud)