使用NPOI从Excel文件读取图像

时间:2014-06-06 14:22:56

标签: c# image excel serialization npoi

我正在使用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],但异常仍然存在。

如何修复此序列化问题?还是有更好的方式来实现我的最终目标?

感谢任何帮助。谢谢!

1 个答案:

答案 0 :(得分:1)

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

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文件复制到另一个excel文件的更好或更简单的方法,请帮忙解答!