zoukankan      html  css  js  c++  java
  • OpenXML读取Excel数据以及处理Excel大文件

    读取一个单元格的值,这个是官方的写法

    public string GetCellValue(string fileName, string sheetName, string addressName)
            {
                string value = null;
                try
                {
                    using (SpreadsheetDocument document = SpreadsheetDocument.Open(fileName, false))
                    {
                        WorkbookPart wbPart = document.WorkbookPart;
    
                        Sheet theSheet = wbPart.Workbook.Descendants<Sheet>().Where(s => s.Name == sheetName).FirstOrDefault();
    
                        if (theSheet == null)
                        {
                            throw new ArgumentException("sheetName" + sheetName);
                        }
    
                        WorksheetPart wsPart =
                            (WorksheetPart)(wbPart.GetPartById(theSheet.Id));
    
                        DocumentFormat.OpenXml.Spreadsheet.Cell theCell = wsPart.Worksheet.Descendants<DocumentFormat.OpenXml.Spreadsheet.Cell>().
                          Where(c => c.CellReference == addressName).FirstOrDefault();
    
                        if (theCell != null && theCell.InnerText.Length > 0)
                        {
                            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;
                                        }
                                        else
                                        {
                                            value = null;
                                        }
                                        break;
    
                                    case CellValues.Boolean:
                                        switch (value)
                                        {
                                            case "0":
                                                value = "FALSE";
                                                break;
                                            default:
                                                value = "TRUE";
                                                break;
                                        }
                                        break;
                                }
                            }
                        }
                        else
                        {
                            value = null;
                        }
                    }
                }
                catch (Exception ex)
                {
                    value = null;
                    AppGloab.SysLogger.Error(ex);
                }
    
                return value;
            }

    读取Excel大文件,这是根据官方读取大文件的方法改写的,可以读取到指定worksheet的值

    public virtual void ReadExcelFileDOM(string fileName, string worksheet = "")
            {
                try
                {
                    using (SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Open(fileName, false))
                    {
                        WorkbookPart workbookPart = spreadsheetDocument.WorkbookPart;
                        WorksheetPart worksheetPart = workbookPart.WorksheetParts.First();
    
                        SheetData sheetData = new SheetData();
                        Sheet theSheet = workbookPart.Workbook.Descendants<Sheet>().Where(s => s.Name == worksheet).FirstOrDefault();
                        if (theSheet != null)
                        {
                            sheetData = ((WorksheetPart)workbookPart.GetPartById(theSheet.Id)).Worksheet.GetFirstChild<SheetData>();
                        }
                        int irow = 0;
                        foreach (DocumentFormat.OpenXml.Spreadsheet.Row r in sheetData.Elements<DocumentFormat.OpenXml.Spreadsheet.Row>())
                        {
                            irow = irow + 1;
                            AppGloab.SysLogger.Info("Worksheet Row:" + irow);
                            int icoloum = 0;
                            foreach (DocumentFormat.OpenXml.Spreadsheet.Cell c in r.Elements<DocumentFormat.OpenXml.Spreadsheet.Cell>())
                            {
                                icoloum = icoloum + 1;
                                AppGloab.SysLogger.Info("Worksheet  Row:" + irow + ", Column:" + icoloum);
                                string value = null;
                                if (c.InnerText.Length > 0)
                                {
                                    value = c.InnerText;
                                    if (c.DataType != null)
                                    {
                                        switch (c.DataType.Value)
                                        {
                                            case CellValues.SharedString:
                                                var stringTable =
                                                    workbookPart.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;
                                        }
                          Console.WriteLine(value); } } } } } }
    catch (Exception ex) { AppGloab.SysLogger.Error(ex); } }
  • 相关阅读:
    tuple 元组及字典dict
    day 49 css属性补充浮动 属性定位 抽屉作业
    day48 选择器(基本、层级 、属性) css属性
    day47 列表 表单 css初识
    day 46 http和html
    day 45索引
    day 44 练习题讲解 多表查询
    day 40 多表查询 子查询
    day39 表之间的关联关系、 补充 表操作总结 where 、group by、
    day38 数据类型 约束条件
  • 原文地址:https://www.cnblogs.com/yinxuejunfeng/p/14285678.html
Copyright © 2011-2022 走看看