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

时间:2016-09-09 06:27:28

标签: c# .net asp.net-mvc excel npoi

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

经过一段时间的试用错误并浏览任何参考文献,我可以使用此代码从Excel中获取所有图像(我将代码设置为读取 xls 格式),

        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中的Shapes,所以我试图找到任何其他方法,最后我找到了一些代码,可以获得Excel中的图像和形状列表,< / p>

这里是代码片段(也是读取 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 )到图片。

我的问题是,如何将此Shape数据转换为Image,并将其保存到指定目录?我写的代码有问题吗?或者可能还有另一种解决方案(当然使用 NPOI )可以用来从 Excel(xls或xlsx)文件中获取Shapes?

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

EPPlus 下, 只支持Excel更高或平等2007( xlsx ),但我需要允许 xls ,如果我尝试转换上传的 xls,EPPlus会给我错误使用System.IO格式化为 xlsx (我将在另一个问题上发布此内容)。

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

0 个答案:

没有答案