Qt导出数据到EXCEL的两种方式 (*****)

目录

Qt如何将数据保存成CSV文件(*****)

Qt Tablewidget表格数据的导出和导入

Qt导出数据到EXCEL的两种方式

QT将QTableWidget数据保存至Excel

Qt Tablewidget表格数据导出到 .csv文件 (*****)(测试 OK)

-------------------------------------------

直接保存为  csv文件,可在 excel中打开,简单方便。

=========================

Qt Tablewidget表格数据的导出和导入 (*****)

https://blog.csdn.net/Fdog_/article/details/113740960

前期准备:

pro文件加入
QT += axcontainer

在头文件加入#include<ActiveQt/QAxObject>

网上还有写#include

版本不同,可能代码写法不同,自己测试。

一. xls/xlsx文件数据导入TableWidget表格

我们右击导入按钮,转到槽,添加被点击后的代码

QString strData;
void MainWindow::on_pushButton_17_clicked()
{
	//首先我们需要创建一个文件选择对话框
    QString curPash =QDir::currentPath(); //获取当前路径
    QString dlgTitle="选择表格文件";
    //xls和xlsx格式的文件都可以,xlsx兼容xls,注意每一种类型后面要加两个分号
    QString filter="表格文件(*.xls *.xlsx);;xls文件(*.xls);;xlsx文件(*.xlsx);;所有文件(*.*)";
    //创建文件选择对话框
    QStringList fileList = QFileDialog::getOpenFileNames(this,dlgTitle,curPash,filter);
    if(fileList.count()<1)
        return;
    for(int i = 0;i<fileList.count();i++)
    {
    	//保存文件地址
        strData = fileList.at(i);
    }
    //连接Excel控件
    QAxObject excel("Excel.Application");
    //不显示任何警告信息
    excel.setProperty("Visible",false);
    //获取工作簿集合
    QAxObject *workbooks = excel.querySubObject("WorkBooks");
    workbooks->dynamicCall("Open (const QString&)",str);
    //获取活动工作簿
    QAxObject *workbook = excel.querySubObject("ActiveWorkBook");
    //获取工作表集合的工作表1,即sheet1
    QAxObject *worksheet = workbook->querySubObject("Sheets(int)",1);
    QAxObject *range; //获取cell的值
    QString strVal="hull";
    QStringList header;
    //设置初始表格行列都为0
    ui->tableWidget->setRowCount(0); //设置行数为0
    ui->tableWidget->setColumnCount(0); //设置列数为0

    int count =0;
    for(int i = 1;i<row;i++)
    {
    	//注意setRowCount里面的函数不是追加,而是总数,很多人最开始都把这个函数以为是总数,造成程序经常崩溃
        ui->tableWidget->setRowCount(ui->tableWidget->rowCount()+1);
        for(int j = 1;j<column;j++)
        {
            if(i == 1)
            {
                ui->tableWidget->setColumnCount(ui->tableWidget->columnCount()+1);
                range = worksheet->querySubObject("Cells(int,int)",i,j); //获取cell的值
                strVal = range->dynamicCall("Value2()").toString();
                header<<strVal;
                //设置表格头
            }
            else
            {
                probar->setValue(++count);
                range = worksheet->querySubObject("Cells(int,int)",i,j); //获取cell的值
                strVal = range->dynamicCall("Value2()").toString();
                ui->tableWidget->setItem(i-2,j-1,new QTableWidgetItem(strVal));
            }
        }
        if(i == 1)
        {
            ui->tableWidget->setHorizontalHeaderLabels(header);
        }
    }
    ui->tableWidget->setRowCount(ui->tableWidget->rowCount()-1);
    }
}

二. tableWidget表格数据导出为xls/xlsx文件

我们右击导入按钮,转到槽,添加被点击后的代码

