[英]How to copy the last (n)rows of a google sheet to a new sheet
我是Google Apps和Google表格的新手,不勝感激。 我有一個Google表格,其中一些數據存儲在一個表中,該數據只是一個日期列,然后是從該日期收集的幾列數據,每一天都有新行。 我希望將最近7天,30天,60天等復制到新的工作表中。 本質上,將表的最后(x)行復制到新的工作表中,我可以在其中進行更改(x)。
是否有一個簡單的函數可以在新工作表上使用,以從表中獲取所需的(x)行。 還是我必須使用腳本。 如果是這樣,我該如何進行。
任何答復將不勝感激。
謝謝
我在為所工作的學校建立的活動時間表中使用了相同的技術。 在我創建的版本中,我為今天和接下來的7天創建了一個工作表。 https://docs.google.com/spreadsheet/ccc?key=0AnQ7SpwUoM8odDRKZWE2eVh4QTNzOWsyQmlkb3JvRVE&usp=sharing#gid=10
以下是我接下來7天使用的過濾器功能。
=filter('All Events'!A:H,('All Events'!A1:A1654=DATEVALUE(now()))+('All Events'!A1:A1654=DATEVALUE(now()+1))+('All Events'!A1:A1654=DATEVALUE(now()+2))+('All Events'!A1:A1654=DATEVALUE(now()+3))+('All Events'!A1:A1654=DATEVALUE(now()+4))+('All Events'!A1:A1654=DATEVALUE(now()+5))+('All Events'!A1:A1654=DATEVALUE(now()+6))+('All Events'!A1:A1654=DATEVALUE(now()+7)))
要添加菜單並運行代碼,我創建了以下代碼和說明:
選擇TOOLS , SCRIPT EDITOR ,代碼編輯器將打開。 粘貼在此onOpen()
函數中。
function onOpen() {
SpreadsheetApp.getUi()
.createMenu('Custom Menu')
.addItem('Display User Dialog', 'displayUserDialog')
.addToUi();
};
打開電子表格時,該代碼將運行。 您將看到一個新的菜單項。 當您從“定制”菜單中選擇“ 顯示用戶對話框 ”時,該代碼將設置為觸發更多代碼。 您需要添加更多代碼。 添加此功能:
function displayUserDialog() {
//Logger.log('displayUserDialog ran: ');
var html = HtmlService.createTemplateFromFile('Dialog Copy Choices')
.evaluate()
.setSandboxMode(HtmlService.SandboxMode.NATIVE)
.setWidth(500)
.setHeight(300);
SpreadsheetApp.getUi()
.showModalDialog(html, 'My custom dialog');
};
以上兩個函數進入gs
腳本文件。 我認為通常會自動創建一個新的腳本文件名稱: Code.gs
創建一個新的HTML文件:從FILE菜單中,選擇NEW-HTML
<div id="outer" style="padding:1;"/>
<div>
<br>Sheet To Copy To:<br>
<select id="idSheetNames">
<?!= getSheetNames(); ?>
</select>
<br>
<br>
<div>Copy To:</div>
<input id="idToCol" type='text' placeholder='Column To Copy to:'>
<br>
<input id="idToRow" type='text' placeholder='Row To Copy to:'>
<br>
<br>
<div>Copy From:</div>
<input id="idFromStart" type='text' placeholder='A1'>
<br>
<input id="idFromEnd" type='text' placeholder='D20:'>
<br>
<br>
<input type="button" value="Copy Cells" id="idCopyBtn" onclick="myFunction()">
</div>
<script>
function myFunction() {
var sheetToGetData = document.getElementById("idSheetNames").value;
var copyToRow = document.getElementById("idToRow").value;
var copyToCol = document.getElementById("idToCol").value;
var copyFromStart = document.getElementById("idFromStart").value;
var copyFromEnd = document.getElementById("idFromEnd").value;
//console.log("values of variables: " + sheetToGetData + " : " + copyToCol + " : " + copyToRow + " : " + copyFromStart + " : " + copyFromEnd);
google.script.run.gsCopyData(sheetToGetData, copyToCol, copyToRow, copyFromStart, copyFromEnd);
google.script.host.close();
};
</script>
添加所有代碼后,刷新電子表格,然后將出現一個新的自定義菜單。 使用自定義菜單顯示對話框。
自定義對話框在下拉字段中顯示電子表格中的所有工作表。 下拉菜單允許您選擇要將數據復制到的工作表:
function getSheetNames() {
var allSheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
var howManySheets = allSheets.length;
var sheetNames = [];
var htmlSelectOptions = "";
var thisName = "";
for (var i = 0;i < howManySheets; i++) {
thisName = allSheets[i].getName();
htmlSelectOptions += '<option value="' + thisName + '">' + thisName + '</option>';
};
return htmlSelectOptions;
};
function gsCopyData(sheetToGetData, copyToCol, copyToRow, copyFromStart, copyFromEnd) {
//Logger.log(sheetToGetData + " : " + copyToCol + " : " + copyToRow + " : " + copyFromStart + " : " + copyFromEnd);
//Logger.log("gsCopyData ran");
var alphaBet = 'abcdefghijklmnopqrstuvwxyz';
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
var rowStartCopy = Number(copyFromStart.slice(1));
var colStartCopy = copyFromStart.slice(0,1);
colStartCopy = 1 + alphaBet.indexOf(colStartCopy.toLowerCase());
var rowEndCopy = Number(copyFromEnd.slice(1));
var colEndCopy = copyFromEnd.slice(0,1);
colEndCopy = 1 + alphaBet.indexOf(colEndCopy.toLowerCase());
var numRows = rowEndCopy - rowStartCopy + 1;
var numColumns = colEndCopy - colStartCopy + 1;
var rangeToCopy = sheet.getRange(rowStartCopy, colStartCopy, numRows, numColumns);
copyToCol = alphaBet.indexOf(copyToCol.toLowerCase()) + 1;
var destinationSheet = ss.getSheetByName(sheetToGetData);
//Logger.log(destinationSheet + copyToCol + numColumns + copyToRow + numRows);
rangeToCopy.copyValuesToRange(destinationSheet, copyToCol, numColumns, copyToRow, numRows);
};
出發點是看一下三個FILTER函數。
這是指向Google Spreadsheet函數列表的鏈接:
我敢肯定有一種使用函數來過濾所需數據的方法。 如果您想要更自動化的東西,則需要進行編程。 那將是更多的工作。
無論哪種方式,都有可能。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.