2016-08-19 4 views
4

Эта проблема полностью меня озадачила.Cell from ExcelRange

У меня есть документ Excel, который загружается в порядке. У него есть строки, столбцы и данные, и я хочу перебирать строки. Но EPPLus нечетный.

Я беру вторую строку:

ExcelRange range1 = worksheet.Cells[2, worksheet.Dimension.Start.Column, 2, worksheet.Dimension.End.Column]; 

Что дает мне {A2:D2} Splendid! до сих пор так хорошо, но я хочу первую ячейку строки:

ExcelRange range2 = range1[1,1]; 

, которые дают мне {A1} и сделать дело хуже, значение range1 также изменено {A1} вместо строки я выбрал.

Как решить эту проблему и взять ExcelRange из ExcelRange?

Это меня полностью озадачен .... спасибо за anyhelp

+0

Почему вы пытаетесь получить диапазоны от других диапазонов в первую очередь? – mason

+0

Документ содержит структуру данных с строками данных. Каждая строка должна быть проверена. Там я беру строку и пересылаю ее методу проверки строки –

ответ

0

Если вы посмотрите на код позади ExcelRange Indexer вы увидите, что get будет на самом деле установить базовый адрес (вложенная else):

public ExcelRange this[string Address] 
{ 
    get 
    { 
     if (_worksheet.Names.ContainsKey(Address)) 
     { 
      if (_worksheet.Names[Address].IsName) 
      { 
       return null; 
      } 
      else 
      { 
       base.Address = _worksheet.Names[Address].Address; 
      } 
     } 
     else 
     { 
      base.Address = Address; 
     } 
     _rtc = null; 
     return this; 
    } 
} 

Почему они сделали это таким образом, я не уверен (я предполагаю, что там его детали реализации). Но это объясняет, почему ссылка на другой адрес изменяет выбранный диапазон. Так, как сказал Бенекс, нужно сделать прямую ссылку из коллекции CellsWorksheet.

+0

Я буду работать с индексами, как это предусмотрено EPPlus –

2

я имел такую ​​же проблему, чтобы получить правильную стартовую ячейку:

var range2 = worksheet.Cells[range1.Start.Row, range1.Start.Column]; 

И то же самое для правой нижней ячейки:

var range3 = worksheet.Cells[range1.End.Row, range1.End.Column]; 
+0

Но я, например, хочу взять первую ячейку из диапазона2 –

+0

Я думаю, вы также можете использовать var range2 = range1 [range1.Start.Row, range1.Start .Column]; – Benexx