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
[45087] ㅠ.ㅜ 안되는데요..
허접 [khlee0123] 957 읽음    2006-05-26 17:45
슬님~  답변 감사드립니다.
님 말씀대로 헤더파일 인클루드 아래 using namespace Excel_xp 라고 써줬는데,
Namespace name expected 라고 에러가 납니다.
ㅠ.ㅜ

슬  님이 쓰신 글 :
: : Qualifier 'Excel_xp' is not a class or namespace name
:
: Excel_xp라는 네임스페이스가 등록이 되어있지 않아서 에러가 난것입니다...
: using namespace Excel_xp;
: 를 헤더파일 인쿨드 아래 써주시구요...
:
: 아래는 제가 Button1Cick함수를 바꿔봤습니다...
:
: void __fastcall TFormMain::Button1Click(TObject *Sender)
: {
:     SaveDialog1->Execute();
:
:     WideString strFileName = ExtractFileName(SaveDialog1->FileName);
:     WideString strFilePath = ExtractFilePath(SaveDialog1->FileName);
:     WideString strFileExt  = ExtractFileExt(SaveDialog1->FileName);
:
:     if(strFileExt != ".xls") {
:         strFileExt +=".xls";
:     }
: // 확장자가 .xls가 아니면 뒤에 .xls 를 붙여서 사용자가 입력한 파일 이름으로 엑셀 파일을 생성합니다.
:
:
:     ExcelApplication1->Connect();
:     // true 화면에 보임, false 화면에 보이지 않음
:     ExcelApplication1->set_Visible(0,false);
:     ExcelApplication1->set_DisplayAlerts(TDefLCID(), false);
:     ExcelWorkbook1->ConnectTo(ExcelApplication1->Workbooks->Add());
:     //첫번째 워크시트와 연결
:     ExcelWorksheet1->ConnectTo(ExcelApplication1->Worksheets->get_Item((TVariant)1));
:     //워크시트의 이름
:
:     ExcelWorksheet1->set_Name(strTitle);
:
:     ExcelWorksheet1->Cells->set_Item((TVariant)1,(TVariant)"A",(TVariant)Edit20->Text) ;
:     ExcelWorksheet1->Cells->set_Item((TVariant)1,(TVariant)"B",(TVariant)Edit30->Text) ;
:     ExcelWorksheet1->Cells->set_Item((TVariant)1,(TVariant)"C",(TVariant)Edit40->Text) ;
:     ExcelWorksheet1->Cells->set_Item((TVariant)1,(TVariant)"D",(TVariant)Edit50->Text) ;
:     ExcelWorksheet1->Cells->set_Item((TVariant)1,(TVariant)"E",(TVariant)Edit60->Text) ;
:
:     ExcelWorksheet1->Cells->set_Item((TVariant)2,(TVariant)"A",(TVariant)Edit19->Text) ;
:     ExcelWorksheet1->Cells->set_Item((TVariant)2,(TVariant)"B",(TVariant)Edit29->Text) ;
:     ExcelWorksheet1->Cells->set_Item((TVariant)2,(TVariant)"C",(TVariant)Edit39->Text) ;
:     ExcelWorksheet1->Cells->set_Item((TVariant)2,(TVariant)"D",(TVariant)Edit49->Text) ;
:     ExcelWorksheet1->Cells->set_Item((TVariant)2,(TVariant)"E",(TVariant)Edit59->Text) ;
:
:     ExcelWorksheet1->Activate();
:     //ExcelApplication1->Save((TVariant)"C:\\Source\\Test2\\Test1.xls");
:     TVariant tvFileName = strFilePath + strFileName + strFileExt;
:     ExcelWorkbook1->SaveAs( tvFileName,
:                             TNoParam(),
:                             TNoParam(),
:                             TNoParam(),
:                             TNoParam(),
:                             TNoParam(),
:                             (Excel_xp::XlSaveAsAccessMode) 3,
:                             TNoParam(),
:                             TNoParam(),
:                             TNoParam(),
:                             TNoParam(),
:                             TNoParam(),
:                             TDefLCID());
:
:     ExcelApplication1->Disconnect();
:     ExcelWorksheet1->Disconnect();
:     ExcelWorkbook1->Disconnect();
:
: }
:
: 직접 컴파일 해보진 않았습니다...
:
: 한번 컴파일 해보시기 바랍니다.
:
: 허접 님이 쓰신 글 :
: : 슬님..
: : 님께서 알려주신 대로
: : ExcelWorkbook1->SaveAs(FileName,
: :         TNoParam(),
: :         TNoParam(),
: :         TNoParam(),
: :         TNoParam(),
: :         TNoParam(),
: :         (Excel_xp::XlSaveAsAccessMode) 3,
: :         TNoParam(),
: :         TNoParam(),
: :         TNoParam(),
: :         TNoParam(),
: :         TNoParam(),
: :         TDefLCID());
: : 이렇게 했을 때,
: : Qualifier 'Excel_xp' is not a class or namespace name
: : expected  라고 에러가 뜨네요..
: : 음..  그리고 SaveDialog를 놓긴 했는데..   어떻게 해야 하는지 모르겠습니다..   ㅡㅡ;;;;;
: :
: : void __fastcall TFormMain::Button1Click(TObject *Sender)
: : {
: :     SaveDialog1->Execute();
: :
: :     WideString strTitle = "Data Save";
: :     WideString strFile = "C:\\test.xls";
: :     WideString FileName;
: :
: :     ExcelApplication1->Connect();
: :     // true 화면에 보임, false 화면에 보이지 않음
: :     ExcelApplication1->set_Visible(0,false);
: :     ExcelApplication1->set_DisplayAlerts(TDefLCID(), false);
: :     ExcelWorkbook1->ConnectTo(ExcelApplication1->Workbooks->Add());
: :     //첫번째 워크시트와 연결
: :     ExcelWorksheet1->ConnectTo(ExcelApplication1->Worksheets->get_Item((TVariant)1));
: :     //워크시트의 이름
: :
: :     ExcelWorksheet1->set_Name(strTitle);
: :
: :     ExcelWorksheet1->Cells->set_Item((TVariant)1,(TVariant)"A",(TVariant)Edit20->Text) ;
: :     ExcelWorksheet1->Cells->set_Item((TVariant)1,(TVariant)"B",(TVariant)Edit30->Text) ;
: :     ExcelWorksheet1->Cells->set_Item((TVariant)1,(TVariant)"C",(TVariant)Edit40->Text) ;
: :     ExcelWorksheet1->Cells->set_Item((TVariant)1,(TVariant)"D",(TVariant)Edit50->Text) ;
: :     ExcelWorksheet1->Cells->set_Item((TVariant)1,(TVariant)"E",(TVariant)Edit60->Text) ;
: :
: :     ExcelWorksheet1->Cells->set_Item((TVariant)2,(TVariant)"A",(TVariant)Edit19->Text) ;
: :     ExcelWorksheet1->Cells->set_Item((TVariant)2,(TVariant)"B",(TVariant)Edit29->Text) ;
: :     ExcelWorksheet1->Cells->set_Item((TVariant)2,(TVariant)"C",(TVariant)Edit39->Text) ;
: :     ExcelWorksheet1->Cells->set_Item((TVariant)2,(TVariant)"D",(TVariant)Edit49->Text) ;
: :     ExcelWorksheet1->Cells->set_Item((TVariant)2,(TVariant)"E",(TVariant)Edit59->Text) ;
: :
: :     ExcelWorksheet1->Activate();
: :     //ExcelApplication1->Save((TVariant)"C:\\Source\\Test2\\Test1.xls");
: :     ExcelWorksheet1->SaveAs(strFile);
: :     ExcelWorkbook1->SaveAs(FileName,
: :         TNoParam(),
: :         TNoParam(),
: :         TNoParam(),
: :         TNoParam(),
: :         TNoParam(),
: :         (Excel_xp::XlSaveAsAccessMode) 3,
: :         TNoParam(),
: :         TNoParam(),
: :         TNoParam(),
: :         TNoParam(),
: :         TNoParam(),
: :         TDefLCID());
: :
: :     ExtractFileName(SaveDialog1->FileName); // Test 를 반환합니다.
: :     ExtractFilePath(SaveDialog1->FileName); // C:\를 반환합니다.
: :     ExtractFileExt(SaveDialog1->FileName);  // .xls를 반환합니다.
: :
: :
: :     ExcelApplication1->Disconnect();
: :     ExcelWorksheet1->Disconnect();
: :     ExcelWorkbook1->Disconnect();
: :
: : }
: :
: : 지금 소스가 이런 상태거든요..   도와주세요~  ㅠ.ㅜ
: :
: :
: :
: : 슬  님이 쓰신 글 :
: : : 허접 님이 쓰신 글 :
: : : : 슬님..  답변 정말로 감사드립니다.
: : : : 엑셀이 실행되는게 보이질 않고 저장이 되네요.
: : : : 그런데, 아래 부분에서 에러가 나구요..
: : : : : ExcelWb->SaveAs(m_strFileName,
: : : : :         TNoParam(),
: : : : :         TNoParam(),
: : : : :         TNoParam(),
: : : : :         TNoParam(),
: : : : :         TNoParam(),
: : : : :         (Excel_xp::XlSaveAsAccessMode) 3/*[in,def,opt]*/,
: : : : :         TNoParam(),
: : : : :         TNoParam(),
: : : : :         TNoParam(),
: : : : :         TNoParam(),
: : : : :         TNoParam(),
: : : : :         TDefLCID());
: : : :
: : : : 그리고 솔직히 제가 너무 초보에 허접이라, 다이얼로그를 어떻게 띄우는지도 모릅니다.  ㅠ.ㅜ
: : : : 포럼에 자료가 많다고 하는데, 검색 능력도 떨어지는지 잘 못 찾겠네요.  ㅡㅡ;;;
: : : : 염치없지만, 조금 자세히 알려주시면 안될까요? 소스코드로....
: : : : 버튼을 누르면, FileSaveAs 다이얼로그가 뜹니다.
: : : : 거기에 원하는 파일 이름을 쓰고 (ex. 20060525.xls) 원하는 디렉토리를 선택한 후 저장을 누릅니다.
: : : : 그럼 xls 파일이 생기고, xls 파일을 열면, edit의 내용이 이~쁘게 excel cell 에 담겨 나오는거죠..   
: : : : 꼭 좀 도와주세요~   ㅠ.ㅜ 
: : : : 소스 코드를 알려달라고 하는게 참 챙피하고 슬님께 죄송하지만, 지금 상황으로서는 그 방법 밖에 없는지라..   ㅠ.ㅜ
: : : : 부탁 드리겠습니다..
: : : :
: : : :
: : : :
: : : : 슬  님이 쓰신 글 :
: : : : : 허접 님이 쓰신 글 :
: : : : : : void __fastcall TFormMain::Button1Click(TObject *Sender)
: : : : : : {
: : : : : :     WideString strTitle = "Excel Test";
: : : : : :     WideString strFile = "C:\\test.xls";
: : : : : :     WideString FileName;
: : : : : :
: : : : : :     ExcelApplication1->Connect();
: : : : : :     // true 화면에 보임, false 화면에 보이지 않음
: : : : : :     ExcelApplication1->set_Visible(0,true);
: : : : : :     ExcelWorkbook1->ConnectTo(ExcelApplication1->Workbooks->Add());
: : : : : :     //첫번째 워크시트와 연결
: : : : : :     ExcelWorksheet1->ConnectTo(ExcelApplication1->Worksheets->get_Item((TVariant)1));
: : : : : :     //워크시트의 이름
: : : : : :
: : : : : :     ExcelWorksheet1->set_Name(strTitle);
: : : : : :
: : : : : :     ExcelWorksheet1->Cells->set_Item((TVariant)1,(TVariant)"A",(TVariant)Edit20->Text) ;
: : : : : :     ExcelWorksheet1->Cells->set_Item((TVariant)1,(TVariant)"B",(TVariant)Edit30->Text) ;
: : : : : :     ExcelWorksheet1->Cells->set_Item((TVariant)1,(TVariant)"C",(TVariant)Edit40->Text) ;
: : : : : :     ExcelWorksheet1->Cells->set_Item((TVariant)1,(TVariant)"D",(TVariant)Edit50->Text) ;
: : : : : :     ExcelWorksheet1->Cells->set_Item((TVariant)1,(TVariant)"E",(TVariant)Edit60->Text) ;
: : : : : :
: : : : : :     ExcelWorksheet1->Cells->set_Item((TVariant)2,(TVariant)"A",(TVariant)Edit19->Text) ;
: : : : : :     ExcelWorksheet1->Cells->set_Item((TVariant)2,(TVariant)"B",(TVariant)Edit29->Text) ;
: : : : : :     ExcelWorksheet1->Cells->set_Item((TVariant)2,(TVariant)"C",(TVariant)Edit39->Text) ;
: : : : : :     ExcelWorksheet1->Cells->set_Item((TVariant)2,(TVariant)"D",(TVariant)Edit49->Text) ;
: : : : : :     ExcelWorksheet1->Cells->set_Item((TVariant)2,(TVariant)"E",(TVariant)Edit59->Text) ;
: : : : : :
: : : : : :     ExcelWorksheet1->Activate();
: : : : : :     //ExcelApplication1->Save((TVariant)"C:\\Source\\Test2\\Test1.xls");
: : : : : :     ExcelWorksheet1->SaveAs(strFile);
: : : : : :
: : : : : :     ExcelApplication1->Disconnect();
: : : : : :     ExcelWorksheet1->Disconnect();
: : : : : :     ExcelWorkbook1->Disconnect();
: : : : : : }
: : : : : :
: : : : : : 이렇게 했습니다.
: : : : : : 데이터 잘 들어갑니다.
: : : : : : 그런데, 현재 이 방법은 버튼을 클릭하면, 엑셀이 실행되고, 각 cell에 데이터를 넣고, 저장을 해주는 형식이잖아요.
: : : : : : 제가 하고 싶은건, 버튼을 클릭하면 FileSaveAs 다이얼로그(맞나?)가 뜨고, 거기서 제가 원하는대로 파일명을 입력해서 (이렇게 되면 임의의 디렉토리 선택도 가능하겠죠?) xls 확장자로 저장을 하고 싶습니다.
: : : : : : 컴퓨터가 느려서 그런지, 지금 방식대로 하면, 엑셀 띄우는데 너무 오랜 시간이 걸리네요.
: : : : : : 그리고 'text.xls 파일이 있습니다. 이 파일을 변경하겠습니까?' 라는 팝업도 계속 뜨네요.
: : : : : : 데이터를 덮어쓰지 않고, 각각의 파일 이름으로 저장을 하고 싶은데..(1.xls, 2.xls, 3.xls, ... 이런식으로요..)    
: : : : : : 도와주세요 슬님~~
: : : : :
: : : : : 답변이 늦었네요^^;; 죄송합니다 일이 많아서;;
: : : : :
: : : : : 우선 팝업을 안뜨게 하는 방법은 이렇습니다.
: : : : :
: : : : : ExcelApplication에서 Open을 실행시키시기 전에 수행해주시면 됩니다.
: : : : :
: : : : : ExcelApp->Connect(); 엑셀을 링크 시키시고
: : : : : ExcelApp->set_Visible(0,false); 숨겨서 실행합니다.
: : : : : ExcelApp->set_DisplayAlerts(TDefLCID(), false); 그리고 팝업을 띄우지 않게 하죠 그대신 에러가 일어날 상황을 처리해 주셔야 합니다.
: : : : :
: : : : : 원하시는게 새로운 파일을 생성하시는 거라면...
: : : : :
: : : : : 우선 ExcelApp->Add() 를 이용하셔서 새로운 파일을 생성하신후에
: : : : :
: : : : : 원하시는 파일명으로
: : : : :
: : : : : ExcelWb->SaveAs(m_strFileName,
: : : : :         TNoParam(),
: : : : :         TNoParam(),
: : : : :         TNoParam(),
: : : : :         TNoParam(),
: : : : :         TNoParam(),
: : : : :         (Excel_xp::XlSaveAsAccessMode) 3/*[in,def,opt]*/,
: : : : :         TNoParam(),
: : : : :         TNoParam(),
: : : : :         TNoParam(),
: : : : :         TNoParam(),
: : : : :         TNoParam(),
: : : : :         TDefLCID());
: : : : :
: : : : : 해주시면 됩니다.
: : : : :
: : : : : 이때 FileSaveDialog에서 받아온 파일 이름(혹은 경로)로 원하시는 파일 명을 넣어주시면 되죠...
: : : : :
: : : : : 파일을 생성하시기전에
: : : : :
: : : : : FileExists()로 파일이 존재 하는지 확인하시고 존재한다면
: : : : :
: : : : : DeleteFile()로 파일을 삭제하신후에 SaveAs()해주셔야 안전할껍니다.
: : : : :
: : : : : 그리고 FileSaveDialog의 프로퍼티를 잘 수정하셔서 .xls 가 가능하도록 해주시면 되겠죠...
: : : : :
: : : : : 그리고 SaveAs()에 들어가는 파일명은 tagVariant 이므로 (TVariant)로 캐스팅 해주시면 됩니다.
: : : : :
: : : : : 그럼....
: : : : :
: : : : : 즐프하세요^^
: : :
: : : 에러메세지를 보여주시면 해당 부분에 정확한 답변을 드릴수 있겠네요..
: : :
: : : 말씀하신 부분은 제가 직접 사용하는 부분을 복사해서 보여드린 겁니다.
: : :
: : :
: : :
: : : FileSaveDialog 는 저도 몇번 안써봐서 제가 정확히 사용하는 지는 모르겠네요...
: : :
: : : 우선 폼 위에 TSaveDialog Component 를 올려 두시구요...
: : :
: : : Filter 프로퍼티를 더블클릭하셔서
: : :
: : : 설명과 제한할 확장자를 *.xls 와 같은 형식으로 써주시면 됩니다.
: : :
: : :
: : : 그 다음 Button1의 onClick 이벤트에다 SaveDialog->Excute();
: : : 를 호출하시면 파일을 저장하는 다이얼로그가 뜹니다.
: : :
: : : 확인 버튼을 누르게 되면 SaveDialog->FileName 에 경로,파일명,확장자가 모두 저장되어있습니다.
: : :
: : : 이걸 따로 추출해주는 함수도 존재합니다.
: : :
: : : 예를 들어 C:\Test.xls라는 파일 경로를 지정해주었다면..
: : :
: : : ExtractFileName(SaveDialog->FileName) 는 Test 를 반환합니다.
: : : ExtractFilePath(SaveDialog->FileName) 는 C:\를 반환합니다.
: : : ExtractFileExt(SaveDialog->FileName) 는 .xls를 반환합니다.
: : :
: : : 만약 사용자가 임의로 다른 확장자를 써 넣었다면.
: : :
: : : 확장자를 검출해서 뒤에 .xls를 붙여주면 완벽해지겠죠...
: : :
: : : FileSaveDialog 가 아니라 SaveDialog 였네요...
: : :
: : : 그럼... 즐프하세요~

+ -

관련 글 리스트
45043 저도 슬님께 질문.. 꼭 도와주세요~~ 허접 928 2006/05/25
45049     Re:저도 슬님께 질문.. 꼭 도와주세요~~ 슬  1105 2006/05/25
45053         슬님~ 답변 감사드려요~ 근데 조금 더.......... 허접 869 2006/05/25
45055             Re:슬님~ 답변 감사드려요~ 근데 조금 더.......... 슬  1172 2006/05/25
45065                 도무지 뭐가 뭔지.... 모르겠어요.. ㅠ.ㅜ 허접 984 2006/05/26
45076                     Re:도무지 뭐가 뭔지.... 모르겠어요.. ㅠ.ㅜ 슬  1261 2006/05/26
45087                         ㅠ.ㅜ 안되는데요.. 허접 957 2006/05/26
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.