Mac环境PowerShell使用Import-Excel时如何将Excel图表导出为PNG文件
问题背景
在Mac环境下使用Import-Excel模块生成包含图表的Excel文件,因系统不支持Windows专属的ComObject,无法使用网上常见的Com对象方案将图表导出为.png格式文件。当前脚本已可获取到OfficeOpenXml.Drawing.Chart.ExcelBarChart类型的图表对象,需要实现该对象到PNG文件的导出。
当前已完成的脚本代码:
$package = Export-Excel -InputObject $data -Path $filename -TableName Xyz -ExcelChartDefinition $c -AutoNameRange -PassThru Write-Host "Package is " $package.ToString() $wb = $package.Workbook Write-Host "Workbook is " $wb.ToString() foreach ($ws in $wb.Worksheets) { Write-Host "Worksheet is " $ws.ToString() foreach ($excelchart in $ws.Drawings) { Write-Host "Chart is " $excelchart.ToString() } }
脚本运行输出:
Package is OfficeOpenXml.ExcelPackage Workbook is OfficeOpenXml.ExcelWorkbook Worksheet is Sheet1 Chart is OfficeOpenXml.Drawing.Chart.ExcelBarChart
实现方案
Import-Excel底层基于EPPlus类库实现,旧版本无原生图表转图片能力,可根据自身环境选择以下跨平台方案:
方案1:使用模块内置导出方法(推荐,ImportExcel版本≥7.8.0)
最新版ImportExcel已经封装了跨平台图表导出能力,无需依赖Office或Com组件,直接调用方法即可导出:
- 先将ImportExcel升级到最新版本:
Install-Module -Name ImportExcel -Force -Scope CurrentUser
- 在现有遍历图表的逻辑中,直接调用
SaveAsImage方法导出PNG:
foreach ($ws in $wb.Worksheets) { # 过滤出图表类型的Drawing对象 foreach ($excelchart in $ws.Drawings.Where({$_ -is [OfficeOpenXml.Drawing.Chart.ExcelChart]})) { # 拼接导出文件路径 $exportPath = Join-Path (Split-Path $filename -Parent) "exported_chart_$($ws.Name).png" # 导出为PNG,第二个参数可选,用于指定导出DPI,例如传入300即可导出300DPI高清图片 $excelchart.SaveAsImage($exportPath, 150) } } # 操作完成后释放ExcelPackage资源 $package.Dispose()
- 该方法底层基于跨平台的SixLabors绘图库实现,原生兼容Mac、Linux系统,无额外依赖。
方案2:基于LibreOffice命令行导出(兼容低版本模块)
如果无法升级ImportExcel版本,可通过LibreOffice的无头转换能力实现导出:
- 先在Mac上安装LibreOffice
- 先正常保存Excel文件,调用LibreOffice命令行将文件转换为PDF,再通过图片处理工具裁剪提取图表区域:
# 保存并释放Excel文件对象 $package.Save() $package.Dispose() $fileDir = Split-Path $filename -Parent # 调用LibreOffice无头模式将Excel转换为PDF & /Applications/LibreOffice.app/Contents/MacOS/soffice --headless --convert-to pdf --outdir $fileDir $filename # 后续可通过PowerShell可调用的图片处理库(如Magick.NET)从生成的PDF中裁剪对应图表区域,保存为PNG文件
该方案需要额外安装LibreOffice和图片处理依赖,仅推荐无法升级模块的场景使用。
内容的提问来源于stack exchange,提问作者Hutch
相关产品推荐
相关产品推荐

