StringGrid는 BeginUpdate/EndUpdate를 사용하는 방법외에는 더 이상 빠르게 갱신되지는 않으며,
처리속도가 느리고, 중간에 멈추는 현상은 엑셀파일을 OLE(COM)형태로 호출했기 때문에 그런 것입니다.
엑셀파일을 OLE형태로 호출하게 되면, 실제 엑셀 프로그램을 통해서 셀의 값들을 가져오기 때문에 셀 갯수가 많을 경우 당연히 속도 저하가 생길 수 밖에는 없습니다.
이런, 문제를 해결하기 위해서는 엑셀 파일을 직접(Direct) 읽을 수 있는 SDK를 사용해야 합니다. 물론 SDK 구매 비용이 발생 할 수 있습니다만, 엑셀이 설치되어 있지 않아도 엑셀 파일을 Reade/Write 할 수 있는 장점이 있습니다.
제가 찾아본 제품인데, 참고하시기 바랍니다.
http://www.libxl.com
( 가격이 $199정도 하네요)
혹시, 무료도 있을 수 있으므로 찾아보시기 바랍니다.
김태우 님이 쓰신 글 :
: for(int j = 1; j < row+1; j++)
: {
:
: for(int i = 1; i < col+1; i++)
: {
:
: StringGrid1->Cells[i][j] = XLSheet.OlePropertyGet("Cells", j , i).OlePropertyGet("Value");
: StringGrid1->Cells[0][j] = IntToStr(j);
: StringGrid1->Cells[i][0] = IntToStr(i);
: }
: }
:
: StringGrid1->Rows[0]->BeginUpdate();
: 이렇게 밖에 사용을 못하나요??
:
: 그러면 이렇게 엑셀에서 읽어온값을 그리드에 넣어줄때..
: 어떻게 사용해야되는건지...
: 초보입니다.. 부탁드리겠습니다.
: 검색을 해봐도.. 제가 적용하면 마찬가지로 프로그램이 용량이큰엑셀은 30초 정도는 멈춰 있네요..
|