zoukankan      html  css  js  c++  java
  • OpenXml Excel数据导入导出(含图片的导入导出)

    声明:里面的很多东西是基于前人的基础上实现的,具体是哪些人 俺忘了,我做了一些整合和加工

    这个项目居于openxml做Excel的导入导出,可以用OpenXml读取Excel中的图片 和OpenXml插入Excel 图片,相信这两个还是挺有用的

    OpenXmlHelper 类为对外抛出的类,包含封装的导入导出的数据操作方法和一些对象的属性

    一、导出Excel数据

    1.导出的数据为DataSet,可以允许多个DataTable

    1.需要设置RowIndex;RowIndex为数据起始行(也就是可以根据你的Excel模板声明第一行数据的起始行,导出几个工作簿就声明 int[] 对应的长度)

    2.OpenXmlExportImages 导出后的图片数据类型为Dictionary<string, List<OpenXmlExportImages>>,key为对应的工作簿名称

    OpenXmlExportImages类为图片导出数据存储类

        /// <summary>
        /// 导出
        /// </summary>
        public class OpenXmlExportImages
        {
            /// <summary>
            /// X坐标
            /// </summary>
            public long X { get; set; }
    
            /// <summary>
            /// Y坐标
            /// </summary>
            public long Y { get; set; }
            /// <summary>
            /// 宽度
            /// </summary>
            public long? Width { get; set; }
    
            /// <summary>
            /// 高度
            /// </summary>
            public long? Height { get; set; }
    
            /// <summary>
            /// 图片路径如c:eee.png
            /// </summary>
            public string ImagePath { get; set; }
        }
    OpenXmlExportImages

    导出的图片位置就靠x,y来设置了,图片路径要用绝对路径不用的话我就不知道会出啥事了

    3.导出的代码demo,

     1         protected void BtnExcelOut_Click(object sender, EventArgs e)
     2         {
     3             var fileTemplatePath = Server.MapPath("~/Template/TestTemplate.xlsx");
     4             var filePath = Server.MapPath(string.Format("~/TempFile/{0}.xlsx", Guid.NewGuid().ToString()));
     5             OpenXmlHelper ox = new OpenXmlHelper();
     6             ox.RowIndex = new int[] { 4 };
     7             System.Data.DataSet ds = new System.Data.DataSet();
     8             DataTable dt1 = GetData();
     9             ds.Tables.Add(dt1);
    10             ox.OpenXmlExportImages = new System.Collections.Generic.Dictionary<string, System.Collections.Generic.List<OpenXmlExportImages>>();
    11             System.Collections.Generic.List<OpenXmlExportImages> openXmlExportImages=new System.Collections.Generic.List<OpenXmlExportImages>();
    12             OpenXmlExportImages oximg1=new OpenXmlExportImages();
    13             oximg1.ImagePath = @"E:Pictures未命名-2.png";
    14             oximg1.X = 100;
    15             oximg1.Y = 100;
    16             openXmlExportImages.Add(oximg1);
    17             OpenXmlExportImages oximg2 = new OpenXmlExportImages();
    18             oximg2.ImagePath = @"E:Pictures8F00FD3446EF4044867BB87ED8B80716.gif";
    19             oximg2.X = 300;
    20             oximg2.Y = 400;
    21             openXmlExportImages.Add(oximg2);            
    22             OpenXmlExportImages oximg3 = new OpenXmlExportImages();
    23             oximg3.ImagePath = @"E:Pictures2000.jpg";
    24             oximg3.X = 400;
    25             oximg3.Y = 400;
    26             oximg3.Width = 400;
    27             oximg3.Height = 400;
    28             openXmlExportImages.Add(oximg3);
    29             ox.OpenXmlExportImages.Add("数据", openXmlExportImages);
    30             ox.ExcelExport(ds, filePath, fileTemplatePath);
    31             DownLoadExcelFile(filePath);
    32         }
    Excel导出

    二、导入Excel数据

    1.导入Excel之后数据格式为DataSet,允许为多个工作簿,DataTable的tablename为对应的工作簿名称

    2.OpenXmlImportImages 导入Excel后如果存在图片,存储在改类中

    OpenXmlImportImages 中的Image为二进制的图片流,至于要怎么存储大伙自己转换吧

    FromRow,FromCol是图片所在的行列 RefId做标识用的

     1     /// <summary>
     2     /// 导入
     3     /// </summary>
     4     public class OpenXmlImportImages
     5     {
     6         public string RefId { get; set; }
     7         /// <summary>
     8         /// 9         /// </summary>
    10         public int FromRow { get; set; }
    11         /// <summary>
    12         ///13         /// </summary>
    14         public int FromCol { get; set; }
    15         public byte[] Image { get; set; }
    16     }
    OpenXmlImportImages

    3.导入代码demo

     1         /// <summary>
     2         /// 导入Excel数据
     3         /// </summary>
     4         private void ImportingExcelData()
     5         {
     6             OpenXmlHelper ox = new OpenXmlHelper();
     7             string filePath = Server.MapPath("~/Template/data.xlsx");
     8             ox.RowIndex = new int[] { 4 };
     9             DataSet ds = ox.ExcelToDataSet(filePath);
    10             data = ds.Tables[0];
    11             OpenXmlImportImages = ox.OpenXmlImportImages["数据"];
    12         }
    Excel导入

    ------------

    完成,希望对大家有用,如有bug欢迎大家一起改正,至于里面的东西提问大伙就自己消化吧,demo为vs2012写的

    ------------

    代码:点击下载

  • 相关阅读:
    心情日记:疯人疯语
    疾病研究:转载口服药物恢复了杜氏进行性肌营养不良患者缺失的蛋白
    报告论文:游程(行程)长度编码matlab(或者C++)实现
    技巧心得:没有 显示隐藏的文件和文件夹 选项
    视频教程:YUV420和RGB相互转换C++实现(二)
    应聘经历:网易公司 笔试
    视频教程:YUV和RGB相互转换MATLAB实现(一)
    读书札记:7天搞定C语言(一)
    嵌入式系统Linux内核开发工程师必须掌握的三十道题
    交流:IT学习大本营:“2×10+10:积分+资源分”大派送
  • 原文地址:https://www.cnblogs.com/xushaonian/p/3372700.html
Copyright © 2011-2022 走看看