QT 中使用 QTableView 和 QStandardItemModel 实现将数据导出到Excel 和 从Excel导入到 QTableView 的功能

简介

在Qt中,使用QTableViewQStandardItemModel来实现将数据导出到Excel和从Excel导入到QTableView的功能,而不使用第三方库(如QXlsx)。

效果

QT 中使用 QTableView 和 QStandardItemModel 实现将数据导出到Excel 和 从Excel导入到 QTableView 的功能_第1张图片
QT 中使用 QTableView 和 QStandardItemModel 实现将数据导出到Excel 和 从Excel导入到 QTableView 的功能_第2张图片

将 QTableView 中的数据导出到Excel

//从tableview 导出到 EXcle
void MainInterface::on_pushButton_Export_clicked()
{
    //使用 QStandardItemModel模型
    QStandardItemModel* model = static_cast<QStandardItemModel*>(ui->tableView_staffInfo->model());
    //使用 QSqlQueryModel 模型
//    QSqlQueryModel* model = static_cast(ui->tableView_staffInfo->model()); //(两种任选一种都可以)

    //给导出文件名加上当前时间
    QString filePath = QDateTime::currentDateTime().toString("../yyyy_MM_dd hh_mm_ss") + ".xls"; //项目目录的上一级目录
//    qDebug()<

    //设置文件路径
    QFile file(filePath);
    if (file.open(QIODevice::WriteOnly | QIODevice::Truncate)) {
        QTextStream out(&file);

        for (int column = 0; column < model->columnCount(); column++) {
            out << model->headerData(column, Qt::Horizontal).toString() << "\t";
        }
        out << "\n";

        for (int row = 0; row < model->rowCount(); row++) {
            for (int column = 0; column < model->columnCount(); column++) {
                QModelIndex index = model->index(row, column);
                out << model->data(index).toString() << "\t";
            }
            out << "\n";
        }

        file.close();
    }
    //提示导出完成
    QMessageBox::information(this, "提示", "导出完成。        ");
}

//这段代码将 QTableView 中的数据以制表符分隔的形式写入到Excel文件中。

从Excel导入数据到 QTableView


//从 excel导入到 tableview
void MainInterface::on_pushButton_Inport_Data_clicked()
{
    //使用 QStandardItemModel模型
    QStandardItemModel* model = new QStandardItemModel();
    ui->tableView_staffInfo->setModel(model);

//    QString filePath = "path_to_excel_file.xls";

    // 获取文件路径
    QString filePath = QFileDialog::getOpenFileName(this,
                                                    "打开的界面标题",
                                                    "C:\\Users\\18584\\Desktop\\qtcode",//默认打开目录+文件
                                                    "excel(*.xls)");//文件类型过滤
    //判断文件路径是否为空
    if(filePath.isEmpty()){
        QMessageBox::warning(this, "提示", "文件路径错误。");
        return;
    }else{

    }
    
    QFile file(filePath);
    if (file.open(QIODevice::ReadOnly)) {
        QTextStream in(&file);

        QString line = in.readLine();
        QStringList header = line.split("\t");
        model->setHorizontalHeaderLabels(header);

        while (!in.atEnd()) {
            line = in.readLine();
            QStringList data = line.split("\t");
            QList<QStandardItem*> items;
            for (int i = 0; i < data.size(); i++) {
                items.append(new QStandardItem(data.at(i)));
            }
            model->appendRow(items);
        }

        file.close();
    }
    //提示导入完成
    QMessageBox::information(this, "提示", "导入完成。        ");

}
//这段代码从Excel文件中读取数据,将表头设置为QTableView的水平表头,
//然后逐行将数据添加到QTableView中的QStandardItemModel。

其他

请注意,这种方法基于文本的导入和导出,可能无法完全保留原始的数据类型和格式。如果有特殊的数据类型需要处理,或者需要更高级的功能,推荐使用专门的Excel处理库(如QXlsx)。

你可能感兴趣的:(QT,qt,excel)