Две программы. Обе заполняют в Excel 15 тысяч ячеек. Одна написана на MSVC 6.0 с использованием ATL.
Та часть, которая заполняет:
OleInitialize(NULL);
_Application Excel;
Workbooks WorkBooks;
_Workbook book;
Worksheets Sheets;
_Worksheet Sheet;
COleVariant Cell;
CString SCell;
if(!Excel.CreateDispatch("Excel.Application"))
{
AfxMessageBox("Couldn't start Excel.");
}
else
{
//Make Excel Visible and display a message
Excel.SetVisible(TRUE);
WorkBooks=Excel.GetWorkbooks();
book=WorkBooks.Add(NOPARAM);
Sheets=book.GetWorksheets();
Sheet=Sheets.GetItem(COleVariant((short)1));
CTime start=CTime::GetCurrentTime();
m_Start.SetWindowText(start.Format("%H:%M:%S"));
for (char i='A'; i<'P';i++)
for (short j=1;j<=1000;j++)
{
SCell.Format("%c%i",i,j);
Cell=SCell;
((Range)Sheet.GetRange(Cell,Cell)).SetValue(Cell);
}
CTime stop=CTime::GetCurrentTime();
m_Stop.SetWindowText(stop.Format("%H:%M:%S"));
m_Diff.SetWindowText((stop-start).Format("%H:%M:%S"));
}
OleUninitialize();
И вторая, написана на BCB 5.0 с использованием OLE-вызовов, примеров море в интернете, приводить не буду.
Так вот... ATL-вариант делает это за 1 минуту 15 секунд, а OLE за 47 секунд, хотя, даже Inprise утверждает, что ATL круче OLE в плане новизны и правильности. Может я что-то не так сделал?
- Вы знаете — жаль, просто по-человечески жаль Памелу Андерсон, которая никогда не сможет сыграть на баяне...