所以我有一個巨大的電子表格,有 9k 行和 30 多列。我想將此電子表格復制到另一個電子表格(僅限值)。
之前我成功使用了這段代碼,但是由于資料的增加,現在腳本超時(1800s )。有沒有辦法優化這個腳本或者完全可以替代選項?
function temp() {
var sss = SpreadsheetApp.openById('XYZ'); // sss = source spreadsheet
//var ss = sss.getSheets()[4]; // ss = source sheet
var ss = sss.getSheets(); // ss = source sheet
var id=4; //default number
for(var i in ss)
{
var sheet = ss[i];
if(sheet.getName()== "ABC")
{ id=i;
break;
}
}
console.log(id);
ss=sss.getSheets()[id];
//Get full range of data
var SRange = ss.getDataRange();
//get A1 notation identifying the range
var A1Range = SRange.getA1Notation();
//get the data values in range
var SData = SRange.getValues();
SpreadsheetApp.flush();
var tss = SpreadsheetApp.getActiveSpreadsheet(); // tss = target spreadsheet
var ts = tss.getSheetByName('ABC'); // ts = target sheet
//set the target range to the values of the source data
ts.getRange(A1Range).setValues(SData);
}
uj5u.com熱心網友回復:
我相信你的目標如下。
- 您想減少腳本的處理成本。
在這種情況下,我想建議使用 Sheets API。Yuri Khristich 的評論中已經提到了這一點。此外,當在電子表格服務(SpreadsheetApp)和表格 API 之間測量基準時,當表格 API 用于讀取和寫入電子表格的值時,可以確認可以降低處理成本。參考
當 Sheets API 用于您的腳本時,它變為如下。
修改后的腳本:
在使用此腳本之前,請在 Advanced Google services 中啟用 Sheets API。并請設定源電子表格 ID 和作業表名稱。
function temp() {
var sourceSpreadsheetId = "XYZ"; // Please set the source Spreadsheet ID.
var destinationSpreadsheetId = SpreadsheetApp.getActiveSpreadsheet().getId();
var sourceValues = Sheets.Spreadsheets.Values.get(sourceSpreadsheetId, "ABC").values;
Sheets.Spreadsheets.Values.update({values: sourceValues}, destinationSpreadsheetId, "ABC", {valueInputOption: "USER_ENTERED"});
}
參考:
- 基準測驗:使用 Google Apps 腳本讀寫電子表格
- 方法:電子表格.values.get
- 方法:電子表格.values.update
uj5u.com熱心網友回復:
從一個電子表格復制到另一個電子表格
function copyfromonetoanother() {
const sss = SpreadsheetApp.getActive();
const dss = SpreadsheetApp.openById("dssid");
const ssh = sss.getSheetByName('Sheet1');
const vs = ssh.getDataRange().getValues();
const dsh = dss.getSheetByName('Sheet1');
dsh.getRange(dsh.getLastRow() 1,1,vs.length,vs[0].length).setValues(vs);
}
如果要選擇源范圍:
function copyfromonetoanother() {
const sss = SpreadsheetApp.getActive();
const dss = SpreadsheetApp.openById("dssid");
const ssh = sss.getSheetByName('Sheet1');
const vs = ssh.activeRange().getValues();
const dsh = dss.getSheetByName('Sheet1');
dsh.getRange(dsh.getLastRow() 1,1,vs.length,vs[0].length).setValues(vs);
}
此函式附加到目標作業表的底部
function appenddatatobottomofdestination() {
const sssId = "source spreadsheet id";
const sss = SpreadsheetApp.openById(sssId);
const dss = SpreadsheetApp.getActive();
const dssId = dss.getId();
const ssh = sss.getSheetByName('Sheet1');//Source sheet
const srg = ssh.getRange(1,1,ssh.getLastRow(),ssh.getLastColumn());
const dsh = dss.getSheetByName("Sheet1");//Destination sheet
var vs = Sheets.Spreadsheets.Values.get(sssId, `${ssh.getName()}!${srg.getA1Notation()}`).values;
const drg = dsh.getRange(dsh.getLastRow() 1, 1, vs.length,vs[0].length);//appends to bottom of spreadsheet
Sheets.Spreadsheets.Values.update({values: vs}, dssId, `${dsh.getName()}!${drg.getA1Notation()}`, {valueInputOption: "USER_ENTERED"});
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/426841.html
