엑셀파일 직접 액세스하는게 당연히 빠르지만 그방법은 안쓰는거로 하구여~
OLE이용해서 구현하더라도~ 기준이 되는 파일이 있어야 객관적으로 벤치결과를~
확신할 수 있잖아여~~
님이 테스트에 사용한 엑셀파일 첨부해서 올리면~~
진짜 실력있는 고수분이 해결책을 알려주시겠져~
다른 분들도 말로만 이러쿵 저러쿵 할게 아니구~~
자기가 작성한 게 ~~ 원본 보다 이만큼 빠르다는걸~~
실지로 파일첨부로 올려서~ 입증하는 거로 하구여~
이 방법이 낫지 않나여~~~ ㅋㅋ
김태우 님이 쓰신 글 :
: 답변 감사합니다..
: 하지만.. 지금 님같은 경우는 숫자로만 하셨지만...
: 제가 읽어 들일 파일들은 문자도 있고 숫자도 있고 빈칸도 있는 경우 입니다..
: 마찬가지로..말씀해주신결로 적용을 해보았으나..
: 마찬가지로 시간이 오래 걸리네요..30초 이상으로요..ㅜㅜ
:
:
:
:
: 이길남.HoPe 님이 쓰신 글 :
: : 제가 아래와 같이 테스트 해봤습니다.
: : 참조 하세요.
: :
: : Row, Col 수량을 4000씩 잡았습니다.
: : 하기와 같이 하면 약 6~7초 정도 걸렸습니다.
: :
: : int row = StringGrid1->RowCount - 1;
: : int col = StringGrid1->ColCount - 1;
: :
: : unsigned long tt = GetTickCount();
: :
: : for(int j = 1; j < row + 1; j++) StringGrid1->Rows[j]->BeginUpdate();
: : for(int i = 1; i < col + 1; i++) StringGrid1->Cols[i]->BeginUpdate();
: :
: : for(int j = 1; j < row + 1; j++)
: : {
: : for(int i = 1; i < col + 1; i++)
: : {
: : StringGrid1->Cells[i][j] = IntToStr(i);
: : }
: : }
: : for(int j = 1; j < row + 1; j++) StringGrid1->Rows[j]->EndUpdate();
: : for(int i = 1; i < col + 1; i++) StringGrid1->Cols[i]->EndUpdate();
: :
: : Caption = GetTickCount() - tt;
: :
: :
: : 하기와 같이 하면 약17초 정도 걸리거더군요.
: :
: : int row = StringGrid1->RowCount - 1;
: : int col = StringGrid1->ColCount - 1;
: :
: : unsigned long tt = GetTickCount();
: :
: : for(int j = 1; j < row + 1; j++)
: : {
: : for(int i = 1; i < col + 1; i++)
: : {
: : StringGrid1->Cells[i][j] = IntToStr(i);
: : }
: : }
: :
: : Caption = GetTickCount() - tt;
: :
: :
: : 이것도 느리면 타이머를 사용해서 조금씩 변경하는 방법이 있습니다.
: :
: : void __fastcall TForm1::Timer1Timer(TObject *Sender)
: : {
: : /*
: : 외부에서 FRowIndex를 0으로 하면 다시 갱신하는 구조입니다. ^^;;
: : 전체를 다 갱신하면 FRowIndex가 RowCount보다 많기 때문에 갱신작업을 하지 않을껍니다.
: : */
: : if(FRowIndex > StringGrid1->RowCount)
: : {
: : Caption = "갱신 완료!";
: : return;
: : }
: :
: : for(int c = 0; c < StringGrid1->ColCount; c++)
: : {
: : StringGrid1->Cells[c][FRowIndex] = IntToStr(c);
: : }
: :
: : Caption = "갱신 중!";
: : FRowIndex++;
: : }
: : //---------------------------------------------------------------------------
: :
: :
: : Ps. 답변이 되실련지 모르겠네요.
: :
: : 김태우 님이 쓰신 글 :
: : : 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초 정도는 멈춰 있네요..