使用 VBA 动态创建 HTML 表格行

2023-12-06

我正在使用 VBA 在 Outlook 电子邮件中创建一个表。我已经弄清楚如何生成表,但我的问题是我需要动态调整表中的行数。对于某些电子邮件,将有两行数据,对于其他电子邮件,将有三行,依此类推。

在下面的代码中rowstocontact is a Collection。我知道我想循环Collection并为集合中的每个项目添加一行,但我不知道如何在创建表的 html 代码中插入循环。

任何帮助是极大的赞赏!!谢谢。

    bodytext = "<head><style>table, th, td {border: 1px solid gray; border-collapse:" & _
    "collapse;}</style></head><body>" & _
    "<table style=""width:60%""><tr>" & _
    "<th bgcolor=""#bdf0ff"">Reviewee</th>" & _
    "<th bgcolor=""#bdf0ff"">Manager(s)</th>" & _
    "<th bgcolor=""#bdf0ff"">Project code</th>" & _
    "<th bgcolor=""#bdf0ff"">Requested</th>" & _
    "<th bgcolor=""#bdf0ff"">Type</th>" & _
    "<th bgcolor=""#bdf0ff"">Due</th></tr><tr>" & _
    "<td ""col width=10%"">" & Range("D" & rowtocontact(1)) & "</td>" & _
    "<td ""col width=10%"">" & Range("L" & rowtocontact(1)) & "</td>" & _
    "<td ""col width=10%"">" & Range("M" & rowtocontact(1)) & "</td>" & _
    "<td ""col width=10%"">" & Range("AJ" & rowtocontact(1)) & "</td>" & _
    "<td ""col width=10%"">" & Range("V" & rowtocontact(1)) & "</td>" & _
    "<td ""col width=10%"">" & Range("AK" & rowtocontact(1)) & "</td>" & _
    "<td ""col width=10%"">" & Range("AK" & rowtocontact(1)) & "</td>" & _
    "</tr></Table></body>"

您需要将 HTML 分成 3 部分,并为每个部分设置一个字符串变量:

  • 行之前的所有内容
  • 行数
  • 行之后的所有内容

在代码的第二部分中,您可以迭代(行引用)集合并通过添加动态构建表<tr>...</tr>可以容纳尽可能多的项目Collection.

将字符串设置为“行后的所有内容”后,您可以将所有三个部分连接在一起以获得最终的 HTML 字符串。

这是示例代码 - 请注意我添加了工作表参考(ws)作为最佳实践,也落入了决赛<td>每行,因为它看起来像是列上值的重复AK您没有标题。无论如何,您可以根据需要进行调整:

Option Explicit

Sub CreateEmailHtml()

    Dim ws As Worksheet
    Dim coll As New Collection
    Dim lngCounter As Long
    Dim strBeforeRows As String
    Dim strRows As String
    Dim strAfterRows As String
    Dim strAll As String

    ' get a worksheet reference
    Set ws = Sheet1

    ' test collection
    coll.Add 2
    coll.Add 4
    coll.Add 6

    ' HTML before rows
    strBeforeRows = "<head><style>table, th, td {border: 1px solid gray; border-collapse:" & _
        "collapse;}</style></head><body>" & _
        "<table style=""width:60%""><tr>" & _
        "<th bgcolor=""#bdf0ff"">Reviewee</th>" & _
        "<th bgcolor=""#bdf0ff"">Manager(s)</th>" & _
        "<th bgcolor=""#bdf0ff"">Project code</th>" & _
        "<th bgcolor=""#bdf0ff"">Requested</th>" & _
        "<th bgcolor=""#bdf0ff"">Type</th>" & _
        "<th bgcolor=""#bdf0ff"">Due</th></tr>"

    ' iterate collection
    strRows = ""
    For lngCounter = 1 To coll.Count
        strRows = strRows & "<tr>"
        strRows = strRows & "<td ""col width=10%"">" & ws.Range("D" & coll(lngCounter)).Value & "</td>"
        strRows = strRows & "<td ""col width=10%"">" & ws.Range("L" & coll(lngCounter)).Value & "</td>"
        strRows = strRows & "<td ""col width=10%"">" & ws.Range("M" & coll(lngCounter)).Value & "</td>"
        strRows = strRows & "<td ""col width=10%"">" & ws.Range("AJ" & coll(lngCounter)).Value & "</td>"
        strRows = strRows & "<td ""col width=10%"">" & ws.Range("V" & coll(lngCounter)).Value & "</td>"
        strRows = strRows & "<td ""col width=10%"">" & ws.Range("AK" & coll(lngCounter)).Value & "</td>"
        strRows = strRows & "</tr>"
    Next lngCounter

    ' HTML after rows
    strAfterRows = "</table></body>"

    ' final HTML - concatenate the 3 string variables
    strAll = strBeforeRows & strRows & strAfterRows

    Debug.Print strAll

