我正在使用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]
,但异常仍然存在。
如何修复此序列化问题?还是有更好的方式来实现我的最终目标?
感谢任何帮助。谢谢!
答案 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文件的更好或更简单的方法,请帮忙解答!