利用NPOI往Excel表格插入视频

我想要用C#利用NPOI往Excel插入视频文件,研究了半年(天资愚钝的我),终于一晚搞定了,不过有些问题还没解决。我直接上代码吧。

可以看到封面图,里面就是视频文件了
在这里插入图片描述
双击打开,能弹出对话框
在这里插入图片描述
能正常打开了
在这里插入图片描述
注意:如果视频有点大,可能第一次打开视频关闭后会卡顿(原因未知,如果有大佬知道希望能解释下),然后封面丢失(这个对我来说无所谓),图标会缩小。
在这里插入图片描述
拉大图标后可以看到样子了

//引用自行百度
 class Program
    {
        static void Main(string[] args)
        {
        //视频路径
            string VideoPath = @"C:\Users\Lenovo\Desktop\测试\111.mp4";
            //图片路径(封面)
            string picturePath = @"C:\Users\Lenovo\Desktop\测试\background_car.jpg";
            //文件名称
            string fileName = "111.mp4";
            //将视频文件和图片文件转化为字节数组
            byte[] videoByte = ToByte(VideoPath);
            byte[] pictureByte = ToByte(picturePath);
            
            //创建工作薄对象
            HSSFWorkbook workbook = new HSSFWorkbook();
            //创建sheet
            ISheet sheet = workbook.CreateSheet("测试");
            //获取第一个sheet的对象
            HSSFSheet sheet01 = (HSSFSheet)workbook.GetSheet(workbook.GetSheetName(0));
            //创建行,单元格
            IRow row = sheet.CreateRow(50);
            ICell cell = row.CreateCell(50);
            //给表格添加ole对象(视频)
            //AddOlePackage这个API里面的参数没具体介绍,我自己简单介绍下
            //第一个参数,byte[]:有效载荷,就是文件转化为字节数组后的数组
            //第二个参数,string label:标签 ,字符串,这个感觉没啥影响,我瞎填写的。但不能为null
            //第三个参数,string path:视频路径
            //第四个参数,string command:有效载荷的名,就是打开视频后显示的文件名
            int video_count = workbook.AddOlePackage(videoByte, "mp4", VideoPath,fileName);
            //给表格添加图片对象,第二个参数是图片格式,返回的int是在表格里第几个图片,第一个图片为1
            int picture_count = workbook.AddPicture(pictureByte, PictureType.JPEG);
            //Console.WriteLine(picture_count);//输出1
           // Console.WriteLine(video_count);//输出1
           //将ole对象在画布中显示出来。
           //原因:上面的几行代码只是将文件流放入在EXCEL中,却完全不显示在哪。
           //文件大小的确变大了,却看不到视频在哪,所以需要画布显示出来
            AddOLE(video_count, sheet01,picture_count);
            Console.WriteLine("视频添加成功");
            Console.ReadKey();
            //保存excel路径
            string SavePath = @"C:\Users\Lenovo\Desktop\测试\汇总文件.xlsx";
            //保存文件
            FileStream fs = new FileStream(SavePath, FileMode.Create);
            //将内存中的内容写入文件中。
            workbook.Write(fs);


        }
        /// <summary>
        /// 将文件转化为二进制流
        /// </summary>
        /// <param name="VideoPath"></param>
        /// <returns></returns>
        public static  byte[] ToByte(string VideoPath)
        {
        //创建filestream对象,路径,打开方式,只读
            FileStream fs = new FileStream(VideoPath, FileMode.Open, FileAccess.Read);
            try
            {
                 //数组长度为文件流的长度
                byte[] by = new byte[fs.Length];
                //写入到字节数组中
                fs.Read(by, 0, (int)fs.Length);
                return by;
            }
            catch (Exception ex)
            {
                return null;
            }
            finally
            {
                if (fs != null)
                { fs.Close(); }
            }
        }

//画布详细讲解:https://blog.csdn.net/u013986317/article/details/102502794

        /// <summary>
        /// 创建画布并正式插入ole对象
        /// </summary>
        /// <param name="count">表格中ole对象的序号,就是第几个视频</param>
        /// <param name="sheet">要插入对象的所在sheet</param>
        /// <param name="index">表格中图片(封面)的序号</param>
        public static void  AddOLE(int count,HSSFSheet sheet,int index)
        {
            //创建画布
            HSSFPatriarch canvas = (HSSFPatriarch)sheet.CreateDrawingPatriarch();
            //设置图片坐标与大小
            HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0, 0, 0, 4, 4, 8, 8);
            //正式插入图片
            //HSSFPicture pict = (HSSFPicture)canvas.CreatePicture(anchor, count);
            HSSFObjectData video = (HSSFObjectData)canvas.CreateObjectData(anchor, count,1);
            
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值