2009-03-05 4 views
2

C++ 비 관리 및 Excel 2007에서 작업하고 있습니다. Excel4 API에 대한 호출을 사용하여 사용자가 선택한 셀 범위를 가져옵니다.Excel 2007에서 마지막 활성 셀을 얻는 방법

사용자가 "공통"범위라고 부르는 것을 선택하면이 호출은 "R1C1 : R4C3"과 같은 범위를 반환합니다. 이는 내 응용 프로그램에서 다른 작업을 수행하는 데 필요한 형식과 정확하게 일치합니다.

그러나 사용자가 전체 열을 선택하기로 결정하면이 API 호출은 "C1 : C3"와 같은 열만있는 범위를 반환하지만 이는 물론 유효한 Excel 범위이지만 나에게 위의 범위처럼 보이도록 수정해야합니다. 다시 말하면 수동으로 행 범위를 추가해야합니다.

그래서이 범위 "C1C3"을 "R1C1 : R65534C3"으로 변경합니다.

아마도이 시점에서 이미 내 문제를 알았습니다. Excel 2003에서 지원하는 행의 최대 개수를 코딩하는 것이 어렵다는 것을 알 수 있습니다 (응용 프로그램도 Excel의이 버전에서 작동 함).

내가 선택한 범위를 얻은 후에는 해당 범위의 정보를 읽고 해당 정보를 사용하여 서버에 쿼리를 작성하므로 사용자가 입력 한 것만을 상상해보십시오. 행 534까지의 데이터와 여전히 내 쿼리에는 아무것도없는 65000 개의 행이 있습니다.

제 질문은 사용자가 데이터를 입력 한 마지막 셀을 어떻게 얻을 수 있는지, 마지막 활성 셀이라고 생각합니다. 그래서 그 행까지 범위를 제한 할 수 있으며 함께 작업한다는 것을 기억하십시오. 비 관리 코드.

+0

가 정의 마지막으로 사용 된 행을 가져 오기 "데이터를 입력". 셀에 내용물이 있어야합니까? null 출력 ("")을 생성하는 공식은 무엇입니까? 보이는 셀 서식은 어떻게됩니까? 보이지 않는 셀 서식 (빈 셀에 굵게 표시)은 어떻게됩니까? 적용되는 조건부 서식은 어떻습니까? 그것은 적용되지 않습니다? – Sparr

답변

3

Excel 4 API? 정말?

주어진 셀에서 임의의 방향으로 텍스트가 입력 된 마지막 셀로 건너 뛰기 위해 사용할 수있는 xlcSelectEnd 명령이 있습니다.

1

range.selection을 Range 개체로 캐스팅 해보십시오.

0

지역은

 Excel.ApplicationClass app = new Excel.ApplicationClass(); 
     Excel.Workbook workBook = app.Workbooks.Open(_PathFile, 
       System.Reflection.Missing.Value, 
       System.Reflection.Missing.Value, 
       System.Reflection.Missing.Value, 
       System.Reflection.Missing.Value, 
       System.Reflection.Missing.Value, 
       System.Reflection.Missing.Value, 
       System.Reflection.Missing.Value, 
       System.Reflection.Missing.Value, 
       System.Reflection.Missing.Value, 
       System.Reflection.Missing.Value, 
       System.Reflection.Missing.Value, 
       System.Reflection.Missing.Value, 
       System.Reflection.Missing.Value, 
       System.Reflection.Missing.Value); 
     // Get the active worksheet using sheet name or active sheet 
     Excel.Worksheet workSheet = (Excel.Worksheet)workBook.ActiveSheet; 
     // Find the last real row 
     int _InLastRow = workSheet.Cells.Find("*",System.Reflection.Missing.Value, 
      System.Reflection.Missing.Value, System.Reflection.Missing.Value, Excel.XlSearchOrder.xlByRows,Excel.XlSearchDirection.xlPrevious, false,System.Reflection.Missing.Value,System.Reflection.Missing.Value).Row; 
#endregion