使用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

 

 

posted @ 2013-07-24 11:14  Blue Bird  阅读(12120)  评论(0编辑  收藏  举报