【问题标题】:How to maintain HTML mark -up as-is in an google sheet cell without breaking the html tag如何在不破坏 html 标记的情况下在 google sheet 单元格中保持 HTML 标记原样
【发布时间】:2019-03-07 22:08:14
【问题描述】:

我正在尝试使用 google sheet 在单元格中添加电子邮件的完整 HTML,其中我有文本、图像 src、href src 等变量。

现在我正在使用 google 脚本将标签替换为值,以便我可以复制完整的 html 并将其粘贴到电子邮件营销系统中。

我这样做是因为我的电子邮件营销系统不支持变量。

但是,我注意到,当我将 HTML 模板标记粘贴到单元格中时,Google 工作表会在现有的 "" 周围添加一组额外的 ""

例如,如果这是我粘贴的 HTML:

<!DOCTYPE html>
<html>
<body>

<h1>My First Heading</h1>
<p>My first paragraph.</p>
<a href="https://www.Google.com">Visit Google</a>


</body>
</html>

这会变成这样:

<!DOCTYPE html>
<html>
<body>

<h1>My First Heading</h1>
<p>My first paragraph.</p>
<a href=""https://www.Google.com"">Visit Google</a>


</body>
</html>

注意:

<a href="https://www.Google.com">Visit Google</a>

Google 表格正在我的 href src 周围添加额外的集合 ok ""。所有标签都有同样的问题。

<a href=""https://www.Google.com"">Visit Google</a>

我担心的是 google sheet 是否可以在单元格中保持 html 原样?这个问题有什么解决办法吗?

【问题讨论】:

  • 1.使用单引号。 2. 为什么不直接将其作为html文件粘贴到脚本编辑器中?
  • 因为我正在创建此工作表以方便用户编辑 HTML 中的内容。谁可以简单地在变量中添加值并单击按钮,我的脚本将用 HTML 中的值替换变量。
  • 使用脚本编辑器无法解决我想要解决的问题。
  • 嗨@TheMaster 我不是 100% 确定如何使用文档中的 html 模板。有什么例子/步骤可以遵循吗?仅供参考。我不是在尝试构建 HTML,我已经拥有完整电子邮件模板的 HTML。只是试图找到一种简单的方法让用户在 google sheet 中的变量中添加值,并且按钮脚本将执行脚本,该脚本将在 HTML 代码中查找变量并替换它。因此用户可以粘贴新更新的 HTML 代码并在电子邮件营销系统中使用。

标签: html google-apps-script google-sheets google-apps google-sheets-formula


【解决方案1】:

试试这个:

//Just enter the strings shown below into those cells in Sheet1 which no quotations and then run the script and you'll see your html
//A1=My First Heading
//A2=My first paragraph.
//A3=http://google.com
//A4=Visit Google

function displayEmailHtml() {
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getSheetByName('Sheet1');
  var rg=sh.getRange(1,1,4,1);
  var vA=rg.getValues();
  var html=Utilities.formatString('<!DOCTYPE html><html><body><h1>%s</h1><p>%s</p><a href="%s">%s</a>/body></html>',vA[0][0],vA[1][0],vA[2][0],vA[3][0]);
  var userInterface=HtmlService.createHtmlOutput(html);
  SpreadsheetApp.getUi().showModelessDialog(userInterface, 'My Email Html');
}

要回答你的第二个问题,试试这个:

function displayEmailHtml() {
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getSheetByName('Sheet1');
  var rg=sh.getRange(1,1,4,1);
  var vA=rg.getValues();
  var html=Utilities.formatString('<!DOCTYPE html>\n<html>\n<body>\n<h1>%s</h1>\n<p>%s</p>',vA[0][0],vA[1][0]);
  html+=Utilities.formatString('\n<a href="%s">%s</a>\n</body>\n</html>',vA[2][0],vA[3][0]);
  html=html.replace(/>/g,'&gt');
  html=html.replace(/</g,'&lt');
  html=Utilities.formatString('<pre>%s</pre>',html);
  var userInterface=HtmlService.createHtmlOutput(html);
  SpreadsheetApp.getUi().showModelessDialog(userInterface, 'My Email Html');
}

【讨论】:

  • 嗨@Cooper 谢谢你的代码。它确实有效,而且很棒。在我的用例中,我不希望获得 HTML 输出。我想在更新完成后显示原始 html 标记。我们该怎么做?
  • 感谢@Cooper 的更新。它正在工作,这正是我正在寻找的。给你的问题:在这种方法中,我们遵循第一个变量与第一个单元格值相关的顺序方法,第二个变量与第二个单元格值相关等等......是否可以分配变量,如“heading1”,“href_url” ,“button_text”等?第二个问题是:这是从“%s”来的?它是在某处宣布的吗?为什么是“%s”?
  • 由于我们遵循顺序方法,如果我们有像&lt;a href="%s"&gt;%s&lt;/a&gt; 这样的一行,这种方法是否会非常准确,并且总是替换首先出现的任何变量,即使我们有多个变量在同一个行吗?
  • 我也在测试添加整个电子邮件模板。由于电子邮件模板 HTML 代码与仅一行相比要多得多,因此输出中只有一行。将整个 html 模板放在一个单独的文件中可能需要做很多工作,并且不确定这是否可行,因为完整的 HTML 电子邮件模板可能有很多标签、特殊字符等。你的想法?有什么方法可以改进以支持完整的 HTML 电子邮件模板?
  • H @Cooper,我看到您已经更新了代码,但使其适用于真正的电子邮件模板可能是一个挑战。此方法将如何与包含完整 HTML 标记/CSS 的示例模板一起使用:https://www.w3schools.com/w3css/tryit.asp?filename=tryw3css_templates_cafe
猜你喜欢
  • 1970-01-01
  • 2014-07-29
  • 1970-01-01
  • 2011-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-05
  • 1970-01-01
相关资源
最近更新 更多