【问题标题】:How do I save images from Excel without using Clipboard, in C#?如何在 C# 中不使用剪贴板从 Excel 中保存图像?
【发布时间】:2015-05-22 16:08:04
【问题描述】:

我对此进行了相当广泛的研究,但还没有找到我正在寻找的东西。我发现的两种方法是

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

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

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

谢谢。

【问题讨论】:

    标签: c# image excel export


    【解决方案1】:

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

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

    【讨论】:

    • 感谢您的快速回复!不幸的是,我的任务是涵盖较旧的文件类型。我很可能会专门添加对 .xlsx 的检查并使用这些方法,因为它会删除大量的图像重复。另一个小问题是这种方法将图表保存为xml而不是图像(与方法2相反),不太理想。
    • 我现在将采用这条路线,在继续之前将旧格式转换为 xlsx。再次感谢
    • 2018 年仍在使用当前的 Excel 文件!太棒了!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-02-21
    • 1970-01-01
    • 1970-01-01
    • 2021-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多