使用Open xml 操作Excel系列之一-讀取Excel


一、 安裝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

 

 


免責聲明!

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



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