你好 我想從一個電子表格複製一個特定的行到另一個電子表格使用谷歌應用腳本。任何人都可以幫助我得到這個答案。如何使用谷歌應用腳本將一行從一個谷歌電子表格複製到另一谷歌電子表格?
回答
退房這裏的文檔:
http://code.google.com/googleapps/appsscript/service_spreadsheet.html
讓我們假設你在你從複製電子表格的工作。
您必須獲取當前電子表格和目標電子表格的句柄。您需要獲取目標電子表格的ID。詳細信息在那裏的鏈接。
var ss = SpreadsheetApp.getActiveSpreadsheet();
var target = SpreadsheetApp.openById("abc1234567");
接下來我們需要選擇這些電子表格中的特定工作表。假設您的行在名爲「New Stuff」的工作表上,並且目標電子表格中有一個名爲「Archive」的工作表。
var source_sheet = ss.getSheetByName("New Stuff");
var target_sheet = target.getSheetByName("Archive");
現在,谷歌應用電子數據表使用的概念是範圍。範圍只是一大塊細胞。所以我們需要確定從範圍和範圍。假設你的工作表有7列,你想要第10行。
var source_range = source_sheet.getRange("A10:G10");
var target_range = target_sheet.getRange("A1:G1");
因此,我們將採取該行,並將其放在目標工作表的第一行。現在對於實際的副本:
source_range.copyTo(target_range);
而你完成了!
現在,這將始終摧毀目標工作表的第一行。你可以做很多事情來阻止它。除了總是使用第一行,您可以使用圖表對象方法查找最後一行,然後添加一行,然後將其用作範圍。
var last_row = target_sheet.getLastRow();
target_sheet.insertRowAfter(last_row);
var target_range = target_sheet.getRange("A"+(last_row+1)+":G"+(last_row+1));
這樣每次複製一行時,它都會被添加到工作表的底部。
這不起作用 - 返回一個錯誤「目標範圍和源範圍必須位於同一電子表格中。」看起來我們需要做一些與此類似:
function copyRow_ (origSheetName, destSheetName, origRowNumber, destRowNumber)
{
var origSheetObject = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(origSheetName);
var destSheetObject = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(destSheetName);
var origLastCol = origSheetObject.getLastColumn();
var arrOrigData = origSheetObject.getRange(origRowNumber, 1, 1, origLastCol).getValues();
var destlastRow = destSheetObject.getLastRow() + 1;
if (destRowNumber)
destlastRow = destRowNumber;
var cont;
for (cont = 0; cont < origLastCol; cont++)
destSheetObject.getRange(destlastRow, 1+cont).setValue(arrOrigData[0][cont]);
}
(公然從here被盜)
我碰到了這一點。我設法弄清楚了一個很好的解決方法,可以從一張表格複製到另一張表格(圖片,圖表,腳本和其他東西除外)。它確實複製了公式,值,格式。
基本上解決方案是
- 拷貝源片到目標電子表格作爲一個臨時源片
- 從臨時源片的數據複製到所述目標薄片
- 除去臨時源片
代碼:
var sss = SpreadsheetApp.openById(spreadsheet); // sss = source spreadsheet
var ss = sss.getSheetByName(sheet); // ss = source sheet
var ss_temp = ss.copyTo(targetsheet);
var tss = SpreadsheetApp.openById(spreadsheet); // tss = target spreadsheet
var ts = tss.getSheetByName(sheet); // ts = target sheet
var range2Copy = ss_temp.getRange(range);
range2Copy.copyTo(ts.getRange(range));
bss.setActiveSheet(ss_temp);
bss.deleteActiveSheet()
基於上述我創建了一個電子表格,允許我從主電子表格更新許多副本。大約15份拷貝,可以節省大量的複製粘貼操作。
copyTo方法記錄不當,因爲它不允許您將內容從一張紙複製到另一張電子表格中的紙張。您將要使用的GetValues ANS setValues方法如下圖所示:
function CopyDataToNewFile() {
var sss = SpreadsheetApp.openById('0AjN7uZG....'); // sss = source spreadsheet
var ss = sss.getSheetByName('Monthly'); // ss = source sheet
//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();
var tss = SpreadsheetApp.openById('8AjN7u....'); // tss = target spreadsheet
var ts = tss.getSheetByName('RAWData'); // ts = target sheet
//set the target range to the values of the source data
ts.getRange(A1Range).setValues(SData);
}
也許這篇文章可以幫助你http://l.rw.rw/gscripts3。它描述了不同條件下的複製功能的功能(按範圍限制數據,自定義過濾器,通過插入或替換方法將數據定位到目標)。並有可以嘗試的工作示例。
這樣做的另一種方法是將來源的行(或任何範圍)導入到目標電子表格中。
假設你想從所謂的「源電子表格表名」源電子表格的紙,放於目標位置的第一列下面的公式導入行3:
=IMPORTRANGE("source-spreadsheet-key","source-spreadsheet-sheet-name!3:3")
其中"source-spreadsheet-key"
是您從其網址中提取的源電子表格的唯一標識。
如果你這樣做的第一次,就會出現安全消息:
剛剛確認,整個行會自動填充。
請記住,在源區域進行更改後,有時需要幾分鐘來更新導入的單元格。但是,您可以通過按ctrl-E或ctrl-shift-E加速它,同時在目標電子表格中進行操作。
使用range.setValues,是最好的選擇。 適用於任何工作表中的任何範圍,只要起點和目的地範圍相似即可。
這裏的一個示例代碼:
function openCSV() {
//Buscamos el archivo
var files = DriveApp.getFilesByName("ts.csv");
//Cada nombre de archivo es unico, por eso next() lo devuelve.
var file = files.next();
fileID = file.getId();
//Abrimos la spreadsheet, seleccionamos la hoja
var spreadsheet = SpreadsheetApp.openById(fileID);
var sheet = spreadsheet.getSheets()[0];
//Seleccionamos el rango
var range = sheet.getRange("A1:F1");
values = range.getValues();
//Guardamos un log del rango
//Logger.log(values);
//Seleccionamos la hoja de destino, que es la activeSheet
var ss = SpreadsheetApp.getActiveSpreadsheet();
var SSsheet = ss.getSheets()[0];
//Seleccionamos el mismo rango y le asignamos los valores
var ssRange = SSsheet.getRange("A1:F1");
ssRange.setValues(values);
}
- 1. 如何使用谷歌應用程序腳本將特定的行從3谷歌電子表格複製到另一個電子表格
- 2. adwords腳本到谷歌電子表格
- 3. 谷歌電子表格複製範圍到谷歌文檔
- 4. 在java中使用谷歌電子表格api創建谷歌電子表格
- 5. 如何創建一個自動腳本到谷歌分析儀表盤複製到谷歌電子表格
- 6. 同步多個谷歌電子表格(5 +)回到主谷歌電子表格
- 7. 與谷歌腳本和電子表格
- 8. 將Google電子表格從一個Google雲端硬盤複製到另一個谷歌電子表格
- 9. cron谷歌電子表格
- 10. 谷歌javascript電子表格
- 11. 谷歌電子表格腳本添加一個「圖表」表
- 12. 鏈接一個谷歌文檔電子表格到另一個
- 13. 谷歌電子表格與在谷歌腳本水印
- 14. 轉換谷歌電子表格爲XLS在谷歌腳本
- 15. 導出谷歌電子表格,RSS格式使用谷歌Apps腳本
- 16. 谷歌電子表格:如何名稱中使用谷歌Apps腳本
- 17. 谷歌電子表格電子郵件
- 18. 如何使用谷歌應用程序腳本和谷歌表格數據一行發送HTML電子郵件
- 19. 在谷歌Apps腳本使用的BigQuery連接到谷歌電子表格
- 20. 谷歌電子表格:表從數據
- 21. 谷歌腳本:如何從一個工作表複製到另一個電子表格
- 22. 谷歌電子表格IMPORTXML並通過谷歌電子表格的XPath
- 23. 谷歌腳本:有條件地將行從一個電子表格複製到另一個
- 24. 谷歌電子表格與谷歌應用程序腳本查詢
- 25. 谷歌表格回覆電子郵件
- 26. 谷歌應用程序腳本電子表格格式錯誤
- 27. 致電谷歌電子表格由bash
- 28. 圖表在應用程序腳本谷歌電子表格
- 29. 谷歌電子表格用戶登錄
- 30. 調用谷歌電子表格功能
此失敗,這兩個範圍必須在同一電子表格的錯誤消息。 – Josh 2012-07-16 05:35:14
對不起,@Josh。他們可能已經改變了copyTo()的工作原理,我寫了這個答案(我非常肯定我測試了它並直接從我的測試文檔中複製了js行)。其他答案之一可能會更好。沒有實際*嘗試*其中任何一個,我的賭注是[ubique's answer](http://stackoverflow.com/a/11676703/23866)將起作用。 – 2016-03-22 02:38:15