End Sub

因此,给定以下示例数据:

enter image description here

你得到这个 HTML 作为输出 - 它通过使用很好地格式化Tidy堆栈片段编辑器中的按钮以提高可读性:

<head>
  <style>
    table,
    th,
    td {
      border: 1px solid gray;
      border-collapse: collapse;
    }
  </style>
</head>

<body>
  <table style="width:60%">
    <tr>
      <th bgcolor="#bdf0ff">Reviewee</th>
      <th bgcolor="#bdf0ff">Manager(s)</th>
      <th bgcolor="#bdf0ff">Project code</th>
      <th bgcolor="#bdf0ff">Requested</th>
      <th bgcolor="#bdf0ff">Type</th>
      <th bgcolor="#bdf0ff">Due</th>
    </tr>
    <tr>
      <td "col width=10%">foo2</td>
      <td "col width=10%">bar2</td>
      <td "col width=10%">baz2</td>
      <td "col width=10%">quux2</td>
      <td "col width=10%">qux2</td>
      <td "col width=10%">quuux2</td>
    </tr>
    <tr>
      <td "col width=10%">foo2</td>
      <td "col width=10%">bar2</td>
      <td "col width=10%">baz2</td>
      <td "col width=10%">quux2</td>
      <td "col width=10%">qux2</td>
      <td "col width=10%">quuux2</td>
    </tr>
    <tr>
      <td "col width=10%">foo6</td>
      <td "col width=10%">bar6</td>
      <td "col width=10%">baz6</td>
      <td "col width=10%">quux6</td>
      <td "col width=10%">qux6</td>
      <td "col width=10%">quuux6</td>
    </tr>
  </table>
</body>

