項目用到open xml SDK , 開始的時候一臉懵逼, 網上有很多的案例 也看好多的案例, 還是決定自己總結一下自己的做法 :
1、要在項目中用到open xml SDK 得先下載Open XML SDK 2.5 for Office
下載路徑:https://www.microsoft.com/en-us/download/details.aspx?id=30425
下載后文件:OpenXMLSDKV25.msi 安裝后就會出現 DocumentFormat.OpenXml.dll
可以在官網上看詳細的講解:https://msdn.microsoft.com/zh-cn/library/bb448854.aspx
2、使用open xml 獲取Excel數據
首先將DocumentFormat.OpenXml.dll 引用到項目下:
獲取Excel表指定的工作表:
/// <summary> /// 獲取Excel指定工作表數據 /// </summary> /// <param name="filePath">Excel所在路徑</param> /// <param name="sheetName">工作表名</param> /// <returns></returns> public static void GetExcelVlaue(string filePath,string sheetName) { //打開文件 SpreadsheetDocument document = SpreadsheetDocument.Open(filePath, false); WorkbookPart workbook = document.WorkbookPart; IEnumerable<Sheet> sheets = document.WorkbookPart.Workbook.Descendants<Sheet>().Where(s => s.Name == sheetName); if (sheets.Count() == 0) { return null; } WorksheetPart worksheetPart = (WorksheetPart)document.WorkbookPart.GetPartById(sheets.First().Id); Worksheet worksheet = worksheetPart.Worksheet;
IEnumerable<Row> rows = worksheet.Descendants<Row>(); foreach (Row row in rows)//獲取行的值 { foreach (Cell cell in row) { string columnValue = GetValue(cell, workbook.SharedStringTablePart); } } }
1 /// <summary> 2 /// 獲取單元格信息 這也是官方獲取值的方法 3 /// </summary> 4 /// <param name="cell"></param> 5 /// <param name="stringTablePart">stringTablePart就是WorkbookPart.SharedStringTablePart,它存儲了所有以SharedStringTable方式存儲數據的子元素。</param> 6 /// <returns></returns> 7 public static string GetValue(Cell cell, SharedStringTablePart stringTablePart) 8 { 9 if (cell.ChildElements.Count == 0) 10 return null; 11 //get cell value 12 String value = cell.CellValue.InnerText; 13 //Look up real value from shared string table 14 if ((cell.DataType != null) && (cell.DataType == CellValues.SharedString)) 15 value = stringTablePart.SharedStringTable 16 .ChildElements[Int32.Parse(value)] 17 .InnerText; 18 return value; 19 }
獲取值就是完了! 根據自己要的數據進行整合就好!
如果要獲取表格的樣式及字體及:
1 IEnumerable<DocumentFormat.OpenXml.Spreadsheet.CellFormat> cellStyles = style.Stylesheet.Descendants<DocumentFormat.OpenXml.Spreadsheet.CellFormat>();//獲取單元格樣式信息 2 IEnumerable<DocumentFormat.OpenXml.Spreadsheet.Font> font = style.Stylesheet.Descendants<DocumentFormat.OpenXml.Spreadsheet.Font>();//獲取字體信息
1 /// <summary> 2 /// 創建新的工作表 3 /// </summary> 4 /// <param name="filepath">Excel表路徑</param> 5 public static void CreateSpreadsheetWorkbook(string filepath) 6 { 7 // 提供文件路徑創建一個電子表格文件. 8 // By default, AutoSave = true, Editable = true, and Type = xlsx. 9 SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument. 10 Create(filepath, SpreadsheetDocumentType.Workbook); 11 12 // 添加一個workbookpart到文檔. 13 WorkbookPart workbookpart = spreadsheetDocument.AddWorkbookPart(); 14 workbookpart.Workbook = new Workbook(); 15 16 // Add a WorksheetPart to the WorkbookPart. 17 WorksheetPart worksheetPart = workbookpart.AddNewPart<WorksheetPart>(); 18 worksheetPart.Worksheet = new Worksheet(new SheetData()); 19 20 // Add Sheets to the Workbook. 21 Sheets sheets = spreadsheetDocument.WorkbookPart.Workbook. 22 AppendChild<Sheets>(new Sheets()); 23 24 // Append a new worksheet and associate it with the workbook. 25 Sheet sheet = new Sheet() 26 { 27 Id = spreadsheetDocument.WorkbookPart. 28 GetIdOfPart(worksheetPart), 29 SheetId = 1, 30 Name = "mySheet" 31 }; 32 sheets.Append(sheet); 33 34 workbookpart.Workbook.Save(); 35 36 // Close the document. 37 spreadsheetDocument.Close(); 38 }