使用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]
,但异常仍然存在。
如何解决这个序列化问题?或者有更好的方法让我实现我的终极目标?
任何帮助都是感激的。谢谢!
好了,我想出了一种本地保存图像的方法。
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文件复制到另一个,请帮助和回答!