Performance 在谷歌应用程序脚本中获取边框最有效的方法是什么
在谷歌应用程序脚本中获取边界详细信息的最佳方法是什么 我在GAS文档中看不到任何带有边框的内容,因此我不得不求助于通过电子表格API获取边框 这是可行的,除了当边界数量变大时,需要很长时间才能返回,或者根本不返回 有更好的方法吗Performance 在谷歌应用程序脚本中获取边框最有效的方法是什么,performance,google-apps-script,border,google-sheets-api,Performance,Google Apps Script,Border,Google Sheets Api,在谷歌应用程序脚本中获取边界详细信息的最佳方法是什么 我在GAS文档中看不到任何带有边框的内容,因此我不得不求助于通过电子表格API获取边框 这是可行的,除了当边界数量变大时,需要很长时间才能返回,或者根本不返回 有更好的方法吗 var fieldsBorders = 'sheets(data(rowData/values/userEnteredFormat/borders))'; var currSsId = SpreadsheetApp.getActiveSpreadsheet().get
var fieldsBorders = 'sheets(data(rowData/values/userEnteredFormat/borders))';
var currSsId = SpreadsheetApp.getActiveSpreadsheet().getId();
var activeSheet = SpreadsheetApp.getActiveSheet();
var name = activeSheet.getName();
var data = Sheets.Spreadsheets.get(currSsId, {
ranges: name,
fields: fieldsBorders
});
- 您希望减少从电子表格中的图纸检索边框的过程成本
- 当我为26 x 1000单元格设置边框并运行脚本时,在我的环境中,处理时间大约为50秒。
- 对于这种情况,您希望进一步降低成本
- 你的回复评论是
也许是一张更大的纸,不管怎样,50年代是一个很长的时间来获得边界。其他的加油需要很短的时间才能完成。您能确认这是获取边界的唯一方法吗?
var ss = SpreadsheetApp.getActiveSpreadsheet();
var fileId = ss.getId();
var sheetName = ss.getActiveSheet().getName();
var token = ScriptApp.getOAuthToken();
var fields = "sheets/data/rowData/values/userEnteredFormat/borders";
var params = {
method: "get",
headers: {Authorization: "Bearer " + token},
muteHttpExceptions: true,
};
var range = sheetName + "!A1:Z1000";
var url = "https://sheets.googleapis.com/v4/spreadsheets/" + fileId + "?ranges=" + encodeURIComponent(range) + "&fields=" + encodeURIComponent(fields);
var res = UrlFetchApp.fetch(url, params);
var result = JSON.parse(res.getContentText());
结果:
- 使用示例脚本1时,平均处理时间为2.2秒。
- 虽然我不确定Advanced Google Service的Sheets API的内部流程,但发现当它直接向端点请求时,流程成本可以降低
var sep = 500; // Rows retrieving by 1 request.
var ss = SpreadsheetApp.getActiveSpreadsheet();
var fileId = ss.getId();
var sheetName = ss.getActiveSheet().getName();
var token = ScriptApp.getOAuthToken();
var fields = "sheets/data/rowData/values/userEnteredFormat/borders";
var requests = [];
var maxRows = 1000;
var row = 1;
for (var i = 0; i < maxRows / sep; i++) {
var range = sheetName + "!A" + row + ":Z" + (row + sep - 1);
requests.push({
method: "get",
url: "https://sheets.googleapis.com/v4/spreadsheets/" + fileId + "?ranges=" + encodeURIComponent(range) + "&fields=" + encodeURIComponent(fields),
headers: {Authorization: "Bearer " + token},
});
row += sep;
}
var response = UrlFetchApp.fetchAll(requests);
var result = response.reduce(function(ar, e) {
var obj = JSON.parse(e.getContentText());
Array.prototype.push.apply(ar.sheets[0].data[0].rowData, obj.sheets[0].data[0].rowData);
return ar;
}, {sheets: [{data: [{rowData: []}]}]});
var sep=500;//按1请求检索行。
var ss=SpreadsheetApp.getActiveSpreadsheet();
var fileId=ss.getId();
var sheetName=ss.getActiveSheet().getName();
var token=ScriptApp.getOAuthToken();
var fields=“sheets/data/rowData/values/userEnteredFormat/borders”;
var请求=[];
var maxRows=1000;
var行=1;
对于(变量i=0;i
结果:
使用示例脚本2时,获得了以下结果
- 当
为500时(在本例中,运行2个API调用),平均处理时间为1.9秒sep
- 当
为200时(在本例中,运行5个API调用),平均处理时间为1.3秒sep
- 这是一个用于测试上述情况的简单示例。所以我认为上面的脚本不能用于所有情况。如果您使用上述示例脚本,请根据您的情况进行修改。