2010-05-08 1 views
3

C#을 사용하여 Excel 2003 용 Com 추가 기능을 작성하기 시작했습니다. 활성 워크 시트에서 셀 데이터를 읽는 방법을 보여주는 코드 예제를 찾고 있습니다. 다음과 같은 코드를 작성할 수 있습니다.더 이상 데이터가 없을 때까지 엑셀 추가 기능을 워크 시트의 행에서 읽는 방법?

Excel.Range firstCell = ws.get_Range("A1", Type.Missing); 
Excel.Range lastCell = ws.get_Range("A10", Type.Missing); 
Excel.Range worksheetCells = ws.get_Range(firstCell, lastCell); 

내가 도움이 될 수있는 것은 얼마나 많은 행의 데이터가 있는지 모를 때 셀 데이터를 읽는 방법이다. 데이터가 시작될 시작 행을 결정할 수 있지만 읽지 않은 행의 데이터 행이있을 수 있습니다.

빈 셀의 행을 찾을 때까지 누군가 워크 시트의 행을 읽는 방법의 예와 함께 제공 할 수 있습니까?

또한 사용자가 선택한 셀 범위를 파악하는 방법을 알고 있습니까?

도움을 주시면 감사하겠습니다. 이것은 강력한 dev 도구처럼 보이지만, 나는 그것을 배우는 데 도움이되는 상세한 문서를 찾는데 어려움을 겪고있다. :)

답변

3

나는 두 가지 접근법을 생각할 수있다. 첫 번째 옵션은 셀의 위치가 아닌 명명 된 범위를 사용하는 것입니다. 이 경우 인스턴스 이름을 A1에 대한 수 : A10 "myList에"및

Excel.Range range = worksheet.get_Range("MyList", Type.Missing); 
object[,] data = (object[,])range.Value2; 

이점을 사용하여 배열에 내용을 읽을 수 있습니다 당신은 당신의 워크 시트에 행 또는 열을 삽입하여 (명명 된 범위의 크기를 조정하는 경우 예를 들어) 이것은 여전히 ​​잘 작동합니다.
널 또는 빈 셀이 발생할 때까지 읽을 수도 있지만 셀 단위로 읽어야합니다. 세포가 거의 없다면 문제가되지 않지만 더 많은 양의 데이터 (예 : 100 세포)를 다루는 경우 셀 단위로 세포를 읽는 것이 속도면에서 비용이들 것입니다.

 int startRow = 1; 
    bool hasContent = false; 

    int row = startRow; 
    do 
    { 
     var cell = (Excel.Range)sheet.Cells[row,1]; 
     if (cell.Value2 != null) 
     { 
      hasContent = true; 
      row++; 
     } 
    } 
    while (hasContent); 
+0

명명 된 범위는 흥미로운 소리. 당신의 예제에서 명명 된 범위를 검색하는 방법을 볼 수 있습니다. 그러나 당신은 어떻게 그것을 창조합니까? – user169867

+0

시트에서 이름을 지정할 범위를 선택하고 셀 위 왼쪽 위 모서리에 수식을 입력하는 곳의 왼쪽에 드롭 다운이 있습니다. 범위의 이름을 입력하기 만하면됩니다. 아름다움은 나중에 시트에서 사용할 수 있다는 것입니다. 예를 들어 A1 "Taxes"라는 이름을 입력하면 A2 = Taxes에 입력 할 수 있습니다. 그러면 책을 읽을 수 있습니다. 그리고 수식을 훨씬 쉽게 읽을 수 있습니다! – Mathias

+0

do 시작시 doContent를 false로 설정하면 안됩니까? 지금 무한 루프처럼 보입니다. –

0

사용이 코드는 마지막 행을 찾아 첫 번째 열에한다 : 빈 행이 발견 될 때까지 나는 startRow에서 시작에 가서 작업을해야 이러한 라인을 따라 코드하지만 무언가를 시도하지 않은 그것은 "끝"을 wrtie 것이다.

var lastExcel = worksheet.Rows.get_End(XlDirection.xlDown); lastExcel.Cells[worksheet.Rows.get_End(XlDirection.xlUp).Row + 1, 1].Value2 = "End";

관련 문제