使用NPOI从Excel文件中读取图像

本文关键字:读取 图像 文件 Excel NPOI 使用 | 更新日期: 2023-09-27 18:07:00

我正在用c#在Visual Studio 2010中编写一个程序来读取一些excel文件,我正在使用NPOI库。

最终目标是读取原始excel文件(xlsm)中的图像,将该图像复制并粘贴到新的excel文件(xlsx)中。如果能粘贴到与原文相同的位置,那就更好了。

我无法找到直接复制和过去的方法,所以我的解决方法是读取图像,在本地保存图像的副本(作为jpeg或其他格式),然后将图像插入到新的excel文件中。

下面是我用来读取图像和保存副本的代码。

var lst = originalWorkbook.GetAllPictures();
for (int i = 0; i < lst.Count; i++)
{
    var pic = lst[i];
    Stream s = File.Open(String.Format("{0}.jpeg", n), FileMode.Create);
    BinaryFormatter bf = new BinaryFormatter ();
    bf.Serialize(s, pic);
    s.Close();
}

当我运行程序时,我得到一个异常说"Type 'NPOI.XXSF.UserModel.XSSFPictureData' in Assebly......is not marked as serializable"。我试着在上课前添加[Serializable],但异常仍然存在。

如何解决这个序列化问题?或者有更好的方法让我实现我的终极目标?

任何帮助都是感激的。谢谢!

使用NPOI从Excel文件中读取图像

好了,我想出了一种本地保存图像的方法。

var lst = originalWorkbook.GetAllPictures();
for (int i = 0; i < lst.Count; i++)
{
    var pic = (XSSFPictureData) lst[i];
    byte[] data = pic.Data;
    BinaryWriter writer = new BinaryWriter(File.OpenWrite(String.Format("{0}.jpeg", i)));
    writer.Write(data);
    writer.Flush();
    writer.Close();
}

使用上面的代码,我能够成功地将所有图像在本地保存为jpeg文件。

然而,如果有人知道一个更好或更简单的方法将图像从一个excel文件复制到另一个,请帮助和回答!