Google apps script 除了ScriptDB,我还可以使用什么替代方案来存储一个大数组?(不使用外部数据库)
我是不推荐使用的ScriptDB的用户。我对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
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将您目前掌握的内容发布到一个新问题。