Google 表格 – 查找和替换多个代码

Posted

技术标签:

【中文标题】Google 表格 – 查找和替换多个代码【英文标题】:Google Sheets – Find and Replace multiple Code 【发布时间】:2020-04-26 11:14:15 【问题描述】:

也许有人可以帮助我解决我的问题。

首先是一些背景知识:我已将一些 WhatsApp 聊天内容复制到 Google 表格。我使用 Latex 生成包含聊天的书。 Google Sheet 能够显示来自 WhatsApp 的所有表情符号,Latex 当然不能。因此,我将表情符号下载为 png 文件,并定义了 Latex 命令以将这些表情符号包含为图形。 例如:太显示我输入 \grin 的常规微笑表情符号。我有一个列表,其中一行中有数百个表情符号,下一行有相应的命令。 到目前为止,我在同一张表中使用了 search and replace -> replace all 来处理每种类型的表情符号。但由于这需要几个小时,我想知道是否有任何方法可以使其更有效。

这是一个带有小示例的电子表格:Google Sheet

提前致谢!

【问题讨论】:

您在哪里搜索和替换?同一个电子表格? @IMTheNachoMan 是的,我在帖子中添加了这些信息 为了正确理解您的问题,您能否提供一个示例电子表格?当然,请删除您的个人信息。 @Tanaike 我与聊天进行了简短的交谈,之后应该如何看待。你可以在这里找到它:docs.google.com/spreadsheets/d/… 感谢您回复和分享示例电子表格。从您共享的电子表格中,我提出了一个示例脚本作为答案。你能确认一下吗?如果我误解了您的问题并且这不是您想要的结果,我深表歉意。 【参考方案1】: 您想将表情符号替换为定义的 Latex 命令。 例如,你想替换如下。 从03.01.19, 00:29 - me: Hi ?03.01.19, 00:29 - me: Hi \nettnett。 您希望使用 Google Apps 脚本实现此目的。

如果我的理解是正确的,那么这个答案呢?请认为这只是几个可能的答案之一。

流程:

此示例脚本的流程如下。此示例脚本使用您的共享电子表格。

    Codes for Smileys 的工作表中检索数据。 为 Sheets API 的 batchUpdate 方法的 findReplace 请求创建请求正文。 运行batchUpdate方法。

示例脚本:

此脚本使用 Sheets API。所以,在你运行脚本之前,please enable Sheets API at Advanced Google services.

function myFunction() 
  var dataSheet = "Codes for Smileys";
  var sourceSheet = "unedited Chats with Smileys";

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var data = ss.getSheetByName(dataSheet).getDataRange().getValues();
  data.shift();
  var sheetId = ss.getSheetByName(sourceSheet).getSheetId();
  var requests = data.map(function(row) return findReplace: sheetId: sheetId, find: row[0], replacement: row[1]);
  Sheets.Spreadsheets.batchUpdate(requests: requests, ss.getId());

此示例脚本使用您的共享电子表格。所以在这种情况下,数据表是Codes for Smileys。转换的源表是unedited Chats with Smileys

注意:

如果您更改工作表名称,请同时修改上述脚本。请注意这一点。 当您第一次运行脚本时,会打开授权屏幕。所以请授权使用脚本的范围。

参考资料:

Advanced Google services spreadsheets.batchUpdate FindReplaceRequest

补充:

您想将转换后的值放到Chat with Latex Code 的工作表中。

实现上述的示例脚本如下。

示例脚本:

function myFunction2() 
  var dataSheet = "Codes for Smileys";
  var sourceSheet = "unedited Chats with Smileys";
  var destinationSheet = "Chats with LaTeX Codes";

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName(dataSheet);
  var data = ss.getSheetByName(dataSheet).getDataRange().getValues();
  data.shift();
  var srcSheet = ss.getSheetByName(sourceSheet);
  var tempSheet = srcSheet.copyTo(ss);
  var sheetId = tempSheet.getSheetId();
  var requests = data.map(function(row) return findReplace: sheetId: sheetId, find: row[0], replacement: row[1]);
  Sheets.Spreadsheets.batchUpdate(requests: requests, ss.getId());
  var tempValues = tempSheet.getDataRange().getValues();
  var destSheet = ss.getSheetByName(destinationSheet);
  destSheet.getRange(destSheet.getLastRow() + 1, 1, tempValues.length, tempValues[0].length).setValues(tempValues);
  ss.deleteSheet(tempSheet);

在此示例脚本中,运行以下流程。
    将源工作表unedited Chats with Smileys 复制为临时工作表。 为临时表的 batchUpdate 方法创建请求正文。 运行批处理更新。 将转换后的值从临时表复制到目标表Chats with LaTeX Codes。 在这种情况下,转换后的值将放在工作表的最后一行。 删除临时表。

【讨论】:

这真是太棒了!太感谢了!!最后一个问题:如果转换后的 Latex 聊天命令出现在子电子表格“使用 Latex 代码聊天”中,我该如何实现? 您是否也考虑过 Apps Script TextFinder class 的使用?我相信通过它及其replaceAllWith() 方法可以实现相同的功能。干杯 @simande 感谢您的回复。我很高兴你的问题得到了解决。关于您的附加问题,如果您想将转换后的值放入Chat with Latex Code 的工作表中,在这种情况下,首先将unedited Chats with Smileys 的工作表复制为临时工作表并转换值,然后复制它们到Chat with Latex Code 的工作表。通过这个流程,可以解决您的附加问题。如果我误解了您的问题,我深表歉意。 @carlesgg97 感谢您的评论。当然,TextFinder也可以如你所说使用。在这种情况下,需要为 OP 要转换的每个数据创建 TextFinder。所以我建议使用Sheets API的bachUpdate方法,一个API调用就可以使用,请求体可以轻松创建。如果我误解了您的评论,我深表歉意。 @simande 我又添加了一个示例脚本来解决您的其他问题。你能确认一下吗?如果我误解了您的目标,我深表歉意。

以上是关于Google 表格 – 查找和替换多个代码的主要内容,如果未能解决你的问题,请参考以下文章

一页上有多个 goog_report_conversion 标记 - Google Adwords 转化跟踪

使用绝对引用($)锁定Google Spreadsheets中的多个单元格

修改查找和替换的 VBA 代码以循环遍历多个工作表

可以使用 GKE Workload Identity 访问 Google 表格吗?

查找和替换字符串

Google 表格 - 创建新行时自动替换值