첫 번째 열에 만 데이터가있는 Excel (.xlsx) 파일이 있습니다. 내 목표는 데이터가 포함 된 마지막 행을 찾는 것입니다. 지금 당장, 각 셀을 하나씩 (첫 번째 행부터) 확인하여 null인지 확인합니다. 그러나 Excel 조회는 상당히 비쌉니다. ~ 10,000 데이터 포인트가있을 때 마지막 행을 찾는 데 10 초 이상 걸립니다.마지막 Null이 아닌 셀을 찾기 위해 Excel 범위에서 이진 검색을 수행하려면 어떻게해야합니까?
선형 검색 대신 균형 이진 검색을하고 싶습니다. 100,000 개가 넘는 행은 절대 없을 것이라고 가정하고, 최대 15 개의 행을 가정하는 작은 예제를 살펴 보겠습니다.
마지막 행이 검색 경로는 다음과 같이 보일 것이다 그런 11.한다고 가정 해 봅시다 :
Row 8 = filled, next search = 12
Row 12 = null, next search = 10
Row 10 = filled, next search = 11
Row 11 = child node, last data row found.
이 필요 엑셀 읽기 4 (3가 노드 값이기 때문에 당신이 (11)을 포함하지 않는 경우) 대 검색이 선형 인 경우 11.
다음은이 Excel에서 어느 쪽이든을 읽고 4 필요 4.
Row 8 = null, next search = 4
Row 4 = filled, next search = 6
Row 6 = null, next search = 5
Row 5 = null & child node, last data row must be 4.
에 대한 같은 일입니다. 그러나 최대 행 수가 100,000 인 더 큰 규모에서 이진 검색의 평균 실행 시간은 훨씬 더 깁니다.
누군가가 C#에서 이러한 종류의 검색을 구현하는 데 도움을 줄 수 있습니까?
이 질문이 Trying to find the last non-empty cell in a specific row/range over multiple sheets인데 Excel 수식을 사용하지 않고 C#에서이 알고리즘을 알아내는 데 관심이 있습니다. 마지막 가능한 행을 알고 있다면
string value = myWorksheet.Cells[3, 4].Text; // row 3, column 4
@dasblinkenlight 엑셀 Interop를. 라이브러리에 익숙하지 않은 사람들을위한 샘플을 추가하고 Interop 태그를 추가했습니다. – arbitrarystringofletters
UsedRange가 작동하지 않습니까? – JohnG
아니요, 셀 값이 삭제되지 않는다고 보장 할 수는 없습니다. "사용 된 범위에는 사용 된 모든 셀이 포함됩니다. 예를 들어, 셀 A1에 값이 포함 된 다음 값을 삭제하면 셀 A1 이 경우 UsedRange 속성은 셀 A1을 포함하는 범위를 반환합니다. " [- Microsoft 문서] (https://msdn.microsoft.com/en-us/library/microsoft.office.tools.excel.worksheet.usedrange.aspx) – arbitrarystringofletters