2017-03-01 93 views
1

我有一個數字,有指定爲可允許值的下拉列表數據驗證單元的工作簿中的Excel單元格資料驗證列表。使用EPPlus,我希望能夠獲得每個這樣的單元格的允許值列表。如何找到使用EPPlus

到目前爲止我有:

  • ExcelWorkSheet.DataValidations給我一個ExcelDataValidationCollection,這是IExcelDataValidation項目工作表的集合。

  • 每個IExcelDataValidation都有一個ExcelAddress類型的地址屬性,它可能會引用具有該驗證規則的所有單元格。

  • 我卡上的步驟是找到一個給定的細胞是包含在ExcelAddress

任何考生的一個細胞?

我目前使用EPPlus 3.1.1.0,但如果需要可以升級到最新版本。

UPDATE

我沒有解釋這顯然不夠。這是我更詳細的情況。

  • 假設C列有一些單元格帶有列表數據驗證。有些細胞允許說「A,B,C」;其它細胞允許 「d,E,F」 等的細胞爲每個數據驗證列表的範圍是不連續的,所以,例如:

    • C2,C4,C7-C10,C20可以允許「A, B,C」
    • C3,C5-C6" ,C15可以允許 「d,E,F」
  • 我試圖確定哪些細胞允許 「A,B,C」 和其允許「D,E,F」等。

  • ExcelWorksheet.DataValidations包含ExcelDataValidationList項目,其中一個值爲「A,B,C」,一個值爲「D,E,F」等

  • 列表「A,B,C」的ExcelDataValidationList.Address包含一個ExcelAddress,其Address屬性如下所示:「C4 C7:C10 C2 C20 ...」。

  • 我要確定給定的細胞(說C6)包含在這個地址指定的範圍「C4 C7:C10 C2 C20 ......」。

當然,我可以String.Split的空格,並解析每個項目在結果列表中。但我希望能有更直接的方式來做到這一點,例如

ExcelAddress.Contains("C6") 

ExcelAddress.Contains(6, 2) // row 6 col 2 = C6 

回答

0

快到了,只是檢查IExcelDataValidation的特定類型。使用EPPlus 4.1.0進行測試。0:

using (var package = new ExcelPackage(new FileInfo(path))) 
{ 
    var sheet = package.Workbook.Worksheets[1]; 
    var validations = sheet.DataValidations; 
    foreach (var validation in validations) 
    { 
     var list = validation as ExcelDataValidationList; 
     if (list != null) 
     { 
      var range = sheet.Cells[list.Formula.ExcelFormula]; 
      var rowStart = range.Start.Row; 
      var rowEnd = range.End.Row; 
      // allowed values probably only in one column.... 
      var colStart = range.Start.Column; 
      var colEnd = range.End.Column; 
      for (int row = rowStart; row <= rowEnd; ++row) 
      { 
       for (int col = colStart; col <= colEnd; col++) 
       { 
        Console.WriteLine(sheet.Cells[row, col].Value); 
       } 
      } 
     } 
    } 
} 

測試工作表:

enter image description here

輸出:

one 
two 
three 
+0

sheet.Cells [list.Formula.ExcelFormula]你確定這是工作? – kassi