如何使用Google脚本还原特定版本的Google工作表?

时间:2019-05-14 08:08:57

标签: google-apps-script google-sheets

我想拥有一个按钮,当我使用Google脚本按下它时,它可以还原特定版本的Google工作表。

原因是我想清除自己的Google工作表,但要设置与原始版本相同的格式和所有内容,以防其他人更改单元格的格式。

尽管我可以添加一个按钮,然后在某些输入任何数据之前将版本恢复为原始版本。

关于如何使用脚本执行此操作的任何想法? (我愿意接受建议)

谢谢!

2 个答案:

答案 0 :(得分:0)

我认为您无法使用Google脚本还原版本,因为运行脚本的过程仍然会更新当前版本。

您可以编写一个脚本,清除所有可编辑的单元格(并将所有格式设置为默认格式),然后将其添加到自定义菜单,以便您可以通过按一下按钮来重置工作表。

这可能会达到您想要的结果。

这是我以前使用过的,但显然是针对我的需求的。

function clear() {
  SpreadsheetApp.getActiveSpreadsheet().toast('Deleting');
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
  var range = sheet.getDataRange();
  range.clear();
  sheet.getRange(1,1).setValue('Copy and paste Data here')
   .setBackground('yellow');
  var maxRows = sheet.getMaxRows();
  var maxColumns = sheet.getMaxColumns();
  sheet.setFrozenRows(0);
  sheet.deleteColumns(2,maxColumns-1);
  sheet.deleteRows(2,maxRows-1);
  sheet.setColumnWidth(1, 100)
  SpreadsheetApp.getActiveSpreadsheet().toast('Deleted');
}

function onOpen() {
  SpreadsheetApp.getUi()
   .createMenu('Custom Menu') 
   .addItem('Clear','clear')
   .addToUi();
}

更具体的示例可能是:

function clear() {
  SpreadsheetApp.getActiveSpreadsheet().toast('Deleting');
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();

  sheet.getRange('A26:E30').clearContent();
  sheet.getRange('A33:E37').clearContent();
  sheet.getRange('A40:E44').clearContent();
  sheet.getRange('D2:D3').clearContent();
  sheet.getRange('D5:D9').clearContent();
  sheet.getRange('D12:D16').clearContent();
  sheet.getRange('D18').clearContent();
  sheet.getRange('A19').setValue(false);
  sheet.getRange('C19').setValue(false);
} 

我可能已经错过了一些章节,因此您需要适应您的用法。如果要使用已创建的清除按钮,则可以右键单击它并为其分配清除功能,这样,每次单击清除时,它将执行上述脚本。这可能不是最优雅的解决方案,但它可以满足您的需求。

答案 1 :(得分:0)

我的解决方法是从另一张纸上复制粘贴:

      function Restore() {
              var destination = SpreadsheetApp.openById('detination sheet id');
              var destSheet = destination.getSheetByName('Sheet1');
              var source = SpreadsheetApp.openById('source sheet id');
              var sourceSheet = source.getSheetByName('Sheet1');

              destSheet.clearContents();
              if(destSheet.getMaxRows()>sourceSheet.getMaxRows())
              {
              destSheet.deleteRows(sourceSheet.getMaxRows(), (destSheet.getMaxRows() - sourceSheet.getMaxRows()));
              }
              if(destSheet.getMaxColumns()>sourceSheet.getMaxColumns())
              {
              destSheet.deleteColumns(sourceSheet.getMaxColumns(), (destSheet.getMaxColumns() - sourceSheet.getMaxColumns()));
              }

              var copySheet = sourceSheet.copyTo(destination);
              copySheet.getDataRange().copyTo(destSheet.getDataRange());
              destination.deleteSheet(copySheet);
         }