当前位置:   article > 正文

QT学习笔记-Excel的导入导出_qt6导入excel表

qt6导入excel表


前言

因工作需要,要实现一个小型的数据管理系统。本着想捡起来QT技能的想法,学习下QTExcel的导入导出功能,基本有两种,一种是使用AXObject,一种是使用开源的XLSX控件。


一、QAXObject简介

QAxObject是Qt提供的包装COM组件的类,通过COM操作使用QAxObject类,使用此类,需要在pro文件中添加

QT  +=  axcontainer 
  • 1

二、QAXObject使用

因此前数据库中是将数据展示在tableview,故封装好一个IO类供界面按钮槽函数使用。槽函数如下:

void CustomerManager::on_importButton_clicked()
{
   
     QString fileName = QFileDialog::getOpenFileName(this,"打开",QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation),"Excel 文件(*.xls *.xlsx)");
     m_DataIO.Open(fileName);
     m_DataIO.ReadDataToTable(ui->tableView); //导入到widget中
     m_DataIO.Close();
}
void CustomerManager::on_exportButton_clicked()
{
   
       m_DataIO.SaveDataFrTable(ui->tableView,"客户信息"); //导出到widget中
}


  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

1.包含相关头文件

#include <QAxBase>
#include <QAxObject>
  • 1
  • 2

2.声明相关变量与函数

   //使用QAxObject导出Excel
public:
    bool Open(QString xlsFile,int nSheet = 1,bool visible = false);//打开xls文件
    void Save();                                              //保存xls报表
    void Close();                                             //关闭xls报表
    bool SaveDataFrTable(QTableView *tableview,QString title);          //保存数据到xls
    bool ReadDataToTable(QTableView *tableview);          //从xls读取数据到ui
    QVariant GetCellData(int row,int column);               //获取指定单元数据
    bool     SetCellData(int row,int column,QVariant data); //修改指定单元数据
    int getRowCount() const;							  //获取行数
    int getColumnCount() const;							  //获取列数
    bool IsOpen();											  //检验
    bool IsValid();
private:
    QAxObject *pExcel;       //指向整个excel应用程序
    QAxObject *pWorkbooks;   //指向工作簿集,excel有很多工作簿
    QAxObject *pWorkbook;    //指向sXlsFile对应的工作簿
    QAxObject *pWorksheet;   //指向工作簿中的某个sheet表单
    QString   m_sXlsFile;      //xls文件路径
    int       nCurrSheet;    //当前打开的第几个sheet  
    int       nRowCount;     //行数
    int       nColumnCount;  //列数
    int       nStartRow;     //开始有数据的行下标值
    int       nStartColumn;  //开始有数据的列下标值
    bool      bIsOpen;       //是否已打开
    bool      bIsValid;      //是否有效
    bool      bIsANewFile;   //是否是一个新建xls文件,用来区分打开的excel是已存在文件还是有本类新建的
    bool      bIsSaveAlready;//防止重复保存
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

3.函数实现

bool DataIO::Open(QString xlsFile, int nSheet, bool visible)
{
   
    m_sXlsFile = xlsFile;
    bIsOpen = false;
    if (m_sXlsFile!="")
    {
   
        pExcel = new QAxObject;
        if (pExcel->setControl("Excel.Application"))				    //连接Excel控件
        {
   
            pExcel->dynamicCall("SetVisible (bool Visible)",visible);//不显示窗体
            pExcel->setProperty("DisplayAlerts", false);
            //step1:获取工作簿集合
            pWorkbooks = pExcel->querySubObject("WorkBooks");
            //step2:打开指定工作簿
            pWorkbook = pWorkbooks->querySubObject("Open(const QString&)", m_sXlsFile);
            //step3:获取当前工作表格1,即sheet1
            pWorksheet = pWorkbook->querySubObject("WorkSheets(int)", nSheet);
            //step4: 获取行数,列数
            QAxObject* usedrange = pWorksheet->querySubObject("UsedRange"); // sheet范围
            nStartRow = usedrange->property("Row").toInt(); // 起始行数
            nStartColumn = usedrange->property("Column").toInt();  // 起始列数

            QAxObject *rows, *columns;
            rows = usedrange->querySubObject("Rows");  // 行
            columns = usedrange->querySubObject("Columns");  // 列

            nRowCount = rows->property("Count").toInt(); // 行数
            nColumnCount = columns->property("Count").toInt();  // 列数
            bIsOpen = true;
        }
        else
        {
   
            QMessageBox::warning(NULL,"错误","未能创建 Excel 对象,请安装 Microsoft Excel。",QMessageBox::Apply);
        }

    }
    return bIsOpen;
}

void DataIO::Close()
{
   
    pWorkbook->dynamicCall("Close()");//关闭工作簿

    pExcel->dynamicCall("Quit()");//关闭excel
    delete pExcel;
    pExcel=NULL;
}

bool DataIO::SaveDataFrTable(QTableView *tableview, QString title)
{
   
    QString fileName = QFileDialog::getSaveFileName(tableview, "保存",QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号