@Filin1989

Как можно реализовать открытие xlsx таблицы через QTreeWidget/View?

Добрый день. У меня такая проблемка. Стоит задача создать програмку, которая бы открывала файлы xlsx и выводила бы таблицы в виде дерева, через TreeWidget или View. В Qt я еще зелен и глуп, но задачу поставили и нужно её правдами и неправдами выполнить. Прошу помощь сообщества.
Вычитку xlsx файла я смог реализовать с помощью библиотек Qt xlsx. Но, вот как потом вытянуть считанные данные, и реализовать их вывод в дереве я уже бьюсь почти месяц. Сказывается критическая нехватка опыта, потому как это моя первая программа. Предполагаю что нужно полученные данные впихнуть в QTreeModel и потом уже вывести на экран. Но не представляю как это реализовать. Брал стандартные примеры, но так и не смог их туда пристыковать. В целом, буду крайне признателен за любой совет (кроме: "читай документацию, там всё ясно", ведь в моем случае совсем не ясно), хотя желательно выложенный в стиле для туго доходящих)
Вот пример кода, которым я вычитываю xlsx:

Document doc(fileName);
 
    int sheetIndexNumber = 0;
    foreach( QString curretnSheetName, doc.sheetNames() )
    {
        // get current sheet
        AbstractSheet* currentSheet = doc.sheet( curretnSheetName );
        if ( NULL == currentSheet )
            continue;
 
        // get full cells of current sheet
        int maxRow = -1;
        int maxCol = -1;
        currentSheet->workbook()->setActiveSheet( sheetIndexNumber );
        Worksheet* wsheet = (Worksheet*) currentSheet->workbook()->activeSheet();
        if ( NULL == wsheet )
            continue;
 
        QString strSheetName = wsheet->sheetName(); // sheet name
        qDebug() << strSheetName;
 
        QVector<CellLocation> clList = wsheet->getFullCells( &maxRow, &maxCol );
 
        QVector< QVector<QString> > cellValues;
        for (int rc = 0; rc < maxRow; rc++)
        {
            QVector<QString> tempValue;
 
            for (int cc = 0; cc < maxCol; cc++)
            {
                tempValue.push_back(QString(""));
            }
            cellValues.push_back(tempValue);
        }
 
        for ( int ic = 0; ic < clList.size(); ++ic )
        {
            CellLocation cl = clList.at(ic); // cell location
 
            int row = cl.row - 1;
            int col = cl.col - 1;
 
            QSharedPointer<Cell> ptrCell = cl.cell; // cell pointer
 
            // value of cell
            QVariant var = cl.cell.data()->value();
            QString str = var.toString();
 
            cellValues[row][col] = str;
 
        for (int rc = 0; rc < maxRow; rc++)
        {
            for (int cc = 0; cc < maxCol; cc++)
            {
                QString strCell = cellValues[rc][cc];
                qDebug() << "( row : " << rc
                         << ", col : " << cc
                         << ") " << strCell; // display cell value
            }
        }
  • Вопрос задан
  • 80 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы