Google apps script 除了ScriptDB,我还可以使用什么替代方案来存储一个大数组?(不使用外部数据库)

Google apps script 除了ScriptDB,我还可以使用什么替代方案来存储一个大数组?(不使用外部数据库),google-apps-script,Google Apps Script,我是不推荐使用的ScriptDB的用户。我对ScriptDB的使用相当简单:通过以下方式存储面板选项中包含的一定数量的信息: var db = ScriptDb.getMyDb(); function showList(folderID) { var folder = DocsList.getFolderById(folderID); var files = folder.getFiles(); var arrayList = []; for (var file in file

我是不推荐使用的ScriptDB的用户。我对ScriptDB的使用相当简单:通过以下方式存储面板选项中包含的一定数量的信息:

var db = ScriptDb.getMyDb();

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 = db.query({arrayName: 'savedArray'});
  if (result.hasNext()) {
    var savedArray = result.next();
    savedArray.arrayValue = arrayList;
    db.save(savedArray);
    }
  else {
    var record = db.save({arrayName: "savedArray", arrayValue:arrayList});
  }
    var mydoc = SpreadsheetApp.getActiveSpreadsheet();
    var app = UiApp.createApplication().setWidth(550).setHeight(450);
    var panel = app.createVerticalPanel()
                   .setId('panel');
    var label = app.createLabel("Choose the options").setStyleAttribute("fontSize", 18);
    app.add(label);
    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]);
      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 include(arr, obj) {
    for(var i=0; i<arr.length; i++) {
        if (arr[i] == obj) // if we find a match, return true
            return true;    }
    return false; // if we got here, there was no match, so return false
 }

function submit(e){
  var scriptDbObject = db.query({arrayName: "savedArray"});
  var result = scriptDbObject.next();
  var arrayList = result.arrayValue;
  db.remove(result);
  // continues...
 }
var db=ScriptDb.getMyDb();
功能显示列表(folderID){
var folder=DocsList.getFolderById(folderID);
var files=folder.getFiles();
var arrayList=[];
for(文件中的var文件){
file=文件[文件];
var thessename=file.getName();
var thesesId=file.getId();
var thesesDoc=DocumentApp.openById(thesesId);
对于(var child=0;child对于(var i=0;i,可以使用HtmlOutput类存储字符串

 var output = HtmlService.createHtmlOutput('<b>Hello, world!</b>');
 output.append('<p>Hello again, world.</p>');
 Logger.log(output.getContent());
var output=HtmlService.createHtmlOutput('Hello,world!');
append(“再次你好,世界。

”); Logger.log(output.getContent());

有一些方法可以附加、清除和获取HtmlOutput对象的内容

可能会创建一个Blob:

然后,可以将blob中的数据作为字符串获取


然后,如果您需要,您可以将字符串转换为正确的JSON格式的对象。

首先,如果您达到了属性服务的限制,我建议您考虑另一种外部存储,因为您正在处理大量数据,这里给出的任何解决方法都可能会更慢、更有效icient然后简单地使用专用服务

当然,您也可以考虑将数据拆分并使用多个属性等方法,使其不受properties服务的限制


另一种选择是使用谷歌文档或表格来存储字符串。当您需要再次拉数据时,您可以简单地访问该片断并获得字符串,但这可能取决于字符串的大小。一目了然,看起来您只是在驱动器上的文件夹上拉数据,因此您可以考虑WRITI。将其转换为一张工作表,这样您甚至可以以用户友好的方式显示信息。鉴于您已经使用了数组,如果您将它们转换为2D数组,您可以轻松地将它们写入工作表。

布鲁斯·麦克弗森已经做了大量工作。查看他的cDbAbstraction库,然后您可以轻松地剪切和更改哪个数据库您可以使用和比较性能,甚至可以创建一个cDbAbstraction库来使用HTMLOutput(我喜欢这个想法,Sandy,)

您尝试存储的属性有多大?GAS的限制为9kB/属性和500kB/属性存储。如果低于500kB,您可能可以将数据存储在多个属性中?所有这些都尝试在今天实施blob解决方案。我对blob解决方案有问题……:/maybe将您目前掌握的内容发布到一个新问题。