|
안녕하세요 만해입니다.
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 레퍼런스 위치 아시면 좀 가르켜주세요
|