Qt操作Excel(其他Office同理)

首先说说方法

  1. 阅读Microsoft Excel 开发人员参考手册
  2. 终极方法: 录制宏 看宏代码 模仿操作

记录一些操作

QAxObject *excel = new QAxObject();
QAxObject *work_books;
QAxObject *work_book;
QAxObject *work_sheets;
QAxObject *work_sheet;
QAxObject *work_cell;
QAxObject *obj;

if (excel->setControl("Excel.Application")) {   // 使用office
    LI << "使用Office";
} else if (excel->setControl("ket.Application")) {  // 使用WPS
    LI << "使用WPS";
} else {
    QMessageBox::warning(this, tr("错误"), tr("未安装Office或WPS"));
    return;
}
excel->setProperty("Visible", true);    // 设置为可见
work_books = excel->querySubObject("WorkBooks");    // 操作表
work_books->dynamicCall("Add"); // 新建表格
excel->setProperty("Caption", "新建")) {  // 设置主窗口标题栏中显示的名称
work_book = excel->querySubObject("ActiveWorkBook");
//work_book = work_books->querySubObject("Open(const QString&)", QDir::toNativeSeparators(template_path + template_name)); // 打开文件
work_sheets = work_book->querySubObject("Sheets");
work_sheet = work_sheets->querySubObject("Item(int)", 1);
work_sheet->setProperty("Name", "Datas");  //设置工作表名称

QVariantList table; // 区域数据
QVariantList line;  // 区域数据的某行
table << QVariant(line);    // 将一行放入区域数据

QString range = QStringLiteral("%1%2:%3%4").arg(Util::excelHCalc(1)).arg(1).arg(Util::excelHCalc(10)).arg(10);  // A1:J10
work_cell = work_sheet->querySubObject("Range(const QString&)", range); // 获取区域
work_cell->setProperty("Value", QVariant(table));   // 填入区域数据
obj = work_cell->querySubObject("Font");    // 获取字体属性
obj->setProperty("Name", "新宋体");    // 设置字体
obj->setProperty("Size", "12"); // 设置字号
delete obj;
obj = work_cell->querySubObject("Interior");    // 获取单元格
obj->setProperty("Color", color);   // 设置单元格颜色
delete obj;
delete work_cell;
work_cell = Q_NULLPTR;

// 冻结首行
excel->setControl("Excel.Application")
t = excel->querySubObject("ActiveWindow");
t->setProperty("SplitColumn", 0);
t->setProperty("SplitRow", 1);
t->setProperty("FreezePanes", true);
delete t;

work_book->dynamicCall("SaveAs(const QString&)", QDir::toNativeSeparators("路径"));   // 另存为
//excel->dynamicCall("Quit(void)"); // 关闭excel

// 一定要记得删除 不然一直在后台运行 占用内存
delete work_sheet; work_sheet = Q_NULLPTR;
delete work_sheets; work_sheets = Q_NULLPTR;
delete work_book; work_book = Q_NULLPTR;
delete work_books; work_books = Q_NULLPTR;
delete excel; excel = Q_NULLPTR;

本文作者:vanxkr

本文链接:http://www.vanxkr.com/2022/4/Qt-Excel

版权声明:本博客所有文章除特别声明外,均采用CC BY-NC-SA 3.0许可协议。转载请注明出处!

Git学习笔记
1 条评论
  1. author
    2022-10-20 11:39:28
    liu

    您好!想请教一下qt是否可以直接调用excel自定义宏呢?我想qt传给excel数据,但是不立马显示,等到我在excel中操作一些步骤再显示,不知您能否给个思路,谢谢了。

已登录,注销 取消