如何在不使用剪贴板的情况下在C#中保存Excel中的图像?

时间:2011-07-26 20:58:53

标签: c# image excel export

我已经对此进行了相当广泛的调查,但还没找到我想要的东西。我找到的两种方法是

1:使用Microsoft.Office.Interop.Excel,遍历工作簿的形状,然后将图像复制到剪贴板,然后获取剪贴板数据并将其放入位图,最后保存该位图。这种方法的问题是剪贴板。我们希望在多线程环境中使用它,并且担心线程之间的剪贴板问题。我们宁愿不处理剪贴板锁定。

2:将文件另存为.HTML文件,然后从保存文档的“_files”文件夹中获取图像。这个问题是为每个图像创建了两个图像(1个高分辨率,1个低分辨率),并且没有好的方法来确定哪些图像是低分辨率的,哪些图像是高分辨率的,因为它们都被命名图像###和一些文件列出高,低,高,低,而有些文件列出高,高,低,低。使用所有这些文件很慢并占用空间,这并不理想。我可以通过宽高比检查图像,但这显然不是很好,因为多个图像可以具有相同的宽高比。

有没有办法在不使用剪贴板的情况下直接将Excel.Shape解析为位图(或任何图像格式)?似乎必须有一种方法,因为Shape.CopyPicture方法能够以图像格式将其发送到剪贴板。 否则,有没有办法做一些类似于2号而不会重复的东西?我更喜欢避免使用第三方库的解决方案。

谢谢。

1 个答案:

答案 0 :(得分:34)

我假设您使用Excel 2007/2010格式。每个Excel 2007/2010文件都是一个zip文件!只需将文件Excel.xlsx重命名为Excel.zip即可。然后将文件解压缩到一个文件夹。图像位于'/ xl / media'文件夹中。

手动尝试。知道了这一点,通过为此编写C#程序可以很容易地实现自动化。