如何将增强元文件图像插入工作表?

How to insert enhanced meta file image into worksheet?

我需要将增强元文件图像 (.emf) 插入到我的工作表中。图像必须在不丢失分辨率的情况下缩放,这就是我使用 emf 格式的原因。

我试过从内存流中插入图像并从文件中读取,但是在这个过程中的某个地方,emf 被转换为 jpg 并且不再缩放,因为 spreadhseet 是 viewed/printed 不同的大小。

请注意,当我使用 Interop.Excel 时,图像会作为 emf 文件插入并适当缩放。当我使用 EPPlus 时,我遇到了问题。我真的很想摆脱 Interop.Excel 的想法,这就是我使用 EPPlus 的原因。

// This works as expected, but I don't want to use the interop lib.
using Excel = Microsoft.Office.Interop.Excel;
myXlWorkBook.ActiveSheet.shapes.AddPicture(emfImageFileName, ....);

// This does not. The picture appears in the worksheet but does not scale.
using OfficeOpenXml;
using OfficeOpenXml.Drawing;
ExcelPicture pic = myXlWorkSheet.Drawings.AddPicture("Picture Name", new FileInfo(emfImageFileName)); 

// This doesn't work either.
Image img = Image.FromStream(myEmfImageStream);
ExcelPicture pic = myXlWorkSheet.Drawings.AddPicture("Picture Name", img);

我的预期结果应该是一个 Excel 工作表,其中包含我的图像,当 viewed/printed 具有各种尺寸时可以正确缩放。

确保给它尺寸,否则一切都将为零:

pic.From.Row = 0;
pic.From.Column = 0;
pic.To.Row = 30;
pic.To.Column = 23;

关于保存为JPG,听起来很奇怪,应该不会随意转换。您可以通过打开 7-zip 格式的 XLSX 文件或重命名为 .ZIP 并打开来确认它是否存在。您应该会看到存储在媒体文件夹中的文件。

此外,请注意 emf 文件名中的空格,因为我已经看到它会使 EPPlus 出错。

更新

对于可能遇到此问题的任何人,这是 Epplus 的错误。我已经提交了 PR

https://github.com/JanKallman/EPPlus/issues/496