2017-10-24 6 views
-1

나는 다음의 코드 실행하면 :추가 행

IXLRange dataRange = worksheet.Range(1, 1, myData.Count, 4); 
foreach (var row in dataRange.Rows()) { 
    //int cells = row.CellCount(); 
    if (isEndOfGroup) { 
     row.InsertRowsBelow(1); 
     var rowBelow = row.RowBelow(); 
     // Do stuff with the added row, like adding a subtotal 
    } 
} 

실제로 여기에 무슨 일이? 주석 처리 된 행은 "범위가 유효하지 않습니다"라는 오류와 함께 다음 반복에서 예외를 throw하기 때문에 행 반복이 반복되고있는 것처럼 보입니다. 행이 어떻게 든 ' 아직 초기화되지 않았습니다.

반복을 통해 컬렉션을 수정하는 것이 좋지 않지만 이전에 아무런 문제없이이 작업을 수행했습니다.

어떻게 이것을 달성 할 수 있습니까?

답변

-1
내가 행 번호를 추적 유지하는 초 카운터를 Bagerfahrer 제안으로 for 루프를 사용하고 가지고 결국

: 데이터를 검색 myData

int rowNum = 1; // Row numbering starts at 1 
for (int i = 0; i < myData.Count; i++) { 
    var row = worksheet.Row(rowNum); 
    if (isEndOfGroup) { 
     row.InsertRowsBelow(1); 
     rowNum++; 
     var rowBelow = row.RowBelow(); 
     // Do stuff with the added row, like adding a subtotal 
    } 
    rowNum++; 
} 

이 인덱스에 저를 허용하고도 추적 스프레드 시트에 쓰고 있습니다.

0

반복하면서 컬렉션을 수정하지 마십시오 ... 입찰가입니다. for 루프를 활용하십시오. 이전에는 예외를 발생시키지 않았지만 행의 내용 만 변경했으나 행 자체의 참조는 변경하지 않았습니다.

+0

* "for 루프 활용 *"* 무엇을 의미합니까? –

+0

for 루프는 iterating하는 동안 변경할 수없는 IEnumerable 을 사용하지 않습니다 (foreach 루프는'Rows(). GetEnumerator()'에 의해 열거자를 가져옵니다. 대신에 for 루프는 당신의 참조를 입력하여 사용할 수 있습니다. 색인에 의해 당신의 목록에있는 행. – Bagerfahrer