Qt操作表格


一、使用QAxObject

1.环境配置

首先在Qt Modules中引入axserver;axcontainer;
在这里插入图片描述
代码中包含相关头文件#include <QAxObject>
头文件

public:
	void OpenExcel(const QString& strExcelPath);
    void AddNewExcel();
    void SaveAndClose(const QString& strExcelPath);
    int GetRowsCount();
    QString GetCell(int row, int column);
    QString GetCell(QString numer);
    void SetCell(int row, int column, QString value);
    void SetCell(QString number, QString value);
    void SetCellColor(int row, int column, QColor color);
private:
	QAxObject* m_pExcel;
    QAxObject* m_pWorkBooks;
    QAxObject* m_pWorkBook;
    QAxObject* m_pWorkSheets;
    QAxObject* m_pWorkSheet;

cpp文件

// 打开已有的excel
void MainWindow::OpenExcel(const QString & strExcelPath)
{
    // 连接excel 控件
    m_pExcel = new QAxObject("Excel.Application");
    // m_pExcel->setControl("Excel.Applicatio");

    // 设置操作excel时不打开excel窗体
    m_pExcel->dynamicCall("SetVisible(bool Visible)", false);

    // 设置不显示任何警告信息
    m_pExcel->setProperty("DisplayAlert", false);

    // 获取当前工作簿
    m_pWorkBooks = m_pExcel->querySubObject("WorkBooks");
    // 打开指定工作簿
    m_pWorkBook = m_pWorkBooks->querySubObject("Open(const QString&)", strExcelPath);

    if (m_pWorkBook)
    {
        qDebug() << "Open Excel Success!";
    }

    // 获取sheets
    m_pWorkSheets = m_pWorkBook->querySubObject("Sheets");
    // 获取某个sheet
    m_pWorkSheet = m_pWorkSheets->querySubObject("Item(int)", 1);
}

// 创建新的Excel
void MainWindow::AddNewExcel()
{
    // 获取当前工作簿
    m_pWorkBooks = m_pExcel->querySubObject("WorkBooks");

    m_pWorkBooks->dynamicCall("Add");
    m_pWorkBook = m_pExcel->querySubObject("ActiveWorkBook");
    m_pWorkSheets = m_pWorkBook->querySubObject("Sheets");
    m_pWorkSheet = m_pWorkSheets->querySubObject("Item(int)", 1);
}

// 保存并关闭Excel
void MainWindow::SaveAndClose(const QString& strExcelPath)
{
    // 保存文件,一定要将路径中的'/'转为'\\',前者只能被Qt识别
    m_pWorkBook->dynamicCall("SaveAs(const QString&)", QDir::toNativeSeparators(strExcelPath));
    // 关闭文件
    m_pWorkBook->dynamicCall("Close(Boolean)", false);
    // 关闭excel
    m_pExcel->dynamicCall("Quit()");
    delete m_pExcel;
    m_pExcel = nullptr;
}

// 获取行数
int MainWindow::GetRowsCount()
{
    int iRows = 0;
    QAxObject* pRows = m_pWorkSheet->querySubObject("Rows");
    iRows = pRows->property("Count").toInt();
    return  iRows;
}

// 获取单元格内容,行号+列号
QString MainWindow::GetCell(int row, int column)
{
    QAxObject* pCell = m_pWorkSheet->querySubObject("Range(int, int)", row, column);
    return  pCell->property("Value").toString();
}

// 获取单元格内容,单元格标号如: A1,C5
QString MainWindow::GetCell(QString number)
{
    QAxObject* pCell = m_pWorkSheet->querySubObject("Range(QString)", number);
    return  pCell->property("Value").toString();
}

// 设置单元格内容,行号+列号
void MainWindow::SetCell(int row, int column, QString value)
{
    QAxObject* pCell = m_pWorkSheet->querySubObject("Cells(int, int)", row, column);
    pCell->setProperty("Value", value);
}

// 设置单元格内容,单元格标号如: A1,C5
void MainWindow::SetCell(QString number, QString value)
{
    QAxObject* pCell = m_pWorkSheet->querySubObject("Cells(QString)", number);
    pCell->setProperty("Value", value);
}

// 设置单元格颜色的方式与设置值的方式一样,都是先获取到单元格,再设置属性
void MainWindow::SetCellColor(int row, int column, QColor color)
{
    QAxObject* pCell = m_pWorkSheet->querySubObject("Cells(int, int)", row, column);
    QAxObject* pInterior = pCell->querySubObject("Interior");
    pInterior->setProperty("Color", color);
}

二、使用QXlsx

推荐两个网站
QT 使用第三方库QtXlsx操作Excel表
Qt Xlsx使用教程
生成动态库的资源文件
QXlsx模块源文件及编译后的文件

复制编译后的文件到本地路径,参考网址:毓树麟风——Qt5下Qxlsx模块安装及使用

### 如何使用 Qt 操作 Excel 文件 #### 使用 QAxObject 进行基本操作 对于希望利用已有的 Microsoft Office 安装环境的情况,可以通过 `QAxObject` 来调用 Excel 的 COM 接口完成文件的操作。这种方式依赖于本地安装的 Microsoft Excel 应用程序。 ```cpp #include <QApplication> #include <QAxObject> int main(int argc, char *argv[]) { QApplication a(argc, argv); // 创建指向 Excel.Application 对象实例化对象 QAxObject* excel = new QAxObject("Excel.Application", nullptr); // 设置不可见模式运行 excel->setProperty("Visible", false); // 添加新的工作簿 QAxObject* workbooks = excel->querySubObject("Workbooks"); workbooks->dynamicCall("Add"); // 获取活动的工作表 QAxObject* sheet = excel->querySubObject("ActiveSheet"); // 向单元格 A1 写入 "Hello" sheet->querySubObject("Range(const QString&)", "A1")->dynamicCall("SetValue(const QVariant&)", "Hello"); // 保存文档到指定路径 excel->dynamicCall("SaveAs (const QString&)", "./example.xls"); delete excel; } ``` 此段代码展示了通过 ActiveX 封装的方式创建了一个简单的 Excel 文档并写入了字符串 “Hello”。需要注意的是这种方法仅适用于 Windows 平台,并且目标机器上需预先安装好 Microsoft Excel 软件[^1]。 #### 利用 QtXlsx 库简化开发流程 为了提高跨平台兼容性和减少对外部软件的依赖,推荐采用专门针对 XLSX 格式的开源库——QtXlsx。该库提供了更加直观简便的方法来进行 Excel 表格的数据读取与编辑。 ```cpp #include <QCoreApplication> #include "xlsxdocument.h" void writeData() { QXlsx::Document xlsx; // 插入一些测试数据 xlsx.write(1, 1, QStringLiteral("Name")); // A1 单元格 xlsx.write(1, 2, QStringLiteral("Age")); // B1 单元格 xlsx.write(2, 1, QStringLiteral("John Doe")); xlsx.write(2, 2, 30); // 另存为 .xlsx 文件 xlsx.saveAs("./output.xlsx"); } bool readData() { bool ok; int value = xlsx.read(2, 2).toInt(&ok); if (!ok || value != 30) return false; return true; } ``` 上述例子说明了怎样借助 QtXlsx 实现对 Excel 工作表的基本增删改查功能。相较于基于 ActiveX 的方案而言,这里不需要额外配置任何外部应用程序即可独立运作,在 Linux 或 macOS 上也能正常执行[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值