• QT 操作 excel 教程


    前言:环境 win7 64位,QT4.8.5,QT Creator

    1. 在 .pro 文件中加入语句"CONFIG+=qaxcontainer";
    2. 源码如下:
       1 //main.cpp
       2 #include "mainwindow.h"
       3 #include <QApplication>
       4 #include <QtGui>
       5 #include <QWidget>
       6 #include <QAxObject>
       7 #include <QAxWidget>
       8 #include <QFileDialog>
       9 #include <QObject>
      10 #include <iostream>
      11 using namespace std;
      12 
      13 
      14 int main(int argc, char *argv[])
      15 {
      16     QApplication a(argc, argv);
      17 
      18     QString filepath=QFileDialog::getSaveFileName(NULL,QObject::tr("Save orbit"),"/untitled.xls",QObject::tr("Microsoft Office 2007 (*.xlsx)"));//获取保存路径
      19     QList<QVariant> allRowsData;//保存所有行数据
      20     allRowsData.clear();
      21 //    mLstData.append(QVariant(12));
      22     if(!filepath.isEmpty()){
      23         QAxObject *excel = new QAxObject("Excel.Application");//连接Excel控件
      24         excel->dynamicCall("SetVisible (bool Visible)",false);//不显示窗体
      25         excel->setProperty("DisplayAlerts", true);//不显示任何警告信息。如果为true那么在关闭是会出现类似“文件已修改,是否保存”的提示
      26         QAxObject *workbooks = excel->querySubObject("WorkBooks");//获取工作簿集合
      27         workbooks->dynamicCall("Add");//新建一个工作簿
      28         QAxObject *workbook = excel->querySubObject("ActiveWorkBook");//获取当前工作簿
      29         QAxObject *worksheets = workbook->querySubObject("Sheets");//获取工作表集合
      30         QAxObject *worksheet = worksheets->querySubObject("Item(int)",1);//获取工作表集合的工作表1,即sheet1
      31 
      32         for(int row = 1; row <= 1000; row++)
      33         {
      34             QList<QVariant> aRowData;//保存一行数据
      35             for(int column = 1; column <= 2; column++)
      36             {
      37                 aRowData.append(QVariant(row*column));
      38             }
      39             allRowsData.append(QVariant(aRowData));
      40         }
      41 
      42         QAxObject *range = worksheet->querySubObject("Range(const QString )", "A1:B1000");
      43         range->dynamicCall("SetValue(const QVariant&)",QVariant(allRowsData));//存储所有数据到 excel 中,批量操作,速度极快
      44         range->querySubObject("Font")->setProperty("Size", 30);//设置字号
      45 
      46         QAxObject *cell = worksheet->querySubObject("Range(QVariant, QVariant)","A1");//获取单元格
      47         cell = worksheet->querySubObject("Cells(int, int)", 1, 1);//等同于上一句
      48         cell->dynamicCall("SetValue(const QVariant&)",QVariant(123));//存储一个 int 数据到 excel 的单元格中
      49         cell->dynamicCall("SetValue(const QVariant&)",QVariant("abc"));//存储一个 string 数据到 excel 的单元格中
      50         
      51         QString str = cell->dynamicCall("Value2()").toString();//读取单元格中的值
      52         cout<<"
      The value of cell is "<<str.toStdString()<<endl;
      53         
      54         /*QAxObject *font = cell->querySubObject("Font");
      55         font->setProperty("Name", itemFont.family());  //设置单元格字体
      56         font->setProperty("Bold", itemFont.bold());  //设置单元格字体加粗
      57         font->setProperty("Size", itemFont.pixelSize());  //设置单元格字体大小
      58         font->setProperty("Italic",itemFont.italic());  //设置单元格字体斜体
      59         font->setProperty("Underline", itemFont.underline());  //设置单元格下划线
      60         font->setProperty("Color", item->foreground().color());  //设置单元格字体颜色*/
      61         worksheet->querySubObject("Range(const QString&)", "1:1")->setProperty("RowHeight", 60);//调整第一行行高
      62 
      63         workbook->dynamicCall("SaveAs(const QString&)",QDir::toNativeSeparators(filepath));//保存至filepath,注意一定要用QDir::toNativeSeparators将路径中的"/"转换为"",不然一定保存不了。
      64         workbook->dynamicCall("Close()");//关闭工作簿
      65         excel->dynamicCall("Quit()");//关闭excel
      66         delete excel;
      67         excel=NULL;
      68     }
      69     return a.exec();
      70 }

    参考资料:http://blog.csdn.net/li494816491/article/details/50274305

  • 相关阅读:
    jQuery函数继承 $.extend, $.fn.extend
    [原创]茗洋AaronYang的 jquery.myselect.js 我的一次前端突破[上]
    EasyUI 的 combotree 加载数据后折叠起来,并且只允许单击子节点的写法
    判断js数组包是否包含某个元素
    JS中 HTMLEncode和HTMLDecode
    Easyui datagrid 特殊处理,记录笔记
    easyui tab上面添加右键菜单
    第三方文本框 在div中显示预览,让指定节点不受外部css影响
    Easyui 让Window弹出居中
    C# txt格式记录时间,时间对比,决定是否更新代码记录Demo
  • 原文地址:https://www.cnblogs.com/woxinfeixiang2015/p/7677295.html
Copyright © 2020-2023  润新知