我不会在没有搜索和阅读文档的情况下问这个问题。到目前为止我花了2天。我确定我错过了什么。我正在尝试在驱动器电子表格上实施谷歌身份验证。我已经尝试了所有方法,但仍然收到错误消息(redirect_uri_mismatch)。基本上,我想要一个带有登录屏幕的侧面板。当用户允许访问时,用户单击按钮,auth magic 运行并重定向到另一个打印“成功”的 html。
创建凭据
2.1 客户端 ID:
131579675294-jc1c0ckuaa7n7ih7eevg19cisthgt00e.apps.googleusercontent.com
2.2 客户端密码:XaebFsC18qfMmcZJKgokLEYo
设置回调uri:
https://script.google.com/macros/d/MCgMJPIdD1bbeG1PsFaNug8uUifae5TWT/usercallback
项目密钥: MCgMJPIdD1bbeG1PsFaNug8uUifae5TWT
脚本 ID: 1DYEShH45-AtikbEwfAG8w9P7Y39FHhCB-nGHWHOW4mUtq5DZLvubDxev
据说 projectKey 已被弃用,而是需要使用脚本 ID,但两者都不起作用。
我使用 oauth2 所以我添加了外部库:1B7FSrk5Zi6L1rSxxTDgDEUsPzlukDsi4KGuTMorsTQHhGBzBkMun4iDF
说明:我的 gs 文件有以下代码。我有一个侧边栏,上面有一个按钮,单击时会调用 onSignIn()。我希望通过身份验证访问电子表格。首先,我想查看授权页面。接受后,我希望它重定向到一个页面,即 callback_uri 并显示一些简单的内容。但是它确实给了我错误。具有讽刺意味的是,我创建的端点浏览器链接工作并成功重定向。
端点浏览器链接
我究竟做错了什么?感谢您的帮助。谢谢。
var CLIENT_ID = '131579675294-jc1c0ckuaa7n7ih7eevg19cisthgt00e.apps.googleusercontent.com';
var CLIENT_SECRET = 'XaebFsC18qfMmcZJKgokLEYo';
function onSignIn() {
var service = getService();
if (!service.hasAccess()) {
var authorizationUrl = service.getAuthorizationUrl();
var template = HtmlService.createTemplate('<a href="<?= authorizationUrl ?>" target="_blank">Authorize</a>');
template.authorizationUrl = authorizationUrl;
var page = template.evaluate();
return HtmlService.createHtmlOutput( page);
}
} …Run Code Online (Sandbox Code Playgroud) 我正在尝试将一些数据从一张纸复制并粘贴到另一张纸上。我有以下数据结构->
我要复制的内容(sheet1):
dataname value
data1 value1
data2 value2
data3 value3
data4 value4
Run Code Online (Sandbox Code Playgroud)
最终结果(sheet2):
day1 value1 value2 value3 value4
day2 value1 value2 value3 value4
day3 value1 value2 value3 value4
Run Code Online (Sandbox Code Playgroud)
如您所知,sheet1 上的数据每天都会刷新并复制到 sheet2 上。
这是我正在使用的脚本:
function getdata() {
var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("sheet1");;
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("sheet2")
var data = ss.getRange('B1:B10').getValues()[0][0];
sheet.appendRow([data[1],data[1],data[2],data[3],data[4],data[5],data[6]]);
}
Run Code Online (Sandbox Code Playgroud)
我知道这是一个非常基本的问题,但我仍然不明白getValues()真正的工作原理。使用上面的脚本,我得到以下结果:
undefined undefined undefined undefined undefined undefined undefined
Run Code Online (Sandbox Code Playgroud)
这是为什么 ?我该怎么办 ?
谢谢 !
我一直在寻找一种基于另一种单元格颜色更改单元格值(例如,如果单元格颜色为红色则为“文本”)的方法?
有没有办法做到这一点?
我知道有一种方法可以根据单元格值更改单元格颜色,但我想要相反的方式,
有人有想法吗?无论是脚本还是公式
我正在尝试在创建的文件夹中创建一个新的 Google 表格,但内容类型有问题。
我已经搜索了这个错误,但没有找到任何东西。大多数搜索都会出现MimeType错误,但我认为这不是问题所在。下面是我正在使用的代码:
var ss = SpreadsheetApp.getActiveSpreadsheet();
var newFolder = DriveApp.getFolderById("MyID").createFolder("New Folder");
newFolder.createFile("myFileName",ss,MimeType.GOOGLE_DOCS);
Run Code Online (Sandbox Code Playgroud)
每当我在电子表格中运行它时,都会收到以下错误:
无效参数:file.contentType(第 3 行,文件“代码”)
我曾尝试使用“”作为createFile.
我想将 html 表单中的图像通过 http 发布到谷歌应用程序脚本网络应用程序,然后将该图像添加到谷歌驱动器。
我的应用程序脚本如下。
function doPost(e){
var date = new Date();
var timestamp = date.toString()
var adress = e.parameter.adress;
var cost = e.parameter.cost;
var item = e.parameter.item;
var check = e.parameter.image;
//add file to drive
var destination_id = "some ID"
var destination = DriveApp.getFolderById(destination_id);
destination.createFile(check);
};
Run Code Online (Sandbox Code Playgroud)
当我执行时,它返回一个错误; cannot find method: createFile(String)
我认为这是因为“检查”是一个字符串,我想将提交的图像转换为Blob。
我怎样才能做到这一点?
我正在创建一个应用程序,要求用户从他们的云端硬盘中选择一个文件夹。我正在努力设置 Picker API。
按照本文档,我使用他们的“Hello World”脚本设置了我的项目,但是在更改了“devlopedKey”和“clientID”之后,我测试了代码以接收错误:
错误 401,invalid_client,没有注册的来源。
在四处搜索后,我发现了将客户端凭据中的 Authorized JavaScript origin 设置为http://localhost:8888 的建议。这样做后,我收到一个不同的错误:
错误 400,origin_mismatch
对不起,如果这是我的一个简单错误,任何帮助将不胜感激。
我正在寻找一种方法来查找特定列的最后一行(带有数据)。假设 A 列第 100 行的最后一个数据项,B 列第 50 行的最后一个数据项。
.getLastRow(); 将永远返回 100 给我。
我需要一种简单的方法来获得 50(这是 B 列中最后一个非空行的行号)。
我不能使用循环。这非常重要,因为有数千行,它只会花费太多时间。
我用谷歌搜索了很多,但所有的答案都涉及循环。
确定我把它弄下来了,但就是做对了。有一个脚本设置为从一张纸中获取数据并将其放入另一张纸中,我已经这样做了,但是在复制时会留下空白,我无法弄清楚如何解决它。我确定在代码中,我打了问号的地方就是问题所在。
我试过把 i, last, last+1, 10, 12 但这些都不起作用,感觉我错过了一些小东西来解决这个问题。下面是代码,如果需要,可以查看工作表的链接(工作表仅供我学习,如果您愿意,可以提供一个基本示例)。
提前致谢,如果代码可以写得更好,请让我知道,因为我还在学习:)
function copyInfo() {
var app = SpreadsheetApp;
var copySheet = app.getActiveSpreadsheet().getSheetByName("Copy");
for (var i = 2; i <12; i++) {
var getInfo = copySheet.getRange(2,2,i,2).getValues();
// get the info from range above - start at row 2 on column 2 (b), get number of rows i , number of columns = 2, b,c
var last = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Paste").getLastRow();
var pasteSheet = app.getActiveSpreadsheet().getSheetByName("Paste");
// Tell it where you want the info to go to …Run Code Online (Sandbox Code Playgroud) Given this code in nodejs:
const crypto = require('crypto');
const message = 'message to sign';
const secret = 'mysecret';
const signature = crypto.createHmac('sha256', secret).update(message).digest('hex');
console.log(signature);
Run Code Online (Sandbox Code Playgroud)
The output is 40d4c57eed56968de0f3a22e73ebf8abc6ab4c38bba95fd2c85dd4dc90bf36b9
With the help of the answers here, I have exactly replicated this behavior in Google Apps Script, with this function:
//conversion from byte array taken from: /sf/answers/1955342161/
function makeHmacSignature(macAlg, message, secret) {
return Utilities.computeHmacSignature(macAlg, message, secret).reduce(function(str,chr){
chr = (chr < 0 ? chr + 256 : chr).toString(16);
return str + …Run Code Online (Sandbox Code Playgroud) 我想向用户显示一个冗长脚本的进度。理想情况下,我想使用running script cancel dismiss运行 Google 脚本时出现的黄色吐司
我知道你可以抛出自定义错误,但如何将自定义消息抛出到这个黄色框。
或者另一种选择也可以。不是 msgbox,因为它会停止脚本。