Re[2]: Интересный факт.
От: Saddam Россия http://saddam.narod.ru
Дата: 22.09.02 10:04
Оценка:
Здравствуйте George Seryakov, Вы писали:

S>>Две программы. Обе заполняют в Excel 15 тысяч ячеек. Одна написана на MSVC 6.0 с использованием ATL.

GS>...
S>>И вторая, написана на BCB 5.0 с использованием OLE-вызовов, примеров море в интернете, приводить не буду.

GS> Нет уж, покажи цикл. Заодно и узнаем, что такое ole-вызовы.


S>>Так вот... ATL-вариант делает это за 1 минуту 15 секунд, а OLE за 47 секунд, хотя, даже Inprise утверждает, что ATL круче OLE в плане новизны и правильности. Может я что-то не так сделал?


GS> Скорее всего делается вызов разных наборов методов. Типа в одном случае диспатч, а в другом — нет. Или ранж по-разному вычисляется.

Пожалуйста...
#define PS(param) PropertySet(param)
string XlsDocument::MakeAddr(int row,int col)
{
    string cell;
    char strrow[6];
    int i,j;
    col--;
    if (col<0 || col>229 || row & 0xFFFF0000) //230 равно адресу IV (последний столбец)
        return "A1";
    if (i=col/26)       //получаем первую букву столбца
    {
        j=col%26;       //вторая буква стобца
        cell+=char('A'-1 + i);
        cell+=char('A' + j);
    }
    else                //буква столбца состоит из одного символа
        cell+=char('A' + col);
    itoa(row,strrow,10);
    cell+=strrow;
    return cell;
}
 
void XlsDocument::WriteCell(const string &cell,const string &value)
{
    Doc.Exec(PS("Range") << cell.c_str() << value.c_str());
}

//---------------------------Главный цикл
   char tmp[32];
    for (int j=1;j<16;j++)
        for(int i=1;i<1001;i++)
        {
            itoa(j,tmp,10);
            MyDoc.WriteCell(i,j,tmp);
        }
- Вы знаете — жаль, просто по-человечески жаль Памелу Андерсон, которая никогда не сможет сыграть на баяне...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.