我创建了一个将docx文件转换为html文件的脚本。
html文件通过电子邮件作为html文本发送。
要将文档转换为html,可以这样做。
function ConvertDocToHtml {
[cmdletbinding()]
param($DocFile,[string]$HTMLTemplate)
# Fix Type Error
Add-Type -AssemblyName Microsoft.Office.Interop.Word
$saveFormat = [Enum]::Parse([Microsoft.Office.Interop.Word.WdSaveFormat], "wdFormatFilteredHTML");
$word = new-object -comobject word.application
$word.Visible = $False
$opendoc = $word.documents.open($DocFile.FullName);
$opendoc.saveas($HTMLTemplate, $saveFormat);
$opendoc.close();
$word.quit();
}
要在发送电子邮件之前修复HTML文本中的特殊字符,我可以使用类似的替换功能
$Body = Get-Content $HTMLFile -Raw
$BodyHTML = ReplaceChars $Body
function ReplaceChars {
[cmdletbinding()]
# EncodeHTMLSpecialChars
$Streng = $Streng.Replace("à", "à");
$Streng = $Streng.Replace("è", "è");
$Streng = $Streng.Replace("€", "€");
...
Send-MailMessage ... -Body $BodyHTML -BodyAsHtml
一切正常,但是当我在docx文件中使用选项卡或多个空格时,电子邮件的文本会显示这些字符
Total         € 100,00
我试图以这种方式进行转换,但没有成功
$Streng = $Streng.Replace("Â", " ");
我该如何解决这个问题?
谢谢
答案 0 :(得分:1)
Word的另存为HTML将用no-break spaces(160
/ 0xa0
)替换制表符。
可以用.Replace()
替换这些字符,但是当每个选项卡扩展到几个空格时,正则表达式就会出现。像这样
# Replace no-break spaces with ordinary spaces
[regex]::replace($Streng , '\xa0+', ' ')