聲明:里面的很多東西是基於前人的基礎上實現的,具體是哪些人 俺忘了,我做了一些整合和加工
這個項目居於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; } }
導出的圖片位置就靠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數據
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 }
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 }
------------
完成,希望對大家有用,如有bug歡迎大家一起改正,至於里面的東西提問大伙就自己消化吧,demo為vs2012寫的
------------
代碼:點擊下載
