第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

谷歌表格撤消/重做功能

谷歌表格撤消/重做功能

溫溫醬 2022-01-13 17:33:23
我正在查看網(wǎng)絡(luò)選項(xiàng)卡以查看是否將重做/撤消數(shù)據(jù)發(fā)送到 Google 表格中的服務(wù)器,但似乎不是——它似乎是本地用戶/正在修改信息的設(shè)備的本地設(shè)備。實(shí)現(xiàn)撤消/重做功能的數(shù)據(jù)結(jié)構(gòu)可能是什么樣的?我的猜測是它將是一個(gè)堆棧(即數(shù)組),最后一個(gè)可撤消的操作被推送到堆棧,如下所示:actions = [     action_1,     action_2     ]但是對(duì)于這些動(dòng)作中的每一個(gè),實(shí)際的數(shù)據(jù)結(jié)構(gòu)會(huì)是什么樣子呢?我想對(duì)于單元格的基本修改,可以存儲(chǔ)文本,但是在 Google 表格中有很多可能的事情要做,所以看起來“動(dòng)作”可能幾乎是無限復(fù)雜的。
查看完整描述

1 回答

?
LEATH

TA貢獻(xiàn)1936條經(jīng)驗(yàn) 獲得超7個(gè)贊

  • 您想實(shí)現(xiàn) Google 電子表格的撤消和重做功能。

  • 您可以使用 Google Apps 腳本。

我可以像上面那樣理解。為此,這個(gè)示例腳本怎么樣?因此,請(qǐng)將此視為幾個(gè)可能的答案之一。

用法:

請(qǐng)執(zhí)行以下流程以使用示例腳本。

  1. 創(chuàng)建新的電子表格并打開腳本編輯器。

    • 如果第一個(gè)選項(xiàng)卡不是 的名稱Sheet1,請(qǐng)將其更改為Sheet1。在此示例腳本中,作為測試情況,undo 和 redo 函數(shù)用于運(yùn)行到Sheet1活動(dòng)電子表格中的工作表。請(qǐng)注意這一點(diǎn)。

  2. 將以下示例腳本復(fù)制并粘貼到腳本編輯器中,然后保存腳本。

  3. 將可安裝的 OnEdit 事件觸發(fā)器安裝到函數(shù)installedOnEdit中。

    • 您可以在此處查看執(zhí)行此操作的文檔。請(qǐng)?jiān)O(shè)置installedOnEdit為 OnEdit 事件觸發(fā)器。

    • 當(dāng)您安裝可安裝的 OnEdit 事件觸發(fā)器時(shí),將打開授權(quán)屏幕。所以請(qǐng)授權(quán)范圍。

  4. 請(qǐng)關(guān)閉電子表格并重新打開電子表格。由此,onOpen()由簡單的觸發(fā)器運(yùn)行。offset并被清除。然后,請(qǐng)打開腳本編輯器。

  5. 在電子表格中,手動(dòng)將“foo”放入單元格“A1”。

    • 通過這個(gè),電子表格logSpreadsheet被創(chuàng)建到根文件夾。這用作日志。

    • 所以只有這一次,請(qǐng)等待創(chuàng)建電子表格。

  6. 在根文件夾確認(rèn)創(chuàng)建的電子表格后,手動(dòng)將“bar”放入單元格“A1”。

  7. 手動(dòng)將“baz”放入單元格“A1”。

    • 這時(shí),當(dāng)你看到日志Spreadsheet時(shí),你可以看到單元格“A1:A3”中的值如下。這用于撤消和重做功能。

      {"range":"A1","value":"foo","oldValue":""}
      {"range":"A1","value":"bar","oldValue":"foo"}
      {"range":"A1","value":"baz","oldValue":"bar"}
  8. undo在腳本編輯器中運(yùn)行該函數(shù)。

    • 這樣,單元格“A1”的值從baz變?yōu)?code>bar。

  9. undo在腳本編輯器中 運(yùn)行該函數(shù)。

    • 這樣,單元格“A1”的值從bar變?yōu)?code>foo。

  10. undo在腳本編輯器中 運(yùn)行該函數(shù)。

    • 這樣,單元格“A1”的值從foo變?yōu)榭?。因?yàn)樽畛醯那闆r是空的。

  11. redo在腳本編輯器中 運(yùn)行該函數(shù)。

    • 這樣,單元格“A1”的值從foo變?yōu)?code>bar。

  12. redo在腳本編輯器中 運(yùn)行該函數(shù)。

    • 這樣,單元格“A1”的值從bar變?yōu)?code>baz。

  13. redo在腳本編輯器中 運(yùn)行該函數(shù)。

    • 這樣,單元格“A1”的值不會(huì)改變。因?yàn)檫@種情況是最新的。