void MainWindow::on_pushButton_23_clicked()
{
    //获取保存路径
       QString filepath=QFileDialog::getSaveFileName(this,tr("Save"),".",tr(" (*.xlsx)"));
       if(!filepath.isEmpty()){
           QAxObject *excel = new QAxObject(this);
           //连接Excel控件
           excel->setControl("Excel.Application");
           //不显示窗体
           excel->dynamicCall("SetVisible (bool Visible)","false");
           //不显示任何警告信息。如果为true那么在关闭是会出现类似“文件已修改,是否保存”的提示
           excel->setProperty("DisplayAlerts", false);
           //获取工作簿集合
           QAxObject *workbooks = excel->querySubObject("WorkBooks");
           //新建一个工作簿
           workbooks->dynamicCall("Add");
           //获取当前工作簿
           QAxObject *workbook = excel->querySubObject("ActiveWorkBook");
           //获取工作表集合
           QAxObject *worksheets = workbook->querySubObject("Sheets");
           //获取工作表集合的工作表1,即sheet1
           QAxObject *worksheet = worksheets->querySubObject("Item(int)",1);
           //设置表头值
           for(int i=1;i<ui->tableWidget->columnCount()+1;i++)
           {
               //设置设置某行某列
               QAxObject *Range = worksheet->querySubObject("Cells(int,int)", 1, i);
               Range->dynamicCall("SetValue(const QString &)",ui->tableWidget->horizontalHeaderItem(i-1)->text());
           }
           //设置表格数据
           for(int i = 1;i<ui->tableWidget->rowCount()+1;i++)
           {
               for(int j = 1;j<ui->tableWidget->columnCount()+1;j++)
               {
                   QAxObject *Range = worksheet->querySubObject("Cells(int,int)", i+1, j);
                   Range->dynamicCall("SetValue(const QString &)",ui->tableWidget->item(i-1,j-1)->data(Qt::DisplayRole).toString());
               }
           }
           workbook->dynamicCall("SaveAs(const QString&)",QDir::toNativeSeparators(filepath));//保存至filepath
           workbook->dynamicCall("Close()");//关闭工作簿
           excel->dynamicCall("Quit()");//关闭excel
           delete excel;
           excel=NULL;
           qDebug() << "\n导出成功啦!!!";
       }
}

Qt如何将数据保存成CSV文件

一、csv文件

csv文件是逗号分隔值(Comma-Separated Values,CSV)文件的缩写,其文件以纯文本形式存储表格数据(数字和文本),各个字段用逗号进行分割,采用回车进行换行。由于采用纯文本记录,csv文件可以很方便的被文本处理工具、excel等工具识别。
二、Qt中导出csv文件

在Qt中打开与保存csv文件十分方便,直接按照普通文本的形式操作,用QTextStream进行标准化的读写,还是很简单。

具体例如:(测试 OK)

#include <QFileDialog>
#include <QDateTime>
#include <QTextStream>

        

void MainWindow::on_pushButton_clicked()
{
    //1.选择导出的csv文件保存路径
    QString csvFile = QFileDialog::getExistingDirectory(this);
    if(csvFile.isEmpty())
        return;
    
    //2.文件名采用系统时间戳生成唯一的文件
    QDateTime current_date_time =QDateTime::currentDateTime();
    QString current_date =current_date_time.toString("yyyy_MM_dd_hh_mm_ss");
    //csvFile += tr("/%1_DTUConfigInfo_export_%2.csv").arg(username).arg(current_date);
    csvFile += tr("/DTUConfigInfo_export_%2.csv").arg(current_date);
    
    
    //3.用QFile打开.csv文件 如果不存在则会自动新建一个新的文件
    QFile file(csvFile);
    if ( file.exists())
    {
        //如果文件存在执行的操作,此处为空,因为文件不可能存在
    }
    file.open( QIODevice::ReadWrite | QIODevice::Text );
    statusBar()->showMessage(tr("正在导出数据。。。。。。"));
    QTextStream out(&file);
    
    //4.获取数据 创建第一行
    out<<tr("UID,")<<tr("sysID,")<<tr("UsrID,")<<tr("MeterNum,")<<tr("CMD,\n");//表头
    //其他数据可按照这种方式进行添加即可
    
    //5.写完数据需要关闭文件
    file.close();   
}

