이미 오래 지난 거라 해결하셨을 듯 하지만... 혹시나 다음에 저처럼 비슷하게 찾아오는 경우를 위해 답변달아요.
우선.
excel_books.OleProcedure("SaveAs" ,SaveDialogProcess->FileName.c_str()); // <--이부분
excel_books.OleFunction("Close", (Variant)False);
excel_books가 아니라 excel_book으로 해야합니다.
excel_book.OleProcedure("SaveAs" ,SaveDialogProcess->FileName.c_str());
excel_book.OleFunction("Close", (Variant)False);
그리고 이미 있는 파일로 저장을 하려고 하면 Excel창이 떠서 Overwrite할지를 묻는 창이 뜨게 됩니다.
이 창을 나오지 않게 하려면 다음과 같이 하시면 됩니다.
excel_app.OlePropertySet("DisplayAlerts", false);
이렇게 하시면 묻지않고 무조건 덮어쓰기를 해버리지요.
소병관 님이 쓰신 글 :
: 오늘도 질문을 올리네요^^;;
: 데이타를 새로운 엑셀파일을 형성해서 저장하려고 하는데요...
: 포럼에 있는 답변들을 가지고 프로그램을 작성했는데 에러가 나네요...
: 다른분께서 똑같은 경우를 질문하셨는데 답변이 없어서 제가 다시 질문을 올립니다.
: 고수님들께서 도와주시면 감사하겠습니다.
:
: Variant excel_app;
: Variant excel_book, excel_books;
: Variant excel_sheet;
: Variant cells;
: Variant Data;
: WideString ExcelData;
: AnsiString asFileName;
:
: if(SaveDialogProcess->Execute())
: {
: excel_app = Variant::CreateObject("excel.application");
: excel_app.OlePropertySet("Visible", (Variant)false);
:
: excel_books = excel_app.OlePropertyGet("Workbooks");
: excel_book = excel_books.OleFunction("Add", 1);
: excel_sheet = excel_book.OlePropertyGet("ActiveSheet");
:
: // read Data
: for(int Col = 1; Col < iGridCol; Col++)
: {
: for(int Row = 1; Row < iGridRow; Row++)
: {
: ExcelData = StringGrid->Cells[Col][Row];
: cells = excel_sheet.OlePropertyGet("Cells",Col , Row); //Cell선택
: cells.OlePropertySet("Value", WideString(ExcelData));
: }
: }
:
: excel_books.OleProcedure("SaveAs" ,SaveDialogProcess->FileName.c_str()); // <--이부분
: excel_books.OleFunction("Close", (Variant)False);
: excel_sheet = Unassigned;
: excel_book = Unassigned;
: excel_app.OleFunction("Quit");
: excel_app = Unassigned;
: }