示例腳本:

var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1");

var prop = PropertiesService.getScriptProperties();


function onOpen() {

  prop.setProperty("offset", "0");

}


function getSheet() {

  var logId = prop.getProperty("logSpreadsheetId");

  if (logId) {

    return SpreadsheetApp.openById(logId).getSheets()[0];

  }

  throw new Error("Please edit a cell in the Spreadsheet. By this, the Spreadsheet for logging is created.");

}


// Undo function

function undo() {

  var logsheet = getSheet();

  var offset = Number(prop.getProperty("offset"));

  var lastRow = logsheet.getLastRow();

  if (lastRow + offset > 0) {

    var log = logsheet.getRange(lastRow, 1).offset(offset, 0).getValue();

    var obj = JSON.parse(log);

    sheet.getRange(obj.range).setValue(obj.oldValue);

    prop.setProperty("offset", offset - 1);

  }

}


// Redo function

function redo() {

  var logsheet = getSheet();

  var offset = Number(prop.getProperty("offset")) + 1;

  var lastRow = logsheet.getLastRow();

  if (lastRow + offset <= lastRow) {

    var log = logsheet.getRange(lastRow, 1).offset(offset, 0).getValue();

    var obj = JSON.parse(log);

    sheet.getRange(obj.range).setValue(obj.value);

    prop.setProperty("offset", offset);

  }

}


// Please set the installable OnEdit event trigger to this function.

function installedOnEdit(e) {

  var logId = prop.getProperty("logSpreadsheetId")

  var ss;

  if (logId) {

    ss = SpreadsheetApp.openById(logId);

  } else {

    ss = SpreadsheetApp.create("logSpreadsheet");

    prop.setProperty("logSpreadsheetId", ss.getId());

  }

  var log = {range: e.range.getA1Notation(), value: "value" in e ? e.value : "", oldValue: "oldValue" in e ? e.oldValue : ""};

  ss.getSheets()[0].appendRow([JSON.stringify(log)]);

}

筆記:

這是一個(gè)簡單的示例腳本。不幸的是,復(fù)雜的動(dòng)作可能無法使用。例如,在當(dāng)前腳本中不能使用編輯多個(gè)單元格。我對(duì)此深表歉意。當(dāng)您想添加更復(fù)雜的動(dòng)作時(shí),需要針對(duì)每種情況修改腳本。請(qǐng)注意這一點(diǎn)。

在當(dāng)前階段,當(dāng)通過單擊刪除按鈕刪除單元格值時(shí),舊值不包含在事件對(duì)象中。所以當(dāng)你想測試值的刪除時(shí),請(qǐng)點(diǎn)擊單元格并通過退格按鈕刪除單元格中的每個(gè)字符。這樣,舊值將包含在事件對(duì)象中。請(qǐng)注意這一點(diǎn)。

我認(rèn)為,如果您想做更復(fù)雜的操作,用修訂數(shù)據(jù)覆蓋電子表格可能是合適的。參考


查看完整回答
反對(duì) 回復(fù) 2022-01-13
  • 1 回答
  • 0 關(guān)注
  • 372 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)