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

简介

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

效果

使用两个按钮
导出文件后的文件名是当前时间

将 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<QSqlQueryModel*>(ui->tableView_staffInfo->model()); //(两种任选一种都可以)

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

    //设置文件路径
    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)。

  • 13
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是将QTableView控件数据导出到表格和文本的完整代码: ```cpp #include <QApplication> #include <QTableView> #include <QStandardItemModel> #include <QFileDialog> #include <QTextStream> #include <QMessageBox> int main(int argc, char *argv[]) { QApplication a(argc, argv); // 创建一个QTableView控件和一个QStandardItemModel模型 QTableView tableView; QStandardItemModel model; // 设置模型的行数和列数 model.setRowCount(3); model.setColumnCount(2); // 设置表头 model.setHorizontalHeaderLabels({"姓名", "年龄"}); // 设置数据 model.setItem(0, 0, new QStandardItem("张三")); model.setItem(0, 1, new QStandardItem("18")); model.setItem(1, 0, new QStandardItem("李四")); model.setItem(1, 1, new QStandardItem("20")); model.setItem(2, 0, new QStandardItem("王五")); model.setItem(2, 1, new QStandardItem("22")); // 将模型设置给QTableView控件 tableView.setModel(&model); // 导出数据到表格 QString exportFileName = QFileDialog::getSaveFileName(nullptr, "导出表格", "", "Excel(*.xlsx)"); if (!exportFileName.isEmpty()) { // 创建一个QXlsx::Document对象 QXlsx::Document xlsx; // 获取行数和列数 int rowCount = model.rowCount(); int columnCount = model.columnCount(); // 遍历模型数据,将数据写入到QXlsx::Document对象 for (int row = 0; row < rowCount; ++row) { for (int column = 0; column < columnCount; ++column) { QModelIndex index = model.index(row, column); QString data = model.data(index).toString(); xlsx.write(row + 1, column + 1, data); } } // 保存文件 xlsx.saveAs(exportFileName); } // 导出数据到文本 exportFileName = QFileDialog::getSaveFileName(nullptr, "导出文本", "", "Text(*.txt)"); if (!exportFileName.isEmpty()) { // 创建一个输出文件流 QFile file(exportFileName); if (file.open(QIODevice::WriteOnly | QIODevice::Text)) { QTextStream out(&file); // 获取行数和列数 int rowCount = model.rowCount(); int columnCount = model.columnCount(); // 遍历模型数据,将数据写入到输出文件流 for (int row = 0; row < rowCount; ++row) { for (int column = 0; column < columnCount; ++column) { QModelIndex index = model.index(row, column); QString data = model.data(index).toString(); out << data << "\t"; } out << "\n"; } // 关闭文件 file.close(); QMessageBox::information(nullptr, "提示", "导出成功!"); } else { QMessageBox::critical(nullptr, "错误", "文件打开失败!"); } } tableView.show(); return a.exec(); } ``` 在这个例子,我们使用QTableView控件和QStandardItemModel模型来展示数据。我们通过设置模型的行数和列数,以及设置表头和数据来填充模型。然后,我们将模型设置给QTableView控件,以便在GUI显示数据。 我们使用QFileDialog来获取导出文件的路径和名称。对于导出到表格,我们使用了QXlsx::Document对象来创建一个Excel文件,并将模型数据写入到该文件。对于导出到文本,我们使用了QFile和QTextStream来创建一个输出文件流,并将模型数据写入到该输出文件流。最后,我们关闭文件并显示一个消息框来提示用户导出成功或失败。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值