簡體   English   中英

如何將Google工作表的最后(n)行復制到新工作表

[英]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)))

要添加菜單並運行代碼,我創建了以下代碼和說明:

添加功能會在電子表格打開時運行:

選擇TOOLSSCRIPT 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

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>

添加所有代碼后,刷新電子表格,然后將出現一個新的自定義菜單。 使用自定義菜單顯示對話框。

自定義對話框在下拉字段中顯示電子表格中的所有工作表。 下拉菜單允許您選擇要將數據復制到的工作表:

gs代碼以獲取工作表名稱

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;
};

gs復制數據的代碼

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函數列表的鏈接:

Google支持-電子表格功能列表

我敢肯定有一種使用函數來過濾所需數據的方法。 如果您想要更自動化的東西,則需要進行編程。 那將是更多的工作。

無論哪種方式,都有可能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM