如何从Excel(xls和xlsx)使用NPOI(C#)将graphics转换为图像

我正在写代码来使用C#NPOI (版本2.2.1 )库从Excel( .xls和xlsx )中获取包括形状的所有图像。 其目的是从选定的Excel文件中获取包括形状的所有图像,然后将其保存到指定的目录。

经过一段时间trial-error并浏览任何引用,我能够使用此代码(我把代码读取xls格式)从Excel中获取所有图像,

var lst = workbook.GetAllPictures(); for (int i = 0; i < lst.Count; i++) { var pic = (HSSFPictureData)lst[i]; byte[] data = pic.Data; /*Save Image From Byte[]*/ } 

但是,我不能使用该代码在Excel中的形状,所以我试图find任何其他方法,最后我发现了一些代码,可以得到列表中的图像和形状存在Excel工作表,

这里的代码片段(也是用于读取xls格式文件的代码),

 var dr = workbook.GetSheetAt(sht).DrawingPatriarch; HSSFPatriarch pat = (HSSFPatriarch)dr; var shape = pat.Children; int i = 0; foreach (var s in shape) { string patType = s.GetType().ToString(); switch (patType) { case "NPOI.HSSF.UserModel.HSSFSimpleShape": { var simpleshape = (HSSFSimpleShape)s; /*Save Shape*/ break; } case "NPOI.HSSF.UserModel.HSSFPicture": { var pic = (HSSFPicture)s; byte[] data = pic.PictureData.Data; /*Code to Save Image From Byte[]*/ break; } default: break; } } 

当我把断点放在foreach语句上时,它会显示我需要保存的图像和形状列表。

使用该代码,我能够获取和保存图像数据( HSSFPicture ),但我找不到任何方法或属性为图像转换或保存形状数据( HSSFSimpleShape )。

我的问题是,我怎样才能将这个形状数据转换成图像,并将其保存到指定的目录? 我写的代码有问题吗? 或者,也许有另一种解决scheme(当然使用NPOI ),我可以用来从Excel(xls或xlsx)文件中获取形状?

到目前为止,我一直在尝试其他几个库:

EPPlus ,只是与Excel更高或相等2007( xlsx )兼容,但我需要允许xls ,并且EPPlus给我错误,如果我尝试使用System.IO将上载的xls格式转换为xlsx (我将发布在另一个问题为了这)。

Excel.Interrop ,它可以检索我想要的形状和图像,但它需要在服务器机器上安装Microsoft Office,不知何故它现在不是一个选项。