一、 安裝Open Xml SDK
從微軟網站下載Open xml SDK, 安裝SDK.
二、 在項目中添加對DocumentFormat.OpenXml庫的引用
三、 編程讀取Excel 數據
使用Open Xml 讀取Excel的過程中,會遇到許多的Excel概念, 作為一個開發人員,最好能掌握分析這種結構的方法, 實際項目中我利用兩種方式分析excel文檔的結構, 一種是直接使用winrar 打開.xlsx 文件,查看里面的文件組織及文件內容;另一種更為有用的方法是使用Open XML SDK 2.0 Productivity Tool for Microsoft Office 打開.xlsx文件,查看Dom模型。 不止如此,你還可以通過Reflect Code 反射代碼了解一個Excel文件所有元素的Open xml生成方式。
如下步驟為讀取過程:
1. 使用SpreadsheetDocument document = SpreadsheetDocument.Open(fileName, false)對象打開文件,第一個參數為文件路徑,第二個參數指定讀取類型是否可編輯。
2. 第二步讀取WorkBookPart對應上圖中的Workbook部分
WorkbookPart wbPart = document.WorkbookPart;
3.接下來可以讀取WorkbookPart中的Sheet, 以及里面的數據, 在讀取過程中你還可以使用Linq來查詢Dom節點。 以下代碼用於讀取下面Excel截圖中的Version(A2)值Item_2.72
public class ExcelHelper { public static string GetCellValue(WorkbookPart wbPart, Cell theCell) { string value = theCell.InnerText; if (theCell.DataType != null) { switch (theCell.DataType.Value) { case CellValues.SharedString: var stringTable = wbPart. GetPartsOfType<SharedStringTablePart>().FirstOrDefault(); if (stringTable != null) { value = stringTable.SharedStringTable. ElementAt(int.Parse(value)).InnerText; } break; case CellValues.Boolean: switch (value) { case "0": value = "FALSE"; break; default: value = "TRUE"; break; } break; } } return value; } }
using (SpreadsheetDocument document = SpreadsheetDocument.Open(fileName, false)) { string version = string.Empty; WorkbookPart wbPart = document.WorkbookPart; List<Sheet> sheets = wbPart.Workbook.Descendants<Sheet>().ToList(); var versionSheet = wbPart.Workbook.Descendants<Sheet>().FirstOrDefault(c => c.Name == "Version"); WorksheetPart worksheetPart = (WorksheetPart)wbPart.GetPartById(versionSheet.Id); if (versionSheet == null) throw new Exceptions.ValidationException("There must be Version sheet !"); Cell theCell = worksheetPart.Worksheet.Descendants<Cell>().Where(c => c.CellReference.Value == "A2").FirstOrDefault(); string type = string.Empty; if (theCell != null) { version = ExcelHelper.GetCellValue(wbPart, theCell); } else { throw new Exceptions.ValidationException("Uploading file does not have version number!"); } }
下一篇,我將使用Open Xml導出數據到Excel