使用NPOI从Excel文件读取图像

我在使用C#编写Visual Studio 2010中的程序来读取一些Excel文件,并使用NPOI库。

最终目标是读取原始excel文件(xlsm)中的图像,将该图像复制并粘贴到新的excel文件(xlsx)中。 如果它可以粘贴到原来的位置,会更好。

我无法find直接复制和过去的方法,所以我的解决方法是读取图像,在本地保存图像的副本(如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(); } 

当我运行这个程序时,我收到一个exception,说“ Type 'NPOI.XXSF.UserModel.XSSFPictureData' in Assebly......is not marked as serializable ”。 我尝试在我的课之前添加[Serializable] ,但exception仍然存在。

我该如何解决这个可序列化的问题? 还是有更好的方法来实现我的最终目标?

任何帮助表示赞赏。 谢谢!

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

 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文件复制到另一个,请帮助和回答!