[Qt PC] Öffnen Sie die lokale Tabellendatei und rufen Sie alle darin enthaltenen Daten ab

Vorwort
Tatsächlich sind die in diesem Artikel implementierten Funktionen nicht alle Funktionen, die Blogger implementieren möchten, sondern nur ein kleiner Teil der Gesamtfunktionen. Dies dient nur der Aufzeichnung die Implementierungsmethode und verhindern, dass sie später vergessen wird. Nur als Referenz.

1. Erkenntniseffekt

Die aktuelle Implementierung besteht darin, eine lokale Tabellendatei zu öffnen, nach dem Öffnen die Gesamtzahl der Zeilen und Spalten der Tabelle auszugeben und dann den gesamten Inhalt der Tabelle auszudrucken. Das Testformular ist wie folgt

Testformular
Die aktuelle Seite des Host-Computers sieht wie folgt aus

PC-Seite

Klicken Sie auf „Datei auswählen“, um die lokale Tabellendatei auszuwählen

Wählen Sie ein Dokument aus

Oder Sie können den Dateipfad direkt eingeben. Klicken Sie dann, um die Datei zu öffnen. Auf der Qt-Seite kann die Gesamtzahl der Zeilen und Spalten der ausgewählten Tabelle ausgegeben und der gesamte Inhalt der Tabelle ausgedruckt werden. Die Ergebnisse sind wie folgt

Ergebnisse ausgeben

2. UI-Design

Die Benutzeroberfläche verwendet nur zwei einfache Steuerelemente, die hier aufgeführt sind.

  • QPushButton
    „Datei auswählen“ und Datei öffnen verwenden Sie dieses Steuerelement.
  • QLineEdit
    Der Dateipfad verwendet dieses Steuerelement.

3. Programmierung

3.1 Lokale Tabellendatei auswählen

Die Slot-Funktion von „Datei auswählen“ ist

void Widget::on_selectfile_Button_clicked()
{
    
    
    QString fileName = QFileDialog::getOpenFileName(this,QStringLiteral("选择文件"),"F:",QStringLiteral("表格(*xls *xlsx *csv);"));

    // 将文件路径显示到UI控件
    ui->selectedfilepath_lineEdit->setText(fileName);
}

Nach Auswahl der Datei wird der Dateipfad zur Steuerung angezeigtselectedfilepath_lineEdit.

Wenn Sie einen Dateityp hinzufügen müssen, können Sie sich auf die folgenden Änderungen beziehen.

QString fileName = QFileDialog::getOpenFileName(this,QStringLiteral("选择文件"),"F:",QStringLiteral("表格(*xls *xlsx *csv);;图片(*jpg *png);"));

3.2 Ermitteln Sie die Gesamtzahl der Zeilen und Spalten der Tabelle

    QAxObject *excel = new QAxObject(this);
    excel->setControl("Excel.Application");
    excel->setProperty("Visible", false);    //显示窗体看效果,选择ture将会看到excel表格被打开
    excel->setProperty("DisplayAlerts", true);
    QAxObject *workbooks = excel->querySubObject("WorkBooks");   //获取工作簿(excel文件)集合
    QString str = ui->selectedfilepath_lineEdit->text();
    //打开选定的excel
    workbooks->dynamicCall("Open(const QString&)", str);
    QAxObject *workbook = excel->querySubObject("ActiveWorkBook");
    QAxObject *worksheet = workbook->querySubObject("WorkSheets(int)",1);

    // 获取行列数
    QAxObject *usedRange = worksheet->querySubObject("UsedRange");   //获取表格中的数据范围
    QAxObject *rows = usedRange->querySubObject("Rows");
    getrow = rows->property("Count").toInt();  //获取行数
    QAxObject *column = usedRange->querySubObject("Columns");
    getcolumn = column->property("Count").toInt();  //获取列数
    qDebug("行数为:%d   列数为:%d\n",getrow,getcolumn);

Es ist erwähnenswert, dass dieses Programm die Gesamtzahl der Zeilen und Spalten des ersten Arbeitsblatts erhält. Wenn Sie sie ändern müssen, können Sie die Parameter in dieser Funktion ändern.

QAxObject *worksheet = workbook->querySubObject("WorkSheets(int)",2);

3.3 Tabelleninhalte abrufen und ausgeben

    QVariant var = usedRange->dynamicCall("Value");   // 将所有的数据读取到QVariant容器中保存
    QList<QList<QVariant>> excel_list;   // 用于将QVariant转换为Qlist的二维数组
    QVariantList varRows=var.toList();
    if(varRows.isEmpty())
    {
    
    
        return;
    }

    const int row_count = varRows.size();
    QVariantList rowData;
    for(int i=0;i<row_count;++i)
    {
    
    
        rowData = varRows[i].toList();
        excel_list.push_back(rowData);
    }

    //打印excel数据
    for(int i = 0; i<row_count; i++)
    {
    
    
        QList<QVariant> curList = excel_list.at(i);
        int curRowCount = curList.size();
        for(int j = 0; j < curRowCount; j++)
        {
    
    
            qDebug() << curList.at(j).toString();
        }
    }

2.4 Zellinhalte manipulieren

Letztlich kommt es bei Operationstischen immer noch auf Operationszellen an. Hier ist eine Operationsmethode.

QString ExcelName = worksheet->querySubObject("Cells(int,int)",所在行数,所在列数)->dynamicCall("Value").toString();

4. Betriebsbeispiele

Die hier aufgeführten Betriebsbeispiele sind entsprechend den Anforderungen des Bloggers geschrieben. Sie dienen dazu, den Spaltenindex herauszufinden, in dem sich die Nachrichten-ID und die Nachrichtendaten befinden. Das Programm wird hier nur als Referenz veröffentlicht.

    // 遍历出报文ID和数据所属列数
    // 默认第一列为时间,不需要遍历
    for (int i = 1;i <= getcolumn;i ++)
    {
    
    
        // 遍历第一行全部内容
        ExcelName = worksheet->querySubObject("Cells(int,int)",1,i)->dynamicCall("Value").toString();

        // 查找报文ID所在列
        if (ExcelName == "MAKE_CAN_ID(HEX)")
        {
    
    
            qDebug("报文ID所在列为:%d",i);
            messageIDColumn = i;
        }

        // 查找数据所在列
        if (ExcelName == "DATA(HEX)")
        {
    
    
            qDebug("报文ID所在列为:%d",i);
            dataColumn = i;

            // 通常数据所在列在报文ID后面,所以遍历到数据所在列后直接跳出for循环
            break;
        }
    }
    qDebug("报文ID所在列为:%d   数据所在列为:%d\n",messageIDColumn,dataColumn);

Acho que você gosta

Origin blog.csdn.net/qq_45217381/article/details/133810982
Recomendado
Clasificación