————————————————
版权声明:本文为CSDN博主「jianwang16」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u010058695/article/details/100155906

Qt导出数据到EXCEL的两种方式

https://blog.csdn.net/hmwz0001/article/details/119318881

QT将QTableWidget数据保存至Excel

https://blog.csdn.net/weixin_46146288/article/details/107879538

Qt Tablewidget表格数据导出到 .csv文件 :(测试 OK)

#include <QFileDialog>
#include <QTextStream>
#include <iostream>

//显示所选表所有内容
void MainWindow::on_pushButton_clicked()
{
    /
     初始化:最好放在 构造函数中执行?
    for(int row = 0; row < 4; row++)
    {
        for(int col = 0; col < 3; col++)
        {
            if(ui->tableWidget->item(row,col)==nullptr || ui->tableWidget->item(row,col)->text().isEmpty())
            {
                ui->tableWidget->setItem(row,col,new QTableWidgetItem);
                //...
            }
        }
    }
/
     方法1:获取创建的csv文件名
    QString fileName = QFileDialog::getSaveFileName(this, tr("Excel file"), qApp->applicationDirPath (),

                                                    tr("Files (*.csv)"));
    if (fileName.isEmpty())
        return;

    //打开.csv文件
    QFile file(fileName);
    if(!file.open(QIODevice::WriteOnly | QIODevice::Text))
    {
        std::cerr << "Cannot open file for writing: "
                  << qPrintable(file.errorString()) << std::endl;
        return;
    }
    QTextStream out(&file);

/
//     方法2: 打开指定的 .csv文件
//    QFile file("200000.csv");
//    if(!file.open(QIODevice::WriteOnly | QIODevice::Text))
//    {
//        qDebug()<<"Cannot open file for writing";
//        return;
//    }
//    QTextStream out(&file);

     创建表头
    out << tr("信息,") << tr("数字,") <<"\n";

    QString string;
    //写入内容
    for(int i = 0; i < 4; i++)
    {
        //             QString string = ui->tableWidget->item(i, col)->text();
        //             out << "test" << "," << i << "\n";

        for(int col = 0; col < 3; col++)

        {
            string ="";
            string = ui->tableWidget->item(i, col)->text();
             下面语句,可以直接访问,不需要执行ui->tableWidget->setItem(row,col,new QTableWidgetItem);
            /// 但还不知道是否有其他的副作用。
            //string = ui->tableWidget->model()->index(i, col).data().toString();

            out << string << ","; // 写入文件
            //out << "\n";
        }
        out << "\n";
    }
    //关闭文件
    file.close();
}

CSV(逗号分隔值文件格式)_百度百科

Qt中csv文件的导入与导出

CSV

1.简介:

  全称:Comma Separated Values。

  是“逗号分隔值”的英文缩写,通常是纯文本文件,一般用wordWPS或是记事本打开。

2.规则:

(1)开头不留空,以行为单位。

(2)可含或不含列名,含列名则居文件第一行。

(3)一行数据部跨行,无空行。

(4)以半角逗号作分隔符,列为空也要表达其存在。

(5)列内容如存在半角逗号(即,)则用半角引号(即"")将该字段值包含起来。内容如存在半角逗号(即,)则用半角引号(即"")将该字段值包含起来。

(6)列内容如存在半角引号(即")则应替换成半角双引号("")转义,并用半角引号(即"")将该字段值包含起来。

(7)文件读写时引号,逗号操作规则互逆。

(8)内码格式不限,可为 ASCII、Unicode 或者其他。

(9)不支持特殊字符
————————————————
版权声明:本文为CSDN博主「岁小草」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/mingxia_sui/article/details/7683030

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值