javascript - 获取传递给 Apps 脚本中 e.parameter 的 Blob 的字符串值

标签 javascript google-apps-script google-sheets blob

我正在使用这段代码将 blob 传递给函数:

function submit(e){
  var arrayBlob = e.parameter.arrayBlob;
  Logger.log("arrayBlob #2 = " + arrayBlob.getDataAsString()); 

这是我得到的错误:

Execution failed: TypeError: Can not find getDataAsString function in the Blob object.'arrayBlob'

如何获取此 blob 的字符串值?

这是我的代码:

function showList(folderID) {
  var folder = DocsList.getFolderById(folderID);
  var files = folder.getFiles();
  var arrayList = [];
  for (var file in files) {
    file = files[file];
    var thesesName = file.getName();
    var thesesId = file.getId();
    var thesesDoc = DocumentApp.openById(thesesId);
    for (var child = 0; child < thesesDoc.getNumChildren(); child++){
    var thesesFirstParagraph = thesesDoc.getChild(child);
    var thesesType = thesesFirstParagraph.getText();
      if (thesesType != ''){
         var newArray = [thesesName, thesesType, thesesId];
         arrayList.push(newArray);
         break;
         }
      }
   }
  arrayList.sort();
  var result = userProperties.getProperty('savedArray');
    arrayList =  JSON.stringify(arrayList);
    var arrayBlob = Utilities.newBlob(arrayList);
    Logger.log("arrayBlob #1 = " + arrayBlob.getDataAsString()); // Here it`s OK
    var mydoc = SpreadsheetApp.getActiveSpreadsheet();
    var app = UiApp.createApplication().setWidth(550).setHeight(450);
    var panel = app.createVerticalPanel()
                   .setId('panel');
    panel.add(app.createHidden('arrayBlob', arrayBlob)); 
    var label = app.createLabel("Selecione os itens desejados").setStyleAttribute("fontSize", 18);
    app.add(label);
    arrayList =  JSON.parse(arrayList);
    panel.add(app.createHidden('checkbox_total', arrayList.length)); 
    for(var i = 0; i < arrayList.length; i++){
      var checkbox = app.createCheckBox().setName('checkbox_isChecked_'+i).setText(arrayList[i][0]);
      Logger.log("arrayList[i][0] = " + arrayList[i][0]);
      Logger.log("arrayList[i] ====> " + arrayList[i]);
      panel.add(checkbox);
   }
   var handler = app.createServerHandler('submit').addCallbackElement(panel);
   panel.add(app.createButton('Submit', handler));
   var scroll = app.createScrollPanel().setPixelSize(500, 400);
   scroll.add(panel);
   app.add(scroll);
   mydoc.show(app);
}

function submit(e){
  var arrayBlob = e.parameter.arrayBlob;
  Logger.log("arrayBlob #2 = " + arrayBlob.getDataAsString()); 


 // Continues...
}

我希望该解决方案能与多个用户同时使用该脚本一起工作。

最佳答案

更新:

添加任何函数的全局变量OUTSIDE:

var arrayBlob = Utilities.newBlob("dummy data");

function showList(folderID) {
   Code here ....
};

检查代码是否有权访问 blob:

function submit(e){
  Logger.log("arrayBlob.getDataAsString(): " + arrayBlob.getDataAsString());
  //More Code . . . 
}

此解决方案消除了在对话框中嵌入具有 blob 值的隐藏元素的需要。

你不需要这一行:

panel.add(app.createHidden('arrayBlob', arrayBlob));

我会对代码进行其他更改,但我只想说明主要问题。

旧信息:

在函数 showList() 中,方法 getDataAsString() 作用于名为 arrayBlob 的 blob。

Logger.log("arrayBlob #1 = " + arrayBlob.getDataAsString()); // Here it`s OK

submit()函数中,同样的方法不起作用。

var arrayBlob = e.parameter.arrayBlob;

在函数 showList() 中,代码将 newBlob 分配给变量 arrayBlob。因此 arrayBlob 可用于在其上使用 getDataAsString() 方法。

var arrayBlob = Utilities.newBlob(arrayList);

在函数 submit() 中,您试图将 arrayBlob blob 变量传递给 submit() 函数,并引用它与 e.parameter

如果在 submit() 函数中放置一个 Logger.log() 语句。

function submit(e){
  Logger.log('e: ' + e);
  Logger.log('e.parameter` + e.parameter);

  var arrayBlob = e.parameter.arrayBlob;

那些 Logger.log 语句应该在其中显示一些内容。如果 e.parameter 中没有任何内容,那么 .getDataAsString() 就没有任何内容可以处理。

看起来您正在将 arrayBlob 放入隐藏面板中。

panel.add(app.createHidden('arrayBlob', arrayBlob));

但是当对象被传递给 submit(e) 函数时,arrayBlob 可能不会被放入该对象。

所以,我要说的是:

Logger.log("arrayBlob #2 = " + arrayBlob.getDataAsString());

Line 可能非常好,但没有 arrayBlob 可以处理。这并没有解决您的问题,但您认为我能理解其中的一部分吗?

关于javascript - 获取传递给 Apps 脚本中 e.parameter 的 Blob 的字符串值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27805250/

相关文章:

regex - 匹配逗号,不包括括号中的逗号 - RE2 for Google Sheets

javascript - 处理剑道调度程序中的销毁事件

google-apps-script - Google App 脚本 - 为什么 getTemporaryActiveUserKey() 为唯一用户返回相同的值

arrays - AppS 脚本 : 'number of columns in the data does not match the number of columns in the range.' setValues method not reading array correctly?

javascript - google Apps 脚本中的 createFile() 无法正常运行

import - 没有标题的 Google 表格 IMPORTDATA()

validation - 具有过滤数据范围的数据验证下拉列表

javascript - 当用户单击推送通知时,打开 TWA 应用程序而不是 Web 应用程序

javascript - 调用不带括号的 jquery 扩展

javascript - ReactNative : Cannot update during an existing state transition (such as within `render` ). 渲染方法应该是 Prop 和状态的纯函数