C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[38454] [만해] TExcelApplication 활용에 대한 질문
강재호.만해 [greenuri] 2340 읽음    2004-12-21 09:34
안녕하세요 만해입니다.

TExcelApplication을 좀 써 볼려고 합니다.

인터넷 뒤져서 예제 소스를 하나 구해서 이것 저것 테스트 해보고 있는데요

이상하게 새로운 파일을 만들면 꼭 에러가 나네요 어떻게 해야 할지 모르곘네요

소스에서 어느 부분이 에러 나는지 애기 드릴께요 좀 봐주세요

TExcelApplication *OXLApp = new TExcelApplication(this);
  OXLApp->AutoConnect = false;
  OXLApp->AutoQuit = false;
  OXLApp->ConnectKind = ckRunningOrNew;
  long LCID = LOCALE_USER_DEFAULT;  // Get LOCALE information
  int pageNo = 0;
  String fileName,  defaultWBook = "\\TAGData.xls";
  bool option = false;

  // Check if there are records in string grid to send to Excel
  if (sgData->Cells[1][1] == "") {
    MessageDlg("No data available to send to Excel!",
                mtInformation, TMsgDlgButtons() << mbOK, 0);
    return;
  }

  // Check if Excel application is available on machine
  try {
    OXLApp->Connect();  // Create or connect an instance of EXCEL.EXE
  }
  catch(...) {
    MessageDlg("Unable to load Excel, check installation!",
                mtError, TMsgDlgButtons() << mbOK, 0);
    delete OXLApp;
    OXLApp = 0;
    return;
  }

  TCursor oldCursor = Screen->Cursor; // Save original cursor type
  Screen->Cursor = crHourGlass;       // Show hourglass cursor
  ExcelWorksheetPtr OXLSheet;
  ExcelWorkbookPtr OXLBook;

  try {
    fileName = "c:\\test.xls";

    if (option) {
      if (FileExists(fileName))
        DeleteFile(fileName); // Delete file
      // Create new Excel workbook
      OXLBook  = OXLApp->Workbooks->Add(TVariant(xlWBATWorksheet), LCID);
      OXLSheet = OXLBook->ActiveSheet;  // Get the active worksheet
    }
    else {
      if (!FileExists(fileName)) {
        // Create new Excel workbook
//!!!!!!!!! 여기가 주로 에러 나는 부분인데요
//!!!!!!!!! 기존의 파일이 존재 하지 않으면 새 파일을 만들고,       
        OXLBook = OXLApp->Workbooks->Add(TVariant(xlWBATWorksheet), LCID);
        OXLBook->SaveAs(TVariant(fileName),
                        TVariant(xlNormal), TNoParam(), TNoParam(),
                        TNoParam(), TNoParam(), xlNoChange,
                        TNoParam(), TNoParam(), TNoParam(),
                        TNoParam(), LCID);
        OXLBook->Release();  // Important: must release ptr
      }
     
//!!!!!!!! 파일을 여기서 읽어 들입니다.
//!!!!!!!! 그런데, 기존의 파일을 읽어 들이는건 되는데, 새로 작성된 파일을 읽어 들이면
//!!!!!!!! 꼭 에러가 발생합니다.
      OXLBook = OXLApp->Workbooks->Open(TVariant(fileName),
                                      TNoParam(), TNoParam(), TNoParam(),
                                      TNoParam(), TNoParam(), TNoParam(),
                                      TNoParam(), TNoParam(), TNoParam(),
                                      TNoParam(), TNoParam(), TNoParam(),
                                      LCID);
      OXLSheet = OXLBook->Sheets->Add(TNoParam(), TNoParam(),
                                      TVariant(1), TVariant(xlWorksheet),
                                      LCID);
    }

    // Write parsed string grid TAG data to the Excel worksheet
    for (int r=0; r<=sgData->RowCount; r++)
      for (int c=1; c<=sgData->ColCount-1; c++)
        OXLSheet->Cells->set__Default(TVariant(r+3), TVariant(c),
                                      TVariant(sgData->Cells[c][r]));

    // Size the worksheet's column widths to suit data
    RangePtr aRange;
    OXLSheet->Columns->AutoFit();
    aRange = OXLSheet->Columns->get__Default(TVariant(1));
    aRange->set_ColumnWidth(TVariant(7));

    if (option) {
      // Save the worksheet...
      OXLSheet->SaveAs(TVariant(fileName));
    }
    else {
      // Save worksheet using its base filename, allow for the same file
      // to be saved more than once.  Append (n) to the name of sheet.
      ExcelWorksheetPtr aSheet;
      for (int i=1; i<=OXLBook->Worksheets->Count; i++) {
        aSheet = OXLBook->Worksheets->get_Item(TVariant(i));
        if (String(aSheet->Name).SubString(1, fileName.Length()) ==fileName) {
          pageNo++;
        }
        aSheet->Release();  // Important: must release ptr each time...
      }
      if (pageNo == 0)
        OXLSheet->set_Name(WideString(fileName));
      else{
        OXLSheet->set_Name(WideString(fileName + "(" + IntToStr(pageNo) + ")"));
      }
      // Save (plus any changes to) worksheet...
      OXLBook->Close(TVariant(true), TNoParam(), TNoParam(), LCID);
    }
  }
  __finally
  {
    OXLSheet->Release();  // Important: must release ptr
    OXLApp->Disconnect(); // Use disconnect for SERVER COMPONENT
    delete OXLApp;
    OXLApp = 0;
    Screen->Cursor = oldCursor; // Restore original cursor
  }

그리고 혹시 TExcelApplication 레퍼런스 위치 아시면 좀 가르켜주세요

+ -

관련 글 리스트
38454 [만해] TExcelApplication 활용에 대한 질문 강재호.만해 2340 2004/12/21
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.