标签: google-apps-script

在 Google App 脚本中共享日历

我正在尝试从电子表格构建日历,然后与域内的适当人员共享它们。我将其作为附加到电子表格的脚本来执行。

到目前为止,我可以读取正确的单元格并使用事件构建日历,但我遇到的问题是弄清楚如何与正确的人共享特定的日历。

我四处搜索并找到了相同的通用代码来手动请求网页允许访问,但我尝试使用但没有成功。我是否错过了其他人都认为你已经完成的步骤?我所做的只是在电子表格上编写一个脚本,是否有一些设置可以让它工作?

如果通过脚本无法实现,那么处理这种事情的最佳方法是什么?使用 PHP 和 cron 作业会更好吗?

我当前共享日历的代码是:

function onEdit() {
 calendarSharing('nic@xyz.com', 'boris@xyz.com');
};

function calendarSharing(user1,user2){

    var scope = 'https://www.google.com/calendar/feeds/';
    var fetchArgs = googleOAuth_('calenders', scope);
    var rawXml= "<entry xmlns='http://www.w3.org/2005/Atom' xmlns:gAcl='http://schemas.google.com/acl/2007'>"+
      "<category scheme='http://schemas.google.com/g/2005#kind' term='http://schemas.google.com/acl/2007#accessRule'/>"+
      "<gAcl:scope type='user' value='"+user2+"'></gAcl:scope>"+
      "<gAcl:role value='http://schemas.google.com/gCal/2005#owner'>  </gAcl:role></entry>"
    fetchArgs.method = 'POST';
    fetchArgs.payload = rawXml
    fetchArgs.contentType = 'application/atom+xml';

    try{
         var url='https://www.google.com/calendar/feeds/'+user1+'/acl/full'        
         var urlFetch=UrlFetchApp.fetch(url,fetchArgs)                         //Giving Permission To personal account as a owner
       }
    catch(err){
        var err1=err.toString()
        var ex='Exception: Request failed for  returned code 302'
        if(ex==err1.split('.')[0]){
              var tempCalenderUrl=[]
              tempCalenderUrl.id = err1.split('<A …
Run Code Online (Sandbox Code Playgroud)

calendar google-apps-script google-oauth

0
推荐指数
1
解决办法
3874
查看次数

是否有一种简单的格式可以通过脚本移动数据列?

我想将几行从一张纸移动到另一张纸,但我正在查看的所有脚本都没有解决这个问题。

例如,我想将Sheet1上的A、B、C列移动到Sheet2上的G、I、L列。

这可以做到吗?我对脚本编写非常陌生,并且没有我正在做的事情的示例。

谢谢。

google-sheets google-apps-script

0
推荐指数
1
解决办法
3165
查看次数

带有消息和秘密 Google 表格的 SHA512 哈希值

我对谷歌表格脚本编程很陌生。

我正在尝试使用消息计算 SHA512 哈希并使用我的密钥对其进行加密。

在 PDP 中,我有:$sign=hash_hmac('sha512',$message,$secret);

先感谢您!

hmac google-sheets sha512 google-apps-script

0
推荐指数
1
解决办法
1715
查看次数

如何从 Apps 脚本代码重命名电子表格

我有一个每天运行的自动计划脚本,并创建一个用于每天报告一些数据的表。工作表名称是 yyyy-MM-dd 格式的日期,我想使用脚本运行并创建新工作表时的日期更新电子表格名称。例如,我的电子表格名称是 MY_SPREAD_SHEET,今天执行脚本后,它应该更新为“MY_SPREAD_SHEET 2018-03-20”,并且在未来几天类似。我怎样才能做到这一点?

google-apps-script

0
推荐指数
1
解决办法
4219
查看次数

Google Apps 脚本 CardService.setContent 作为 HTML

我在我的 Google 脚本附加组件中使用 CardService。我正在尝试将setContent其作为 HTML 来读取,因为我正在从Index.html中读取它。但是在渲染时,它会将CSSJavascript作为文本打印,而不是在 Html 内容中使用它。

function buildPage() {
  var html = HtmlService.createHtmlOutputFromFile('Index').getContent();
  var card = CardService.newCardBuilder();
  card.setHeader(CardService.newCardHeader().setTitle('How do you feel ...'));
  var section = CardService.newCardSection()
    .setHeader("<h4>What do you want? </h4>");

  section.addWidget(CardService.newKeyValue()
    .setTopLabel('choose one')
    .setContent(html)
);
Run Code Online (Sandbox Code Playgroud)

这是我的Index.html

    <!DOCTYPE html>
    <html>
     <head>
      <base target="_top">
       <style>
           #things {
             position: absolute;
             top: 50%;
             left: 50%;
             color: green;
             margin-right: -50%;
             text-align: center;
          }
       </style>
     </head>
     <body>
       <p>List of things:</p>
       <ul id="things">
         <li>Loading...</li> …
Run Code Online (Sandbox Code Playgroud)

html javascript css google-apps-script gmail-addons

0
推荐指数
1
解决办法
3009
查看次数

简单的 For 循环 Google Apps 脚本

我正在尝试在 Google Apps 脚本中编写一个非常基本的 For 循环,它确实应该运行得很快。但是,当我执行它时,需要很长时间才能运行,直到出现运行时间太长的错误(错误:超出最大执行时间)。

代码是:

function myFunction() {

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var Sheet = ss.getActiveSheet();
  var LR = Sheet.getLastRow()

  for(var i=1;i=10;i++)

  {
   Logger.log(i);
  }

}
Run Code Online (Sandbox Code Playgroud)

难道我做错了什么?还是我的 Google Apps 脚本搞砸了?

google-sheets google-apps-script

0
推荐指数
1
解决办法
2863
查看次数

Google脚本复制公式结果的值

我必须将三个单元格从一张纸复制到另一张纸上才能处理该纸上的公式。然后我需要将公式输出复制到第一张纸上。我有适用于“输入单元格”的副本,但是当我对公式单元格使用同一行代码时,它不会采用正确的输入值。我认为我需要先选择一个单元格来遍历这些值,但它不起作用。这是原始代码。

var spreadsheet = SpreadsheetApp.getActive();

//copy values for formula cells
spreadsheet.getSheetByName('Sheet6').getRange(2,3).copyTo(spreadsheet.getSheetByName('student').getRange(1,1).activate(), {contentsOnly:true}); 
spreadsheet.getSheetByName('Sheet6').getRange(2,4).copyTo(spreadsheet.getSheetByName('student').getRange(2,1).activate(), {contentsOnly:true});    
spreadsheet.getSheetByName('Sheet6').getRange(2,5).copyTo(spreadsheet.getSheetByName('student').getRange(3,1).activate(), {contentsOnly:true});

//copy formula output to sheet
spreadsheet.getSheetByName('student').getRange(2,22).copyTo(spreadsheet.getSheetByName('Sheet6').getRange(2,6).activate(), {contentsOnly:true});
Run Code Online (Sandbox Code Playgroud)

谢谢

google-sheets google-apps-script

0
推荐指数
1
解决办法
7225
查看次数

查找 Google 表格中的所有复选框

自从 2018 年将复选框添加到原生 Google Sheets UI 以来,开发人员一直希望以编程方式读取它们或以某种方式处理它们,例如将它们视为“单选按钮”、将它们重置为“未选中”或将它们设置为“检查过”。

我们如何才能最好地在给定的 Google Sheet 中找到复选框,以便避免在操作其他单元格的状态时意外修改它们?

一种方法是检查工作表上的值并将任何true/false值视为复选框:

function getAllCheckboxes() {
  const wb = SpreadsheetApp.getActive();
  const checkboxes = [];

  wb.getSheets().forEach(function (sheet) {
    var rg = sheet.getDataRange();
    var values = rg.getValues();
    var sheetCheckBoxes = [];

    values.forEach(function (row, r) {
      row.forEach(function (val, c) {
        // Checkbox values are stored as `false` (unchecked) and `true` (checked)
        if (val === false || val === true) {
          sheetCheckBoxes.push({
            rowIndex: r,
            colIndex: c,
            value: val,
            r1c1: "R" + …
Run Code Online (Sandbox Code Playgroud)

checkbox google-sheets google-apps-script google-sheets-api

0
推荐指数
1
解决办法
1754
查看次数

隐藏/显示共享文件上特定用户的特定表格选项卡

我的谷歌文档在打开谷歌表格文件时应该提示一个登录框,并且根据密码,它应该显示一个特定的选项卡。例如,对于“password1”,它应该允许用户仅看到选项卡“Sheet1”,而其他工作表应该被隐藏。同样,对于“password2”,它应该允许用户仅查看和处理选项卡“Sheet2”。

我尝试运行以下代码,但它显示一些错误。

function showLoginDialog() {
    var sheet3 = SpreadsheetApp.getActiveSheet('Sheet3');
    sheet3.hideSheet();
    var sheet2 = SpreadsheetApp.getActiveSheet('Sheet2');
    sheet2.hideSheet();
    var sh = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet('Sheet1');      
    var ui = SpreadsheetApp.getUi();      
    var prompt = ui.prompt('Password','Enter Password',ui.ButtonSet.OK_CANCEL);      
    var response = prompt.getResponseText();      
    var button = prompt.getSelectedButton();  

    if(button==ui.Button.OK) {       
    if(response=='pwd3') {
            sheet3.activate();
        }//end of inner if
        if(response=='pwd2'){
            sheet2.activate();
        }
    }//end of main if
}//end of function
Run Code Online (Sandbox Code Playgroud)

Google 表格文件在打开时应要求输入密码,并且应根据密码显示相应的工作表。

google-sheets google-apps-script

0
推荐指数
1
解决办法
3320
查看次数

如何让deleteSheet适用于复杂的工作表名称

我有一个 Google 插件,可以管理 Google 电子表格中的几张工作表。它所做的事情之一是根据日期删除工作表,日期是它删除的工作表的名称。在我当前的开发阶段,我还添加了删除包含日期和其他术语的工作表的功能"script 6/5/2019",例如。

我使用与以日期命名的工作表相同的代码并对其进行了一些调整,但在删除工作表时它会返回错误:"Cannot find method deleteSheet(string)"

 if(sRemove==true) {
  SpreadsheetApp.getActiveSpreadsheet().toast('Finding Old Scripts', 'Status',3);
    for (var i = ss.getNumSheets()-1; i >= 0; i--) {
    
        var thisTab = ss.getSheets()[i].getName();
        if(thisTab.substr(0,6) =="script") {
        Logger.log(i+" "+thisTab+" is a script");
        var tabDate = new Date(thisTab.substr(8)); 
        //8 is the first digit of the date
        Logger.log(tabDate);
        var thisDate = new Date(todayDate);
  
        var patt = new RegExp("s");
        var res = patt.test(thisTab);
        Logger.log(i+" "+res);

        if(tabDate<thisDate && res==true) { 
           var ss = SpreadsheetApp.getActiveSpreadsheet();
           //ss.setActiveSheet(ss.getSheetByName(thisTab)); …
Run Code Online (Sandbox Code Playgroud)

google-sheets google-apps-script

0
推荐指数
1
解决办法
566
查看次数