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:\Pictures\8F00FD3446EF4044867BB87ED8B80716.gif";
19             oximg2.X = 300;
20             oximg2.Y = 400;
21             openXmlExportImages.Add(oximg2);            
22             OpenXmlExportImages oximg3 = new OpenXmlExportImages();
23             oximg3.ImagePath = @"E:\Pictures\2000.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寫的

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

代碼:點擊下載


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM