以编程方式临时更改 Google 文档,然后替换为更改前的版本
Programmatically temporarily altering a Google Docs and then replacing with the pre-altered version
我正在尝试执行以下操作,这似乎是一项简单的任务。在尝试各种方法 2 周后,我在第 4 步仍然失败:
- 从现有的 Google Doc (Gdoc) 文件开始,
- 以编程方式接受所有建议的更改,
- 然后将文件导出为文本文件(这一步很快),
- 然后撤消临时更改,使文件与在步骤 1 中开始时的文件完全相同。
我的方法(见附件代码)是写一个 JavaScript(我已将其制作成书签)到:
- 保存原始Gdoc(步骤1中的版本)的内容,
- 然后接受建议的更改(这里是真正的救星,顺便说一句:http://www.tcg.com/blog/accept-all-bookmark-for-google-docs-suggestions/)
- 将文件本地导出为纯文本(全局接受建议的更改允许将这些编辑合并到文本中!)
- 将文档恢复到保存的版本。
Javascript 代码如下。我的问题是:为什么我通过sessionStorage.setItem
保存原始文件内容,然后在最后一步检索它来恢复文档的方法不起作用? (在此上下文中,"Not working" 表示在 运行 脚本之后查看文档时,"suggested changes" 不会像在原始文档中那样返回显示为 "suggestions"。
除了 sessionStorage.setItem
方法之外,我还尝试了很多其他方法,包括将 document.getElementsByClassName("*stuff*").innerHTML
、.outerHTML, .innerTEXT, .outerTEXT
存储在变量 inH、outH、inT、 outT, 分别在脚本的开头,然后将 document.getElementsByClassName("*stuff*").innerHTML, outerHTML, innerTEXT, .outerTEXT
等同于 inH, outH,分别。没用。 (“stuff”是 "docos-icon-accept-suggestion-checkmark",顺便说一句)
我还尝试通过克隆它来制作 document.getElementsByClassName("*stuff*")
的 "backup copy":backupD = document.getElementsByClassName("*stuff*").cloneNode(true)
然后稍后通过 document.getElementsByClassName("*stuff*").replaceWith(backupD)
恢复也没有用。
是否有可能 .getElementsByClassName("*stuff*")
以外的东西是我应该存储然后用来恢复 Gdoc 的东西?我使用上面的节点是因为它用于全局接受建议的更改,这似乎与 "undo" 流程相关。
说到 "undo",我还研究了尝试以编程方式 "undo" 来恢复所有已接受的建议更改。我的代码知道 "undo" 需要调用多少次(当我手动单击 Gdocs 菜单上的撤消箭头多次时,我取回了原始文档),但我找不到任何书面内容关于如何在 Gdoc 中实现 "undo" 按钮以及如何以编程方式 "hit" 撤消按钮。
最后,我想到的另一种选择(这是我第一个探索的想法)是以某种方式以编程方式在 Google 驱动器上制作 GDoc 的副本(可能有很多指导可以做) this),然后将该副本用作我的 "scratch copy" 以接受所有建议的更改,这样我就不必担心将原始内容恢复到文件中。但障碍在于,当我启动这个 javascript 时,它对我单击小书签时打开的文件进行操作,没有任何明显的方法可以打开然后 "accept all suggested changes" 在复制的文件上文件。
这是我的代码(未能将 Gdoc 恢复到其原始状态)。非常感谢关于我应该使用什么方法让我的 Gdoc 恢复到它在执行全局 "accept all suggested changes" 之前的原始状态的任何建议:
javascript:(function() {sessionStorage.setItem("backup",document.getElementsByClassName("docos-icon-accept-suggestion-checkmark")); var d = document.getElementsByClassName("docos-icon-accept-suggestion-checkmark"); d = Array.prototype.slice.call(d); var cnt = 0; d.forEach(function(n){ var e = document.createEvent("MouseEvents"); e.initEvent("click", true, false); n.dispatchEvent(e,true); e = document.createEvent("MouseEvents"); e.initEvent("mousedown", true, false); n.dispatchEvent(e,true); e = document.createEvent("MouseEvents"); e.initEvent("mouseup", true, false); n.dispatchEvent(e,true); cnt++; }); alert('JUST ACCEPTED ALL SUGGESTED EDITS: ' + cnt.toString()); document.getElementsByClassName("docos-icon-accept-suggestion-checkmark").replaceChild(sessionStorage.setItem("backup")); alert('JUST FINISHED RESTORING TO ORIGINAL FILE');}) ();
一些可能 useful/relevant 链接:
- scripting a google docs form submission (问题是打开的 "permanent" 文件中的 Javascript 运行 如何打开克隆的文档 - - 脚本可能可以毫无问题地复制和上传文档)。
- Programmatically edit a Google doc with JavaScript (与我的问题非常相关,但答案暗示如果没有 Google Apps 脚本就无法更改 Gdoc 内容,我觉得这很困惑,因为我绝对能够"accept suggested changes" 并更改文档的明显内容。我在尝试 Google 应用程序时遇到了与当前 javascript 相同的问题:我被打开的文档绑定并且无法以编程方式打开和操作其他文档。此外,我无法让 Google 应用程序执行接受所有建议的脚本。
- How to clone (and restore) a DOM subtree(我从中得到使用 .cloneNode 的想法的参考之一,事实证明这是我项目的另一个死胡同)。
以下 JavaScript,写成小书签,实现了上述所有目标,如果这个解决方案可能会帮助其他同样想暂时 "accept all suggested changes" 在 Google Doc,然后将文档恢复到原始状态。如果您在执行此答案底部给出的书签时显示 Google 文档,则具体步骤及其完成方式如下。
以编程方式接受所有建议的更改。 (来自 http://www.tcg.com/blog/accept-all-bookmark-for-google-docs-suggestions/ 的算法):
var d=document.getElementsByClassName("docos-accept-suggestion"); d = Array.prototype.slice.call(d); d.forEach(function(n){ var e = document.createEvent("MouseEvents"); e.initEvent("click", true, false); n.dispatchEvent(e,true); e = document.createEvent("MouseEvents"); e.initEvent("mousedown", true, false); n.dispatchEvent(e,true); e = document.createEvent("MouseEvents"); e.initEvent("mouseup", true, false); n.dispatchEvent(e,true); });
以编程方式导出纯文本(现在应该包含建议的更改):
window.open(window.location.href.replace("edit","export\?format=txt"));
使用导出的纯文本文件 Google Doc and/or 做一些事情(例如,我的文件有原始 LaTeX,所以我编译文件并得到一个 pdf我的研究论文)。
将文档切换回其原始 pre-accept_all_suggested_changes 状态。
w=window.open(window.location.href.replace("edit","copy"));w.addEventListener('load',w.close(),true);alert('Check your download folder for the text file');setTimeout(function(){var a=document.getElementsByClassName("docs-icon-undo")[0]; for(var j=0; j<cnt; j++){e=document.createEvent("MouseEvents"); e.initEvent("click",true,false);a.dispatchEvent(e,true);e=document.createEvent("MouseEvents");e.initEvent("mousedown",true,false); a.dispatchEvent(e,true);e=document.createEvent("MouseEvents");e.initEvent("mouseup",true,false);a.dispatchEvent(e,true)}}
(其中 cnt
是在上一步中接受的建议更改数。代码为您计算出 cnt
的值。)
总之,功能性小书签如下(其中“[DO STUFF]
”是您输入使用 Google Doc 的任何代码的地方或包含所有建议更改的纯文本文件):
javascript:(function(){var d=document.getElementsByClassName("docos-accept-suggestion"); d = Array.prototype.slice.call(d); d.forEach(function(n){ var e = document.createEvent("MouseEvents"); e.initEvent("click", true, false); n.dispatchEvent(e,true); e = document.createEvent("MouseEvents"); e.initEvent("mousedown", true, false); n.dispatchEvent(e,true); e = document.createEvent("MouseEvents"); e.initEvent("mouseup", true, false); n.dispatchEvent(e,true); });window.open(window.location.href.replace("edit","export\?format=txt")); [*DO STUFF*]; w=window.open(window.location.href.replace("edit","copy"));w.addEventListener('load',w.close(),true);alert('Check your download folder for the text file');setTimeout(function(){var a=document.getElementsByClassName("docs-icon-undo")[0];for(var j=0; j<cnt; j++){e=document.createEvent("MouseEvents"); e.initEvent("click",true,false);a.dispatchEvent(e,true);e=document.createEvent("MouseEvents");e.initEvent("mousedown",true,false); a.dispatchEvent(e,true);e=document.createEvent("MouseEvents");e.initEvent("mouseup",true,false);a.dispatchEvent(e,true)}},5000);})();
代码已在 Chrome 浏览器上测试。
Google docs(在 Chrome 中)现在有一个工具可以预览应用了所有建议编辑的文档:
Tools
--> Review suggested edits
--> Preview "accept all"
虽然导出文档不反映预览,但可以打印和复制粘贴应用建议编辑的文档,因此可以用于获得应用建议编辑的纯文本或 pdf 版本文件.
我正在尝试执行以下操作,这似乎是一项简单的任务。在尝试各种方法 2 周后,我在第 4 步仍然失败:
- 从现有的 Google Doc (Gdoc) 文件开始,
- 以编程方式接受所有建议的更改,
- 然后将文件导出为文本文件(这一步很快),
- 然后撤消临时更改,使文件与在步骤 1 中开始时的文件完全相同。
我的方法(见附件代码)是写一个 JavaScript(我已将其制作成书签)到:
- 保存原始Gdoc(步骤1中的版本)的内容,
- 然后接受建议的更改(这里是真正的救星,顺便说一句:http://www.tcg.com/blog/accept-all-bookmark-for-google-docs-suggestions/)
- 将文件本地导出为纯文本(全局接受建议的更改允许将这些编辑合并到文本中!)
- 将文档恢复到保存的版本。
Javascript 代码如下。我的问题是:为什么我通过sessionStorage.setItem
保存原始文件内容,然后在最后一步检索它来恢复文档的方法不起作用? (在此上下文中,"Not working" 表示在 运行 脚本之后查看文档时,"suggested changes" 不会像在原始文档中那样返回显示为 "suggestions"。
除了 sessionStorage.setItem
方法之外,我还尝试了很多其他方法,包括将 document.getElementsByClassName("*stuff*").innerHTML
、.outerHTML, .innerTEXT, .outerTEXT
存储在变量 inH、outH、inT、 outT, 分别在脚本的开头,然后将 document.getElementsByClassName("*stuff*").innerHTML, outerHTML, innerTEXT, .outerTEXT
等同于 inH, outH,分别。没用。 (“stuff”是 "docos-icon-accept-suggestion-checkmark",顺便说一句)
我还尝试通过克隆它来制作 document.getElementsByClassName("*stuff*")
的 "backup copy":backupD = document.getElementsByClassName("*stuff*").cloneNode(true)
然后稍后通过 document.getElementsByClassName("*stuff*").replaceWith(backupD)
恢复也没有用。
是否有可能 .getElementsByClassName("*stuff*")
以外的东西是我应该存储然后用来恢复 Gdoc 的东西?我使用上面的节点是因为它用于全局接受建议的更改,这似乎与 "undo" 流程相关。
说到 "undo",我还研究了尝试以编程方式 "undo" 来恢复所有已接受的建议更改。我的代码知道 "undo" 需要调用多少次(当我手动单击 Gdocs 菜单上的撤消箭头多次时,我取回了原始文档),但我找不到任何书面内容关于如何在 Gdoc 中实现 "undo" 按钮以及如何以编程方式 "hit" 撤消按钮。
最后,我想到的另一种选择(这是我第一个探索的想法)是以某种方式以编程方式在 Google 驱动器上制作 GDoc 的副本(可能有很多指导可以做) this),然后将该副本用作我的 "scratch copy" 以接受所有建议的更改,这样我就不必担心将原始内容恢复到文件中。但障碍在于,当我启动这个 javascript 时,它对我单击小书签时打开的文件进行操作,没有任何明显的方法可以打开然后 "accept all suggested changes" 在复制的文件上文件。
这是我的代码(未能将 Gdoc 恢复到其原始状态)。非常感谢关于我应该使用什么方法让我的 Gdoc 恢复到它在执行全局 "accept all suggested changes" 之前的原始状态的任何建议:
javascript:(function() {sessionStorage.setItem("backup",document.getElementsByClassName("docos-icon-accept-suggestion-checkmark")); var d = document.getElementsByClassName("docos-icon-accept-suggestion-checkmark"); d = Array.prototype.slice.call(d); var cnt = 0; d.forEach(function(n){ var e = document.createEvent("MouseEvents"); e.initEvent("click", true, false); n.dispatchEvent(e,true); e = document.createEvent("MouseEvents"); e.initEvent("mousedown", true, false); n.dispatchEvent(e,true); e = document.createEvent("MouseEvents"); e.initEvent("mouseup", true, false); n.dispatchEvent(e,true); cnt++; }); alert('JUST ACCEPTED ALL SUGGESTED EDITS: ' + cnt.toString()); document.getElementsByClassName("docos-icon-accept-suggestion-checkmark").replaceChild(sessionStorage.setItem("backup")); alert('JUST FINISHED RESTORING TO ORIGINAL FILE');}) ();
一些可能 useful/relevant 链接:
- scripting a google docs form submission (问题是打开的 "permanent" 文件中的 Javascript 运行 如何打开克隆的文档 - - 脚本可能可以毫无问题地复制和上传文档)。
- Programmatically edit a Google doc with JavaScript (与我的问题非常相关,但答案暗示如果没有 Google Apps 脚本就无法更改 Gdoc 内容,我觉得这很困惑,因为我绝对能够"accept suggested changes" 并更改文档的明显内容。我在尝试 Google 应用程序时遇到了与当前 javascript 相同的问题:我被打开的文档绑定并且无法以编程方式打开和操作其他文档。此外,我无法让 Google 应用程序执行接受所有建议的脚本。
- How to clone (and restore) a DOM subtree(我从中得到使用 .cloneNode 的想法的参考之一,事实证明这是我项目的另一个死胡同)。
以下 JavaScript,写成小书签,实现了上述所有目标,如果这个解决方案可能会帮助其他同样想暂时 "accept all suggested changes" 在 Google Doc,然后将文档恢复到原始状态。如果您在执行此答案底部给出的书签时显示 Google 文档,则具体步骤及其完成方式如下。
以编程方式接受所有建议的更改。 (来自 http://www.tcg.com/blog/accept-all-bookmark-for-google-docs-suggestions/ 的算法):
var d=document.getElementsByClassName("docos-accept-suggestion"); d = Array.prototype.slice.call(d); d.forEach(function(n){ var e = document.createEvent("MouseEvents"); e.initEvent("click", true, false); n.dispatchEvent(e,true); e = document.createEvent("MouseEvents"); e.initEvent("mousedown", true, false); n.dispatchEvent(e,true); e = document.createEvent("MouseEvents"); e.initEvent("mouseup", true, false); n.dispatchEvent(e,true); });
以编程方式导出纯文本(现在应该包含建议的更改):
window.open(window.location.href.replace("edit","export\?format=txt"));
使用导出的纯文本文件 Google Doc and/or 做一些事情(例如,我的文件有原始 LaTeX,所以我编译文件并得到一个 pdf我的研究论文)。
将文档切换回其原始 pre-accept_all_suggested_changes 状态。
w=window.open(window.location.href.replace("edit","copy"));w.addEventListener('load',w.close(),true);alert('Check your download folder for the text file');setTimeout(function(){var a=document.getElementsByClassName("docs-icon-undo")[0]; for(var j=0; j<cnt; j++){e=document.createEvent("MouseEvents"); e.initEvent("click",true,false);a.dispatchEvent(e,true);e=document.createEvent("MouseEvents");e.initEvent("mousedown",true,false); a.dispatchEvent(e,true);e=document.createEvent("MouseEvents");e.initEvent("mouseup",true,false);a.dispatchEvent(e,true)}}
(其中 cnt
是在上一步中接受的建议更改数。代码为您计算出 cnt
的值。)
总之,功能性小书签如下(其中“[DO STUFF]
”是您输入使用 Google Doc 的任何代码的地方或包含所有建议更改的纯文本文件):
javascript:(function(){var d=document.getElementsByClassName("docos-accept-suggestion"); d = Array.prototype.slice.call(d); d.forEach(function(n){ var e = document.createEvent("MouseEvents"); e.initEvent("click", true, false); n.dispatchEvent(e,true); e = document.createEvent("MouseEvents"); e.initEvent("mousedown", true, false); n.dispatchEvent(e,true); e = document.createEvent("MouseEvents"); e.initEvent("mouseup", true, false); n.dispatchEvent(e,true); });window.open(window.location.href.replace("edit","export\?format=txt")); [*DO STUFF*]; w=window.open(window.location.href.replace("edit","copy"));w.addEventListener('load',w.close(),true);alert('Check your download folder for the text file');setTimeout(function(){var a=document.getElementsByClassName("docs-icon-undo")[0];for(var j=0; j<cnt; j++){e=document.createEvent("MouseEvents"); e.initEvent("click",true,false);a.dispatchEvent(e,true);e=document.createEvent("MouseEvents");e.initEvent("mousedown",true,false); a.dispatchEvent(e,true);e=document.createEvent("MouseEvents");e.initEvent("mouseup",true,false);a.dispatchEvent(e,true)}},5000);})();
代码已在 Chrome 浏览器上测试。
Google docs(在 Chrome 中)现在有一个工具可以预览应用了所有建议编辑的文档:
Tools
--> Review suggested edits
--> Preview "accept all"
虽然导出文档不反映预览,但可以打印和复制粘贴应用建议编辑的文档,因此可以用于获得应用建议编辑的纯文本或 pdf 版本文件.