zoukankan      html  css  js  c++  java
  • 关于C# 中使用open xml sdk 读取Excel数据笔记

    项目用到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         }
  • 相关阅读:
    硬盘安装Win 7系统Windows 7 系统硬盘安装教程(图解)
    修改phpMyAdmin导入SQL文件的大小限制
    金三银四面试季节之Java 核心面试技术点
    2015年校园招聘12家IT公司面试体验
    正则表达式小结
    【译文】NginScript – 为什么我们要实现自己的JS引擎?
    经典算法合集
    【高级JSE技术】线程池
    【高性能服务器】Tomcat剖析
    【高性能服务器】Nginx剖析
  • 原文地址:https://www.cnblogs.com/longshanshan/p/7156036.html
Copyright © 2011-2022 走看看