Как на C++ вывести результаты SQL-запроса в Excel?
Всем доброго времени суток! Подскажите, если кто помнит-как в старинной Visual Studio (Visual C++ 6, MFC) вывести результат SQL-запроса в Excel? Сам лист Excel формируется, разобрался с границами/цветом ячеек и прочим:
// инициализация приложения Word
_Application oAp;
oAp.CreateDispatch("Excel.Application");
if (!oAp)
{
AfxMessageBox("Невозможно запустить Excel.");
return;
}
Workbooks oBooks; //объявляем коллекцию "рабочих книг"
oBooks = oAp.GetWorkbooks(); // и получаем список книг
_Workbook oBook; //объявляем конкретный экземпляр (класс _Workbook)
oBook = oBooks.Add(vOpt); //добавляем к существующей коллекции новую книгу
Worksheets oSheets; //объявляем коллекцию "рабочих листов"
oSheets = oBook.GetWorksheets(); //и получаем список листов
_Worksheet oSheet; //объявляем конкретный экземпляр (класс _Worksheet)
Range oRange; //объявляем экземпляр класса Range, отвечающего за заполнение ячеек
Непонятно, как пробежаться по итогам запроса и построчно вывести это на лист. Вот как я формирую запрос к базе:
TRY
{
//Открываем базу данных
database.Open(NULL,false,false,sDsn);
///////////////////////////ноутбуки////////////////////////////////////////
//Формируем запрос
CRecordset recset( &database );
SqlString = "SELECT name FROM table1";
//Входим в цикл, пробегая по каждой записи
while( !recset.IsEOF() )
{
recset.GetFieldValue("name",sDeviceName);
recset.MoveNext();
}
//закрываем базу данных
recset.Close();
database.Close();
}
CATCH(CDBException, e)
{
// If a database exception occured, show error msg
AfxMessageBox("Database error: "+e->m_strError);
}
END_CATCH;
Обычно все это легко можно вывести в поле со списком, но как в этом цикле вызывать нужную строку листа Excel и вставлять туда текущее значение переменной? Заранее признателен за помощь.
Стоп, так это получается, что нужно заранее сформировать область на листе, точно указав число строк и столбцов, а потом ее раскатать по документу Excel. А если я заранее не знаю число строк из запроса? И потом - все равно не увидел, как в моем случае загнать все это в цикл прохождения по итогам SQL-запроса. В примере просто массив готовый берется и по нему идет цикл. Выходит, сначала нужно пробежать по запросу и подсчитать количество строк (записав в int-переменную), а потом еще раз этот же запрос вызвать, заполнить массив и тогда уже выбрасывать в Excel? Я думал, есть что-то более простое.
нет конечно, ты можешь брать Range на нужную ячейку и ставить ее Value по одной или лучше строчкой Документацию полистай, сам я когда то очень давно этим занимался, многое вообще делал, изучая генерируемые самим экселем максросы (когда включаешь запись макроса и делаешь действия что тебе нужны и смотришь какой код оно создало, правда на vbscript но какая разница, это COM объект везде одинаково работает)