【问题标题】:Retain cell comments when emailing Excel table (using RangeToHTML)通过电子邮件发送 Excel 表格时保留单元格注释(使用 RangeToHTML)
【发布时间】:2020-06-18 15:12:49
【问题描述】:

我正在使用 Ron de Bruin 著名的“rangetoHTML”的调整版本来使用 Outlook 发送 Excel 范围(可在此处找到:https://www.rondebruin.nl/win/s1/outlook/bmail2.htm)。虽然这工作正常,但某些单元格的 cmets 在逻辑上不会转移到 Outlook 中。

我认为可以将 cmets 添加为工具提示,添加一些 CSS(如在此处找到:https://www.w3schools.com/howto/howto_css_tooltip.asp),但不确定 a) Outlook 是否支持 HTML 电子邮件中的工具提示(我见过冲突消息),b)如果是,如何在publishobjects吐出的html中实现它

吐出 HTM 的相关位,但对如何包含工具提示感到困惑。

   With TempWB.PublishObjects.Add( _
        SourceType:=xlSourceRange, _
        Filename:=TempFile, _
        Sheet:=TempWB.Sheets(1).Name, _
        Source:=TempWB.Sheets(1).UsedRange.Address, _
       HtmlType:=xlHtmlStatic)
      .Publish (True)
  End With

感谢您的帮助,谢谢。

【问题讨论】:

    标签: html excel vba outlook


    【解决方案1】:

    这是部分答案。如果它看起来很有希望,我会完成它,尽管可能要到周末。

    我使用 PublishObjects 输出了一个范围,然后根据您的需要修改了输出文件以添加工具提示。使用 Microsoft Edge,修改后的文件正确显示,当我将鼠标悬停在相关单元格上时出现提示。我没有在 Outlook 上尝试过这个,但我认为 Outlook 使用与 Edge 相同的显示引擎,因此它应该可以与 Outlook 一起使用。这需要在做更多工作之前进行测试。

    Ron de Bruin 提供了一个出色的例程,可以为 PublishObjects 准备几乎任何范围、调用 PublishObjects、获取它创建的文件并将其作为准备好成为电子邮件 Html 正文的字符串返回。

    据我所知,无法让 PublishObjects 以您需要的方式将 cmets 添加到输出中。您必须添加必要的代码。

    使用方法 1,您需要在函数 RangeToHtml 中在“获取它创建的文件”和“将其作为字符串返回”之间添加新代码。也就是说,您让 PublishObjects 做它的事情,然后在将输出返回给调用者之前修改它的输出。

    函数RangeToHtml 中的许多代码允许范围不连续,我认为PublishObjects 无法处理。如果您有一个简单的范围,那么创建一个新的RangeToHtml 来处理简单的范围和您的要求会更容易。这将是方法 2。

    方法 1 或方法 2 会更好地满足您的要求。

    PublishObjects 创建的 Html 文件包含一个表。表格中没有任何内容可以指示哪个表格单元格来自哪个 Excel 范围单元格。如果范围的第 2 行第 5 列有注释,则必须先倒数 s,然后倒数 s 才能找到相应的表格单元格。必须修改该表格单元格。如果现有单元格值为 Xxxx 且注释为 Yyyy,则需要将 Xxxx 替换为:

    <div class="tooltip">Xxxx<span class=tooltiptext>Yyyy</span></div>
    

    这听起来有趣吗?

    【讨论】:

    • 您好托尼,感谢您的回复!我正在考虑以同样的方式做这件事;循环遍历 HTML 表并为任何具有注释的值添加工具提示代码。 HTML 表格在行/列方面与 Excel 表格本质上是否具有相同的模式?我在 excel 中的范围的第 1 行也是 HTML 表中的第 1 行 - 我从你那里了解到它是相同的,这让生活更轻松。我也考虑过从头开始构建 HTML 表,但我喜欢使用 publishobjects,因为它会自动维护格式,所以我认为方法 #1 是首选。
    • @JasperD Html 表显然与 Excel 范围相匹配。在RangeToHtml 的底部附近有Kill TempFile。删除该语句,临时文件不会被删除,因此您可以像我一样检查它。我看不到额外的行或列,我无法想象为什么会有。
    • @JasperD 我的方法 2 也将使用 PublishObjects。 RangeToHtml 创建一个临时工作簿,将范围复制到 Sheet(1),然后调用 PublishObjects 以输出 Sheet(1)。如果它是一个简单的范围,您可以从其原始工作表中输出该范围。我的方法 2 将把所有复杂的东西排除在外。
    • 可以使用 VBA 将 Excel 范围转换为 Html 并复制所有格式,但它比 PublishObjects 需要更长的时间。
    • 是的,我知道这一切——我会试一试;而且,您永远不会知道 HTML,它有时会违反直觉,而且我根本不擅长编写它,所以这就是我怀疑的原因。我试图跳过创建新工作簿等,但由于某种原因,如果工作簿中有多个工作表,publishobjects 似乎不会发布,因此似乎需要创建一个单工作簿。我需要顺便添加css位还是添加您在答案中输入的行就足够了?
    猜你喜欢
    • 1970-01-01
    • 2012-02-07
    • 2013-01-20
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    • 2022-01-03
    • 2016-05-18
    • 2015-10-05
    相关资源
    最近更新 更多