Russian Qt Forum
Ноябрь 01, 2024, 04:29 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Список листов в excel  (Прочитано 12547 раз)
PunX
Гость
« : Сентябрь 10, 2010, 11:11 »

Здравствуйте, появилась необходимость получить весь список листов в файле excel, подскажите пожалуйста как это можно сделать?
Записан
Denjs
Гость
« Ответ #1 : Сентябрь 10, 2010, 14:19 »

телепатирую:будем считать что вы работаете под вендой и ексель у вас установлен. так?

Я бы начал смотреть описания COM-объектов екселя. Боюсь, что в разных екселях оно может быть немного по разному.

Для доступа к ком-объекту вроде как используют
Код:
QAxObject("Excel.Application", 0);
Записан
Andrey.D
Гость
« Ответ #2 : Сентябрь 10, 2010, 21:57 »

Как устанавливать соединение с объектом Excel я знаю, но пока в том и проблема что не могу найти метод как получить список (массив) листов "Книги" excel.
Записан
merke
Гость
« Ответ #3 : Сентябрь 11, 2010, 11:17 »


Узнать количество листов в книге можно в цикле по коллекции Workbook.Sheets. Количество листов — свойство Sheets.Count. Имя листа — свойство Worksheet.Name.
Записан
merke
Гость
« Ответ #4 : Сентябрь 11, 2010, 11:20 »

Пример на VB но думую не составит трудности перевести его на кути

Код
Visual Basic
Dim sh As Worksheet
For i = 1 in objExcel.Worksheets.Count
   objExcel.Worksheets(i).Activate 'Активируем лист
Next i
Записан
JayFOX
Гость
« Ответ #5 : Сентябрь 11, 2010, 18:08 »

Код:
QStringList getSheetsNames(const QString &fileName)
{
    //открываем книгу и лист
    QAxObject* excel = new QAxObject("Excel.Application", 0); //получаем указатьтель на excel

    QAxObject *workbooks = excel->querySubObject("Workbooks"); //получаем указатель на список книг
    QAxObject *workbook  = workbooks->querySubObject("Open(const QString&)", fileName); // открываем файл с диска с уже созданным документом Excel и получаем указатель на книгу

    QAxObject* sheets = excel->querySubObject("Worksheets");
    int sheetsCount = sheets->dynamicCall("Count").toInt();

    QStringList list;
    for (int i=1;i<sheetsCount+1;i++)
    {
        QAxObject* sheetNames=sheets->querySubObject("Item(const QVariant&)",QVariant(i));
        list<<sheetNames->dynamicCall("Name").toString().toLower();
        delete sheetNames;
    }
    //Сохраняя изменения
    QVariantList params;
    params << 0;
    params << QVariant();
    params << QVariant();
    workbook->dynamicCall("Close(QVariant, QVariant, QVariant)", params);
    delete sheets;
    delete workbook;
    delete workbooks;
    delete excel;

    return list;
}
Записан
Andrey.D
Гость
« Ответ #6 : Сентябрь 11, 2010, 19:15 »

Большое спасибо, очень помогло!
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.1 секунд. Запросов: 21.