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
[71970] Re:TExcelApplication 컴포넌트를 이용해 엑셀파일 저장후 프로세스 종료시 모든엑셀이 닫히는현상
박우성 [solgari] 5286 읽음    2014-11-11 14:40
ConnetTo는 기존에 열려저 있는 Excel이 있을 경우 사용하는 것이 좋을 것 같구요.
다음과 같이 COM Object를 새로 생성하면, 기존 열려져 있는 것과 별개로 작업을 할 수 있습니다.

#include 

void __fastcall TForm1::Button1Click(TObject *Sender)
{
	Variant App;
	try{
		WideString loadFile = "D:\\test1.xlsx"; //기존파일명
		WideString saveFile = "D:\\test2.xlsx"; //새로 저장할 파일명

		App = CreateOleObject("Excel.Application"); //COM(OLE) Object 생성

		App.OlePropertySet("Visible", true);

		Variant workbook = App.OlePropertyGet("Workbooks").OleFunction("Open", loadFile );  // 기존 파일 열기

		Variant sheet = workbook.OlePropertyGet( "Sheets").OlePropertyGet( "Item", 1 ); //첫번째 Sheet
		//Variant sheet = workbook.OlePropertyGet( "ActiveSheet" ); //활성화된 Sheet

		sheet.OlePropertyGet("Cells",1, 1).OlePropertySet("Value", 1234567 );  //셀 수정

		workbook.OleFunction( "SaveAs", saveFile ); //다른 이름으로 저장
	}__finally{
		App.OleFunction("Quit");
		App = Unassigned;
	}
}



taflo80 님이 쓰신 글 :
: //---------------------------------------------------------------------------
:
: #include <vcl.h>
: #pragma hdrstop
:
: #include "Unit1.h"
: //---------------------------------------------------------------------------
: #pragma package(smart_init)
: #pragma link "Excel_2K_SRVR"
: #pragma resource "*.dfm"
: TForm1 *Form1;
: //---------------------------------------------------------------------------
: __fastcall TForm1::TForm1(TComponent* Owner)
:     : TForm(Owner)
: {
: }
: //---------------------------------------------------------------------------
:
: void __fastcall TForm1::Button2Click(TObject *Sender)
: {
:     MkDir("C:\\상황실일일근무일지\\");
:     String strCurrDate = (DtDate->Date-1).FormatString("yyyymmdd");
:     String strExePath = ExtractFilePath(Application->ExeName) + "상황실일일운영일지\\";
:     String strOutPath = "C:\\상황실일일근무일지\\상황실일일근무일지_" + strCurrDate;
:     strExePath += "일보(신양식)";
:     String strExeFileName = strOutPath + ".xls";
:
:     ExcelApplication->Connect();
:     ExcelApplication->set_Visible(0,true);
:     ExcelApplication->set_DisplayAlerts(TDefLCID(), false);
:
:     TVariant fileName = "C:\\일보(신양식).xlsx";
:     TVariant fileNames = (TVariant)strOutPath;
:
:     ExcelWorkbook->ConnectTo( ExcelApplication->Workbooks->Open(fileName.operator wchar_t *()) );
:     ExcelWorksheet->ConnectTo( ExcelWorkbook->ActiveSheet );
:
:     ExcelWorksheet->Cells->set_Item((TVariant)13,(TVariant)"X",(TVariant)"100000");
:
:     ExcelWorkbook->SaveAs((OleVariant)fileNames,
:                           (OleVariant)xlNormal,
:                           EmptyParam,
:                           EmptyParam,
:                           (OleVariant)false,
:                           (OleVariant)false,
:                           xlNoChange,
:                           (OleVariant)xlUserResolution,
:                           (OleVariant)false,
:                           EmptyParam,
:                           EmptyParam,
:                           LOCALE_USER_DEFAULT);
:
:     ExcelApplication->Workbooks->Close(TDefLCID());
:     ExcelWorkbook->Close(TNoParam(), TNoParam(), TNoParam(), TDefLCID());
:     ExcelApplication->Quit();
:
:     ExcelWorksheet->Disconnect();
:     ExcelWorkbook->Disconnect();
:     ExcelApplication->Disconnect();
: }
:
: 테스트용 소스입니다.
:
: 다른 엑셀파일을 열어놓고 위의 프로세스를 실행을하면 열어놓았던 모든 엑셀파일이 닫혀버리네요,,,
:
: 심지어 저장하지않고 작업하던 엑셀파일들이 그냥 닫혀버리더군요....
:
: 불러드린 엑셀파일만 저장하고 닫을 수는 없는지요?
:
: 어떻게 해야하는지 조언좀 부탁드립니다.
:

+ -

관련 글 리스트
71958 TExcelApplication 컴포넌트를 이용해 엑셀파일 저장후 프로세스 종료시 모든엑셀이 닫히는현상 taflo80 3395 2014/11/07
71970     Re:TExcelApplication 컴포넌트를 이용해 엑셀파일 저장후 프로세스 종료시 모든엑셀이 닫히는현상 박우성 5286 2014/11/11
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.