You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用PowerShell将Excel数据复制到Outlook时出现乱码问题求助

解决PowerShell读取Excel内容到Outlook乱码的问题

你的问题核心在于直接用Get-Content读取Excel文件——.xlsx是压缩的二进制格式,根本不是纯文本文件,直接读取必然会得到乱码内容。下面给你两种实用的解决方案:

方法1:用Excel COM对象(无需额外模块,依赖Office组件)

这种方法适合已经安装Office的环境,能精准读取你指定的A1:C3区域:

# 创建Excel后台实例
$excel = New-Object -ComObject Excel.Application
$excel.Visible = $false # 不显示Excel窗口

# 打开目标工作簿和工作表
$workbook = $excel.Workbooks.Open("C:\Users\smi00019\Desktop\AO\Book1.xlsx")
$worksheet = $workbook.Worksheets.Item(1) # 取第一个工作表

# 逐行读取A1:C3区域,拼接成邮件正文格式
$body = ""
for ($row = 1; $row -le 3; $row++) {
    $rowContent = @()
    for ($col = 1; $col -le 3; $col++) {
        $rowContent += $worksheet.Cells.Item($row, $col).Text
    }
    $body += $rowContent -join "`t" # 用制表符分隔列,保持排版对齐
    $body += "`n" # 换行分隔行
}

# 清理Excel进程(避免后台残留)
$workbook.Close($false)
$excel.Quit()
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($worksheet) | Out-Null
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($workbook) | Out-Null
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel) | Out-Null
[GC]::Collect()
[GC]::WaitForPendingFinalizers()

# 生成Outlook邮件并填入内容
$outlook = New-Object -ComObject Outlook.Application
$mail = $outlook.CreateItem(0)
$mail.Subject = "Excel指定区域数据"
$mail.Body = $body
$mail.Display() # 显示邮件预览,需要直接发送可换成$mail.Send()

方法2:用ImportExcel模块(更简洁高效)

如果可以安装第三方模块,ImportExcel是PowerShell处理Excel的神器,代码会简洁很多:

  1. 先安装模块(需要管理员权限):
Install-Module -Name ImportExcel -Scope CurrentUser -Force
  1. 读取指定区域并生成邮件内容:
# 精准读取A1:C3区域数据
$excelData = Import-Excel -Path "C:\Users\smi00019\Desktop\AO\Book1.xlsx" -StartRow 1 -EndRow 3 -StartColumn 1 -EndColumn 3

# 转换为适合邮件的文本格式
$body = $excelData | Format-Table -AutoSize | Out-String

# 创建Outlook邮件
$outlook = New-Object -ComObject Outlook.Application
$mail = $outlook.CreateItem(0)
$mail.Subject = "Excel指定区域数据"
$mail.Body = $body
$mail.Display()

如果需要更美观的HTML表格邮件,还可以把$body替换成$excelData | ConvertTo-Html -Fragment | Out-String,然后设置$mail.HTMLBody = $body即可。

内容的提问来源于stack exchange,提问作者Smit Chheda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:41:16