2012-02-16 2 views
0

MS Excel 시트에는 하나의 행렬 데이터가 채워져 있습니다.데이터가있는 셀 범위 만 가져옵니다.

어떻게 숫자 영역 만 가져올 수 있습니까?

지금 데이터 범위는 workSheet.UsedRange입니다. 그러나 하나의 행렬을 삭제하면 행이 삭제 되었더라도 useRange에서 고려됩니다! 그것은 이전에 그 세포들을 사용했기 때문입니다.

그래서 은 실제 사물 (숫자)이있는 범위 만에 어떻게 얻을 수 있습니까?

코드 :

public Array ReadData(string fullPath, Size size) 
{ 
    Excel.Application application; 
    Workbook workBook; 
    Worksheet workSheet; 
    Range range; 

    application = new Excel.ApplicationClass(); 
    workBook = application.Workbooks.Open(fullPath, 0, true, 5, "", "", true, XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0); 
    workSheet = (Worksheet)workBook.Worksheets.get_Item(1); 

    //HERE IS THE PROBLEM 
    range = workSheet.UsedRange; 

    if (!size.IsEmpty) 
    { 
     Size availableSize = new Size(range.Columns.Count, range.Rows.Count); 
     if ((availableSize.Width < size.Width) || (availableSize.Height < size.Height)) 
     { 
      string msg = string.Format("Available data range ({0}) at the sheet is smaller than needed size ({1})", availableSize, size); 
      throw new ArgumentException(msg); 
     } 
     else if ((availableSize.Width > size.Width) || (availableSize.Height > size.Height)) 
     { 
      range = workSheet.get_Range(workSheet.Cells[1, 1], workSheet.Cells[size.Width, size.Height]); 
      string msg = string.Format("Available data range ({0}) at the sheet is bigger than needed size ({1})", availableSize, size); 
      Trace.TraceInformation(msg); 
     } 
    } 

    Array data; 

    data = (Array)range.Cells.Value2; 

    return data; 
} 

가능한 솔루션은 내가 생각하는 VB에서 포스트했다. C#에서이 될 것입니다 :

 range = workSheet.UsedRange; 
     range = range.CurrentRegion.SpecialCells(XlCellType.xlCellTypeConstants, XlSpecialCellsValue.xlNumbers); 

하지만이 excpetion을 제기

+0

명확하게하려면 :이'data = (Array) range.Cells.Value2; '의 결과는 무엇입니까? 삭제 된 행 (빈 문자열 또는 smth)도 포함됩니까? –

+0

셀을 편집하고 항목을 삭제하면 작업이 진행 중입니다. 더 이상 범위를 변경하지 않습니다. 어쩌면 2010 년을 능가 할 것입니다. – Pedro77

답변

1

정말 C#을 모른다 "어떤 세포를 찾을 수 없습니다"하지만, Excel에서, 당신은
Range("yourRange").SpecialCells(xlCellTypeConstants, xlNumbers), 또는
Range("yourRange").CurrentRegion.SpecialCells(xlCellTypeConstants, xlNumbers)

를 사용

http://msdn.microsoft.com/en-us/library/aa213567(v=office.11).aspx
또는 SpecialCells in VSTO

또는
How to get the range of occupied cells in excel sheet

+0

어떤 SpecialCells가 의미합니까? xlCellTypeConstants? 좀 더 자세히 설명해 주시겠습니까? – Pedro77

+0

편집을 참조하고 직접 검색해보세요. 나는 당신에게 황금의 대답을 주었고, 당신은 그 단어를 당신이 좋아하는 검색 엔진에 타이핑 할 수 없습니까? –

+0

좋아, 이제는 알아, 무례해야하지 않아. 어쨌든 고마워. – Pedro77

관련 문제