關於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         }

 


免責聲明!

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



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