자유롭게 질의 및 응답을 할 수 있는 게시판입니다. 개발자 여러분의 답변이 큰 도움이 됩니다.
- 제품설치/등록 오류 문의: 설치/등록 Q&A 이용 (제품 구매 고객 한정)
C++ Builder 엑셀 저장, 읽기 기능에서 오류 문의
2018.12.07 11:51
본 게시판은 개발자들이 자유롭게 질문과 답변을 공유하는 게시판입니다.
* 따라서 최대한 정중하게 질문을 올려 주세요.
* 질문을 상세히 작성해 주실 수록 좋은 답변이 올라 옵니다.
* 다른 분들도 참고할 수 있도록 결과 댓글 필수(또는 감사 댓글)
(결과 댓글을 달지 않는 경우 다음 질문에 대한 답변이 달리지 않는 불이익이 있을 수 있습니다.)
-----------------------------------------------------------------------------------------------
안녕하세요
10.1 도쿄버전 c++빌더 사용중입니다.
아래와 같이 특정 폴더에 있는 엑셀 파일을 열어서 수정하고 저장하는 기능을 구현중인데
"피호출자를 호출하지 못하였습니다."라는 오류 메시지가 뜨네요
그리고 작업관리자에 엑셀일 실행이 되고있어 일일일 수작업으로 지워줘야하구요
설정에 문제가 없는지 확인 부탁드립니다.
char dBuf[100];
int excel_col;
Variant excel_app;
Variant excel_book, excel_books;
Variant excel_sheet;
Variant excel_window;
Variant cells;
Variant Data;
Variant interior;
Variant column;
WideString ExcelData;
AnsiString asFileName;
Variant value;
String DefaultOpenPath={"C:\\ICS Default Set\\ICS Default Set.xlsx"};
void __fastcall TMainForm::Button_DefaultSaveClick(TObject *Sender)
{
AnsiString TestStr, StrPoint;
WideString Temp, SaveStr;
char sTemp=0;
Temp=DefaultOpenPath;
excel_app=Variant::CreateObject("excel.application"); //Excel 프로그램 실행
excel_app.OlePropertySet("Visible", (Variant)false); //Excel 프로그램 Visible설정
excel_app.OlePropertyGet("WorkBooks").OleProcedure("Open",Temp);
excel_book=excel_app.OlePropertyGet("ActiveWorkbook"); //현재 Active된 WorkBook 선택
excel_sheet=excel_book.OlePropertyGet("ActiveSheet"); // WorkBook에서 Acitve된 Sheet선택
excel_app.OlePropertySet("DisplayAlerts", false); //파일 저장 묻기 메시지 off
TestStr=(Ru_MainForm->ComboBox_HighTemp->ItemIndex+80);
strcpy(dBuf, TestStr.c_str());
cells = excel_sheet.OlePropertyGet("Cells",TempHighPoint[0], TempHighPoint[1]);
cells.OlePropertySet("Value", WideString(dBuf));
if(Ru_MainForm->CheckBox_Fa1->Checked==false) TestStr="OFF";
else TestStr="ON";
strcpy(dBuf, TestStr.c_str());
cells = excel_sheet.OlePropertyGet("Cells",Fa1_SetupPoint[0], Fa1_SetupPoint[1]);
cells.OlePropertySet("Value", WideString(dBuf));
if(Ru_MainForm->CheckBox_Fa5->Checked==false) TestStr="OFF";
else TestStr="ON";
strcpy(dBuf, TestStr.c_str());
cells = excel_sheet.OlePropertyGet("Cells",Fa5_SetupPoint[0], Fa5_SetupPoint[1]);
cells.OlePropertySet("Value", WideString(dBuf));
strcpy(dBuf, TestStr.c_str());
cells = excel_sheet.OlePropertyGet("Cells",AutoShutdownPoint[0], AutoShutdownPoint[1]);
cells.OlePropertySet("Value", WideString(dBuf));
TestStr=(Ru_MainForm->ComboBox_ConDlInputUpper->ItemIndex+31)*-1;
strcpy(dBuf, TestStr.c_str());
cells = excel_sheet.OlePropertyGet("Cells",DlInputUpperPoint[0], DlInputUpperPoint[1]);
cells.OlePropertySet("Value", WideString(dBuf));
TestStr=(Ru_MainForm->ComboBox_ConDlInputLower->ItemIndex+50)*-1;
strcpy(dBuf, TestStr.c_str());
cells = excel_sheet.OlePropertyGet("Cells",DlInputLowerPoint[0], DlInputLowerPoint[1]);
cells.OlePropertySet("Value", WideString(dBuf));
SaveStr=DefaultOpenPath;
excel_book.OleProcedure("SaveAs",SaveStr);
excel_book.OleFunction("Close", (Variant)False);
excel_sheet = Unassigned;
excel_book = Unassigned;
excel_app.OleFunction("Quit");
excel_app = Unassigned;
}
C++ Builder 엑셀 저장, 읽기 기능에서 오류 문의
2018.12.07 11:51
본 게시판은 개발자들이 자유롭게 질문과 답변을 공유하는 게시판입니다.
* 따라서 최대한 정중하게 질문을 올려 주세요.
* 질문을 상세히 작성해 주실 수록 좋은 답변이 올라 옵니다.
* 다른 분들도 참고할 수 있도록 결과 댓글 필수(또는 감사 댓글)
(결과 댓글을 달지 않는 경우 다음 질문에 대한 답변이 달리지 않는 불이익이 있을 수 있습니다.)
-----------------------------------------------------------------------------------------------
안녕하세요
10.1 도쿄버전 c++빌더 사용중입니다.
아래와 같이 특정 폴더에 있는 엑셀 파일을 열어서 수정하고 저장하는 기능을 구현중인데
"피호출자를 호출하지 못하였습니다."라는 오류 메시지가 뜨네요
그리고 작업관리자에 엑셀일 실행이 되고있어 일일일 수작업으로 지워줘야하구요
설정에 문제가 없는지 확인 부탁드립니다.
char dBuf[100];
int excel_col;
Variant excel_app;
Variant excel_book, excel_books;
Variant excel_sheet;
Variant excel_window;
Variant cells;
Variant Data;
Variant interior;
Variant column;
WideString ExcelData;
AnsiString asFileName;
Variant value;
String DefaultOpenPath={"C:\\ICS Default Set\\ICS Default Set.xlsx"};
void __fastcall TMainForm::Button_DefaultSaveClick(TObject *Sender)
{
AnsiString TestStr, StrPoint;
WideString Temp, SaveStr;
char sTemp=0;
Temp=DefaultOpenPath;
excel_app=Variant::CreateObject("excel.application"); //Excel 프로그램 실행
excel_app.OlePropertySet("Visible", (Variant)false); //Excel 프로그램 Visible설정
excel_app.OlePropertyGet("WorkBooks").OleProcedure("Open",Temp);
excel_book=excel_app.OlePropertyGet("ActiveWorkbook"); //현재 Active된 WorkBook 선택
excel_sheet=excel_book.OlePropertyGet("ActiveSheet"); // WorkBook에서 Acitve된 Sheet선택
excel_app.OlePropertySet("DisplayAlerts", false); //파일 저장 묻기 메시지 off
TestStr=(Ru_MainForm->ComboBox_HighTemp->ItemIndex+80);
strcpy(dBuf, TestStr.c_str());
cells = excel_sheet.OlePropertyGet("Cells",TempHighPoint[0], TempHighPoint[1]);
cells.OlePropertySet("Value", WideString(dBuf));
if(Ru_MainForm->CheckBox_Fa1->Checked==false) TestStr="OFF";
else TestStr="ON";
strcpy(dBuf, TestStr.c_str());
cells = excel_sheet.OlePropertyGet("Cells",Fa1_SetupPoint[0], Fa1_SetupPoint[1]);
cells.OlePropertySet("Value", WideString(dBuf));
if(Ru_MainForm->CheckBox_Fa5->Checked==false) TestStr="OFF";
else TestStr="ON";
strcpy(dBuf, TestStr.c_str());
cells = excel_sheet.OlePropertyGet("Cells",Fa5_SetupPoint[0], Fa5_SetupPoint[1]);
cells.OlePropertySet("Value", WideString(dBuf));
strcpy(dBuf, TestStr.c_str());
cells = excel_sheet.OlePropertyGet("Cells",AutoShutdownPoint[0], AutoShutdownPoint[1]);
cells.OlePropertySet("Value", WideString(dBuf));
TestStr=(Ru_MainForm->ComboBox_ConDlInputUpper->ItemIndex+31)*-1;
strcpy(dBuf, TestStr.c_str());
cells = excel_sheet.OlePropertyGet("Cells",DlInputUpperPoint[0], DlInputUpperPoint[1]);
cells.OlePropertySet("Value", WideString(dBuf));
TestStr=(Ru_MainForm->ComboBox_ConDlInputLower->ItemIndex+50)*-1;
strcpy(dBuf, TestStr.c_str());
cells = excel_sheet.OlePropertyGet("Cells",DlInputLowerPoint[0], DlInputLowerPoint[1]);
cells.OlePropertySet("Value", WideString(dBuf));
SaveStr=DefaultOpenPath;
excel_book.OleProcedure("SaveAs",SaveStr);
excel_book.OleFunction("Close", (Variant)False);
excel_sheet = Unassigned;
excel_book = Unassigned;
excel_app.OleFunction("Quit");
excel_app = Unassigned;
}
볼랜드 포럼에 가보시면 참고하실만한 문서가 있습니다.
아래는 참고만 하세요.
사소한 실행 순서의 차이로 프로세스가 남아 있는 경우가 있더군요.
시작
AnsiString filename = "c:\\20181205.xlsx";
// Excel's Application Object
Variant xlApp = Variant::CreateObject("Excel.Application");
xlApp.OlePropertySet("DisplayAlerts", false);
xlApp.OlePropertySet("Visible", false);
Variant xlBooks = xlApp.OlePropertyGet("Workbooks");
xlBooks.OleProcedure("Open", filename.c_str());
Variant xlBook = xlBooks.OlePropertyGet("Item", 1);
Variant xlSheets = xlBook.OlePropertyGet("Worksheets");
종료
xlBook.OleProcedure("Save");
xlBooks.OleProcedure("Close");
xlApp.OleProcedure("Quit");
xlSheet = Unassigned;
xlSheets = Unassigned;
xlBook = Unassigned;
xlBooks = Unassigned;
xlApp = Unassigned;