如何在PowerShell生成的Outlook邮件HTML表格间添加间距
问题描述
我编写了一段PowerShell脚本,用于从TFS获取缺陷数据并生成包含相关标题的HTML表格。该脚本通过读取XML中的2个查询ID,创建出2个表格后以邮件形式发送。目前脚本可正常运行,但两个表格紧密相连,尝试过<br>、div等方式添加间距均未成功。现仅提供表格相关代码,请求在不修改表格本身结构的前提下,实现两个表格间的间距添加。
相关代码如下:
$HtmlTable = "<table border='1' align='Left' cellpadding='2' cellspacing='0' style='color:black;font-family:arial,helvetica,sans-serif;text-align:left;'> <tr style ='font-size:14px;font-weight: normal;background: #FFFFFF'> <th align=left><b>Version</b></th> <th align=left><b>Severity</b></th> <th align=left><b>Title</b></th> <th align=left><b>State</b></th> </tr>" $HtmlTable += "<tr style='font-size:14px;background-color:#FFFFFF'> <td>" + $CloudVersion + "</td> <td>" + $Bug_Severity + "</td> <td>" + $Bug_Title + "</td> <td>" + $Bug_State + "</td> </tr>" $HtmlTable += "</table>"
以上代码封装为函数并调用两次,$Htmls变量存储两个表格:
$Htmls += $HtmlTable
以下为展示表格的函数:
function Print ($Htmls) { $outlook = [Runtime.InteropServices.Marshal]::GetActiveObject('Outlook.Application') $Mail = $Outlook.CreateItem(0) foreach ($html in $Htmls) { $mail.HTMLBody += $html } $Mail.Display() }
解决方案
由于Outlook采用Word的HTML渲染引擎,对普通HTML元素的支持有限,普通<br>标签在左对齐表格场景下无法产生有效间距,以下几种方法可在不修改表格内部结构的前提下实现间距添加:
方法1:在拼接表格时插入带样式的分隔元素
每次向$Htmls添加表格后,追加一个带有底部外边距的div元素:
# 每次添加表格后加入间距元素,20px可按需调整 $Htmls += $HtmlTable $Htmls += "<div style='margin-bottom:20px;'></div>"
方法2:在Print函数的循环中插入间距
直接在循环添加表格的逻辑里,每次添加完表格后插入分隔元素,无需修改表格生成代码:
function Print ($Htmls) { $outlook = [Runtime.InteropServices.Marshal]::GetActiveObject('Outlook.Application') $Mail = $Outlook.CreateItem(0) foreach ($html in $Htmls) { $mail.HTMLBody += $html # 添加底部间距 $mail.HTMLBody += "<div style='margin-bottom:20px;'></div>" } $Mail.Display() }
方法3:用带间距的div包裹每个表格
在生成单个表格的最后一步,将表格包裹在带有底部外边距的div中,不改动表格自身代码:
# 生成表格后包裹div $HtmlTable += "</table>" $HtmlTable = "<div style='margin-bottom:20px;'>" + $HtmlTable + "</div>"
内容的提问来源于stack exchange,提问作者Bandit
相关产品推荐
相关产品推荐

