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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: чтение данных из файла excel  (Прочитано 9979 раз)
Eugene1911
Гость
« : Март 12, 2014, 15:18 »

Здравствуйте Улыбающийся
Подскажите, пожалуйста, как считать данные из таблицы в excel'e. Там записаны целые числа, мне нужно записать их в массив.
Пробовал сделать так:
Код:
    QFile file("c://qt_workspace//read//file.xlsx");
    if (!file.open(QIODevice::ReadOnly)) return 0;
    QTextStream stream(&file);
    while(!stream.atEnd())
    {
        mas1.append(stream.readLine());
    }
Но вместо чисел в массив записываются непонятные символы)
Что я делаю не так?)
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #1 : Март 12, 2014, 15:53 »

для начала тебе надо почитать про формат xlsx

либо экспортируй таблицу в csv, это обычный текстовый формат
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Eugene1911
Гость
« Ответ #2 : Март 12, 2014, 16:03 »

Перевел в csv, потом начал выводить на экран первые 6 значений таблицы с помощью cout:

Код:
    cout<<mas1[0]<<mas1[1]<<mas1[2]<<mas1[3]<<mas1[4]<<mas1[5];

Первые два числа вывелись правильно, остальные не выводятся
« Последнее редактирование: Март 12, 2014, 16:12 от Eugene1911 » Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #3 : Март 12, 2014, 16:34 »

значит ты mas1 заполнил значениями неправильно
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
panAlexey
Гипер активный житель
*****
Offline Offline

Сообщений: 864

Акцио ЗАРПЛАТА!!!!! :(


Просмотр профиля
« Ответ #4 : Март 12, 2014, 16:45 »

Как-то так...
Код:
        QString ffName = ui->le_DataFile->text();
        updateState(QString::fromUtf8("Начинаем обработку файла: %1").arg(ffName));
        ui->progressBar->setValue(0);
        QAxObject* excel = new QAxObject( "Excel.Application", 0 );
        QAxBase* workbooks = excel->querySubObject( "Workbooks" );
        QAxBase* workbook = workbooks->querySubObject( "Open(const QString&)",ffName /* "C:\\Users\\LocalDev\\teste.xls" */);
        QAxBase* sheets = workbook->querySubObject( "Worksheets" );

        QAxBase* vMainSheet = sheets->querySubObject( "Item( int )", 1 );
        int vAllStringCntr = 0;
        int vAllColumnCntr = 0;
        QAxObject *usedRange = 0;
        if (vMainSheet){
            usedRange = vMainSheet->querySubObject("Cells( int, int)",1,1);
            if (usedRange) {
                QAxObject *specialCell = usedRange->querySubObject("SpecialCells(int)", 11);
                if(specialCell){
                    vAllStringCntr = specialCell->property("Row").toInt();
                    vAllColumnCntr = specialCell->property("Column").toInt();
                    delete specialCell;
                }
            }
for(int CNTR_Str = 1; CNTR_Str<= vAllStringCntr; CNTR_Str++){
bool processRow = false;
if (CNTR_Str == 1){
for(int cntCols = 1; cntCols <= vAllColumnCntr; cntCols++ ){
usedRange = vMainSheet->querySubObject("Cells( int, int)",CNTR_Str,cntCols);
if (usedRange) {
vVal = usedRange->property("Value");
}
}
}
}
        }

Записан

Win Xp SP-2, Qt4.3.4/MinGW. http://trdm.1gb.ru/
Eugene1911
Гость
« Ответ #5 : Март 17, 2014, 20:13 »

Большое спасибо за советы, разобрался Улыбающийся
В итоге сделал немного по другому) Считать надо было по столбцам(1 столбец = 1 массив)
В итоге сделал так:
Код:
int main(int argc, char *argv[])
{
    QString strVal;
    const char* cp = "Range(B25)";
    int i;
    QVector<float> mas;

    QApplication a(argc, argv);
    QAxWidget excel("Excel.Application");

    excel.setProperty("Visible", false);
//окрываю файл
    QAxObject *workbooks = excel.querySubObject("WorkBooks");
    workbooks->dynamicCall("Open (const QString&)", "c:\\qt_projects\\read\\file1.xls");
    QAxObject *workbook = excel.querySubObject("ActiveWorkBook");

    QAxObject *worksheet = workbook->querySubObject("Worksheets(int)", 1);

    for(i=2; i<=50; i++){//считываю информацию из 3 столбца файла
        QAxObject* cell = worksheet->querySubObject("Cells(QVariant,QVariant)", i, 3);
        QVariant vv = cell->property("Value");
        float ss = vv.toFloat() ;
        mas.append(ss);
   }

   // close the excel file
   excel.dynamicCall("Quit (void)");
   return(0);
}
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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