HTH

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 VBA 动态创建 HTML 表格行 的相关文章

  • HTML 表单 POST 到 PHP 页面 [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 好的 我创
  • 当通过 Jquery 将当前页面的 html 传递到托管 bean 时,primefaces RemoteCommand 标记不起作用

    我正在使用 Jquery 的 html 方法获取当前页面的 HTML 如下所示
  • 如何在没有文本修饰的文本下方添加一行:下划线? [复制]

    这个问题在这里已经有答案了 我需要在文本下方添加一行 而不需要文本装饰 下划线 否则如何在文本和行之间创建自定义空间 我们所做的 您可以使用Border Bottom和一些Padding Bottom a border bottom 1px
  • 如何在标签中制作文字自动换行

    我想在其中添加文字 a 标签适合固定的 div 但它会破坏 div 并且显示得很丑 CSS3 有一个属性 word wrap break word 看看MDN 自动换行文档 https developer mozilla org en CS
  • Excel HTTP 获取超时

    我们有这个小子 它只是将数据泵入远程服务器 一切都按预期进行 前几天 网络服务器发生了一次持续大约一个小时的事件 我仍然可以 PING 服务器 但 IIS 没有响应 结果 宏只是挂起等待响应 关于快速通过 失败测试或超时有什么想法吗 Sub
  • 将外部脚本嵌入 Next.js 应用程序

    我一直在尝试将外部 JavaScript 源嵌入到我的 Next js 应用程序中 但不断收到以下错误 无法对 文档 执行 写入 无法写入 从异步加载的外部脚本写入文档 除非 它是明确打开的 可以找到我尝试使用的代码here https w
  • 关闭 Bootstrap 模式 onclick

    我使用 Bootstrap 模式让用户在将商品添加到购物车之前选择产品选项 我之前在这种情况下使用过它们 没有任何问题 但这个没有按预期关闭 当用户单击 添加到购物车 按钮时 会发生一些事情 我认为问题就在那里 首先 一些脚本检查某些字段是
  • 标题的固定高度和更改宽度(HTML 表格)

    我需要确保表格标题的高度是固定的 并且宽度是根据标题单元格内容进行调整的 标题文本最多显示两行 我们如何使用样式来做到这一点 另外 我想确保表行的宽度与标题行的宽度相同 即标题行决定宽度 注 目前 交易部门负责人别名 是按行排列的 它需要分
  • 文本区域下的额外填充

    我的文本区域下面有额外的填充 但我似乎找不到它的来源 我已将单独的代码放在此页面上 http jsfiddle net wfuks http jsfiddle net wfuks 我似乎找不到它的来源 它有类 field field bac
  • FPDF - 内嵌粗体文本

    我正在尝试从 PHP 创建 PDF 出于法律原因 我们需要将免责声明的一部分设为粗体 并且需要概述免责声明 我当前的代码使用 if isset POST optout POST optout yes pdf gt Ln 5 pdf gt S
  • 在占位符中添加 HTML

    我喜欢使用 HTML 占位符 因为它有助于向用户描述他们需要输入的内容类型 但是 有时您需要为用户提供更多信息 而不仅仅是简单的句子 基本上我希望能够在我的文本区域占位符中添加换行符 制表符等 我听说过使用特殊编码来做到这一点 并且已经使用
  • 从 firebase 数据库获取最高分值

    在我的网站上有一些我从 firebase 获得的电影 电影的分数在0到100之间 我已经在我的网站上找到了所有电影 我还想按降序显示它们 例如评分最高的 5 部电影 我怎样才能实现这一点 感谢您的回答 const app initializ
  • 在 HTML TextArea 中设置(或读取)光标/插入符的值

    我正在尝试 但失败了 在 HTML 文本区域中实现拖放机制 使用 jQuery 或 Scriptaculous 我们都使用 拖放机制相对容易 因此我愿意接受使用这两者之一的答案 问题是 我似乎找不到读取或设置插入点的方法 我最终想要做的是确
  • 在java中将DataURL图像转换为图像文件

    我在我的 java servlet 中接收图像 DataURL 它看起来像 data image jpeg base64 9j 4AAQSkZJRgABAQAAAQABAA 我需要将其另存为图像文件 我该怎么做 The simplest w
  • html5 vs flash - 完整的比较图表在哪里? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 因此 自从史蒂夫 乔布斯说 Flash 很糟糕并暗示 HTML5 可以完成 Flash 可以做的所有事情
  • 适用于 HTML5 混合应用程序的 CORS

    我读过很多关于 CORS 的文章 以及允许 Access Control Allow Origin 如何成为 Web 服务器的安全漏洞 但没有一篇文章解释了如何允许 HTML5 混合应用程序访问某些不允许使用通配符 的域上托管的 Web 服
  • 使用js获取选择选项的onclick事件

    我有一个非常令人沮丧的问题 我有这个代码 它过滤掉我的结果并将它们输入到选择框中 var syn
  • Excel VBA 自动过滤子字符串

    我的 Excel 中有多行 其中 D 列为 TDM 02 Bundle Rehoming 5 NE TDM 02 Bundle Rehoming 23 NE IP 02 Bundle Rehoming 7 NE 等 请注意 大多数情况下 N
  • 有没有办法破解 Excel VBA 项目的密码?

    我被要求更新一些 Excel 2003 宏 但 VBA 项目受密码保护 而且似乎缺少文档 没有人知道密码 有没有办法删除或破解 VBA 项目上的密码 你可以直接尝试这个VBA不需要十六进制编辑的方法 它适用于任何文件 xls xlsm xl
  • CSS交付优化:如何推迟CSS加载?

    我在尝试着优化 CSS 交付遵循针对开发人员的谷歌文档https developers google com speed docs insights OptimizeCSSDelivery example https developers

随机推荐

  • 将表从 R 传输到 SQL

    我知道通常要从头开始创建一个SQL表 您需要首先创建一个空表 然后将数据插入到该表中 例如 create table CREATE TABLE Customers CustomerName int ContactName varchar 2
  • 在 jQuery Mobile 1.1 中进行繁重处理之前显示加载微调器?

    我要疯狂地尝试让旋转器出现 我已将繁重的处理功能绑定到一个按钮 document delegate clearread tap onClearRead 所以点击它会调用这个 var onClearRead function setTimeo
  • “System.IO.Stream”不包含 Windows 应用商店应用中“关闭”的定义

    当尝试在 Windows 应用商店应用程序上构建我的 Unity 3D 项目时 出现此错误 System IO Stream 不包含 Close 的定义 并且找不到接受 System IO Stream 类型的第一个参数的扩展方法 Clos
  • 用于突出显示功能的更高效的 JavaScript 代码?

    所以这是我需要清理的功能 我需要创建一个功能 观众可以单击句子中的任何单词 它就会突出显示 然而 我需要做到一次只突出显示一个单词 例如 如果您单击单词 you 然后您改变主意并单击单词 eagle 则单词 you 将被取消选择 它已经有现
  • UseStatusCodePagesWithReExecute 不适用于禁止 (403)

    当我指定 404 作为 http 结果代码时 UseStatusCodePagesWithReExecute正在按预期工作 当我指定 403 作为 http 结果代码时 UseStatusCodePagesWithReExecute没有按预
  • 运行 Java 程序

    我查看了其他一些 SO 问题 没有找到任何可以解决我的问题的内容 我有一个 Main java 文件 如下 和一个 OthelloLib jar 文件 没有关联的源文件 Running javac Main java失败了 Main jav
  • 如何在 ASP.Net Core 6.0 中实现 HSTS 标头?

    我需要在 ASP Net Core 6 0 WEB API 应用程序中实现 HSTS 标头安全性 下面是我的程序 cs var builder WebApplication CreateBuilder args Https redirect
  • Twilio 录制:暂停和恢复

    我相信答案是否定的 但 Twilio 是否提供暂停 恢复录音的功能 用例是对通话进行录音 但在收集敏感信息时暂停录音 从 REST 文档来看 它似乎不是受支持的功能 我认为有人可能已经找到了满足此要求的一些选项 这是可能的 尽管从文档中并不
  • 在 Python 3 中从 utf-16 转换为 utf-8

    我正在使用 Python 3 进行编程 但遇到了一个小问题 我在网上找不到任何关于它的参考 据我了解 默认字符串是 utf 16 但我必须使用 utf 8 我找不到将从默认字符串转换为 utf 8 的命令 我非常感谢你的帮助 在 Pytho
  • 当 springboot 应用程序在 docker 容器上运行时,无法找到 LoginModule 类:org.apache.kafka.common.security.plain.PlainLoginModule

    我有一个 Spring Boot 应用程序使用spring kafka向 kafka 发布消息的依赖 kafka 配置使用标准 kafka properties sasl jaas config 对 kafka 服务器进行身份验证 应用程序
  • 如何从 Newlib 在 GCC 中实现 printf?

    我正在努力使用 GCC 将 printf 从 newlib 正确实现到我的 esp32 中 我已经阅读了 newlib 文档 它为我提供了有关如何调用 printf 的一般信息 但没有向我解释后端实现 根据我当前的研究 我确定 printf
  • Jenkins 基于用户的工作安全

    我在本地计算机上只有一个 jenkins 实例 我们用它来构建代码 我们有不同的项目团队从事不同的项目 每个项目都有不同的工作 为了消除一个团队中的某人意外搞乱另一个团队工作的可能性 我创建了多个 jenkins 用户 但是 所有可以登录的
  • Sqlite 中的 acos 函数

    我有一个关于 SQLite 查询的问题 我需要执行这样的 sqlite 查询 SELECT id 6371 acos cos radians 78 3232 cos radians lat cos radians lng radians 6
  • 在 Android (JAVA) 中的字符串上使用 XPath

    我正在寻找一些在 Android 中使用 xpath 的示例 或者谁能 分享一下他们的经历 我一直在努力解决这个问题的尾部或头部 我有一个包含标准 xml 文件的字符串 我相信我需要将其转换为 xml 文档 我发现这段代码我认为可以解决问题
  • 如何让 2 个 HtmlUnit Web 客户端使用相同的 cookie?

    如果我在不同的线程中创建 2 个 WebClient 如何让它们使用相同的 cookie 您可以使用以下代码 CookieManager cookieManager new CookieManager webClient1 setCooki
  • 无法将 NSTaggedPointerString 类型的值转换为 NSDictionary

    我正在尝试将 Firebase 值分配给我的结构 var productsArray Product 但是我有一个小错误 无法将 NSTaggedPointerString 类型的值转换为 NS字典 我知道我不能直接分配它们 所以这就是我这
  • NOT IN 不会产生与 NOT EXISTS 相同的结果

    这些都是相当基本的陈述 我有一个链接到另一个表中的项目的图形列表 我想检查有多少图形没有使用并且理论上可以删除 所以首先我使用了 NOT IN 子句 SELECT GraphicNr Graphicfile FROM dbo Graphic
  • 对哈希进行排序的最快方法是什么?

    人们经常问什么是best方式对哈希进行排序 但随后他们不会询问所需的后续问题 即什么是fastest方式 这确实决定了最好的方式 无论使用什么版本的 Ruby 在 Ruby 中对哈希进行排序的最快方法是什么 我正在寻找其他答案 以涵盖极端情
  • 从 Android 中 JSONString 中存储的 URL 加载 ImageView 中的图像

    我有一个JSON字符串 说出名称和 Url 我需要将名称提取到TextView并提取并显示图像ImageView 以下是上述场景的代码 public static final String JSON STRING WebImages Ima
  • 使用 VBA 动态创建 HTML 表格行

    我正在使用 VBA 在 Outlook 电子邮件中创建一个表 我已经弄清楚如何生成表 但我的问题是我需要动态调整表中的行数 对于某些电子邮件 将有两行数据 对于其他电子邮件 将有三行 依此类推 在下面的代码中rowstocontact is