欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    Qt下Excel操作(8页).doc

    • 资源ID:35400218       资源大小:152.50KB        全文页数:8页
    • 资源格式: DOC        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    Qt下Excel操作(8页).doc

    -Qt下Excel操作-第 8 页Qt之操作Excel  (2013-12-06 13:57:20)转载标签: qt qaxobject qt操作excel qtvba excelvba分类: Qt    Visual Basic for Applications(VBA)是一种Visual Basic的一种宏语言,主要能用来扩展Windows的应用程式功能,特别是Microsoft Office软件。也可说是一种应用程式视觉化的Basic Script。1994年发行的版本中,即具备了VBA的宏功能。    在VBA的参考手册中就可以看到具体函数、属性的用法,Qt操作Excel主要通过 QAxObject + Excel VBA来实现!    关于Qt对Excel的操作,网上的资料挺多的,但大多数都是比较基础的,关于插入工作表(至最后一行)、删除工作表、合并/拆分单元格、设置单元格背景色、设置单元格边框色、设置单元格字体(类型、大小、加粗、斜体、下划线、颜色等)、以及设置单元格对齐方式等用法都没有怎么提到,今天就总结一下有关Qt对Excel的操作。    Qt操作Excel,无论后缀是xls还是xlsx都可以。    如下,是我下载的一个Excel VBA参考手册,内容不算太全!Excel读取    为了便于测试,假设已存在一个excel文件,操作内容已经被红色标记出来。如下所示:主要读取内容:· 标题· 工作表数目· 工作表名称· 起始行· 起始列· 行数· 列数· 单元格内容代码如下:QAxObject excel("Excel.Application");  excel.setProperty("Visible", true);  QAxObject *work_books = excel.querySubObject("WorkBooks");  work_books->dynamicCall("Open (const QString&)", QString("E:/test.xlsx");QVariant title_value = excel.property("Caption");  /获取标题qDebug()<<QString("excel title : ")<<title_value;  QAxObject *work_book = excel.querySubObject("ActiveWorkBook");  QAxObject *work_sheets = work_book->querySubObject("Sheets");  /Sheets也可换用WorkSheetsint sheet_count = work_sheets->property("Count").toInt();  /获取工作表数目qDebug()<<QString("sheet count : ")<<sheet_count;  for(int i=1; i<=sheet_count; i+)  QAxObject *work_sheet = work_book->querySubObject("Sheets(int)", i);  /Sheets(int)也可换用Worksheets(int)QString work_sheet_name = work_sheet->property("Name").toString();  /获取工作表名称QString message = QString("sheet ")+QString:number(i, 10)+ QString(" name");qDebug()<<message<<work_sheet_name;  if(sheet_count > 0)QAxObject *work_sheet = work_book->querySubObject("Sheets(int)", 1);  QAxObject *used_range = work_sheet->querySubObject("UsedRange");  QAxObject *rows = used_range->querySubObject("Rows");  QAxObject *columns = used_range->querySubObject("Columns");  int row_start = used_range->property("Row").toInt();  /获取起始行   int column_start = used_range->property("Column").toInt();  /获取起始列int row_count = rows->property("Count").toInt();  /获取行数int column_count = columns->property("Count").toInt();  /获取列数for(int i=row_start; ifor(int j=column_start; jQAxObject *cell = work_sheet->querySubObject("Cells(int,int)", i, j);  QVariant cell_value = cell->property("Value");  /获取单元格内容QString message = QString("row-")+QString:number(i, 10)+QString("-column-")+QString:number(j, 10)+QString(":");qDebug()<<message<<cell_value;  效果如下:Excel增、删、改主要操作:· 设置标题· 插入工作表(至最后一行)· 设置工作表名称· 删除工作表· 设置单元格内容· 设置单元格字体(类型、大小、加粗、斜体、下划线、颜色等)· 设置单元格对齐方式· 设置单元格高度、宽度· 设置单元格背景色、边框色· 合并/拆分单元格· 清空单元格代码如下:QAxObject excel("Excel.Application");  excel.setProperty("Visible", true);  QAxObject *work_books = excel.querySubObject("WorkBooks");  work_books->dynamicCall("Open(const QString&)", "E:test.xlsx");excel.setProperty("Caption", "Qt Excel");QAxObject *work_book = excel.querySubObject("ActiveWorkBook");  QAxObject *work_sheets = work_book->querySubObject("Sheets");  /Sheets也可换用WorkSheets/删除工作表(删除第一个)QAxObject *first_sheet = work_sheets->querySubObject("Item(int)", 1);first_sheet->dynamicCall("delete");/插入工作表(插入至最后一行)int sheet_count = work_sheets->property("Count").toInt();  /获取工作表数目QAxObject *last_sheet = work_sheets->querySubObject("Item(int)", sheet_count);QAxObject *work_sheet = work_sheets->querySubObject("Add(QVariant)", last_sheet->asVariant();last_sheet->dynamicCall("Move(QVariant)", work_sheet->asVariant();work_sheet->setProperty("Name", "Qt Sheet");  /设置工作表名称/操作单元格(第2行第2列)QAxObject *cell = work_sheet->querySubObject("Cells(int,int)", 2, 2);cell->setProperty("Value", "Java C+ C# PHP Perl Python Delphi Ruby");  /设置单元格值cell->setProperty("RowHeight", 50);  /设置单元格行高cell->setProperty("ColumnWidth", 30);  /设置单元格列宽cell->setProperty("HorizontalAlignment", -4108); /左对齐(xlLeft):-4131  居中(xlCenter):-4108  右对齐(xlRight):-4152cell->setProperty("VerticalAlignment", -4108);  /上对齐(xlTop)-4160 居中(xlCenter):-4108  下对齐(xlBottom):-4107cell->setProperty("WrapText", true);  /内容过多,自动换行/cell->dynamicCall("ClearContents()");  /清空单元格内容QAxObject* interior = cell->querySubObject("Interior");interior->setProperty("Color", QColor(0, 255, 0);   /设置单元格背景色(绿色)QAxObject* border = cell->querySubObject("Borders"); border->setProperty("Color", QColor(0, 0, 255);   /设置单元格边框色(蓝色)QAxObject *font = cell->querySubObject("Font");  /获取单元格字体font->setProperty("Name", QStringLiteral("华文彩云");  /设置单元格字体font->setProperty("Bold", true);  /设置单元格字体加粗font->setProperty("Size", 20);  /设置单元格字体大小font->setProperty("Italic", true);  /设置单元格字体斜体font->setProperty("Underline", 2);  /设置单元格下划线font->setProperty("Color", QColor(255, 0, 0);  /设置单元格字体颜色(红色)/设置单元格内容,并合并单元格(第5行第3列-第8行第5列)QAxObject *cell_5_6 = work_sheet->querySubObject("Cells(int,int)", 5, 3);cell_5_6->setProperty("Value", "Java");  /设置单元格值QAxObject *cell_8_5 = work_sheet->querySubObject("Cells(int,int)", 8, 5);cell_8_5->setProperty("Value", "C+");QString merge_cell;merge_cell.append(QChar(3 - 1 + 'A');  /初始列merge_cell.append(QString:number(5);  /初始行merge_cell.append(":");merge_cell.append(QChar(5 - 1 + 'A');  /终止列merge_cell.append(QString:number(8);  /终止行QAxObject *merge_range = work_sheet->querySubObject("Range(const QString&)", merge_cell);merge_range->setProperty("HorizontalAlignment", -4108);merge_range->setProperty("VerticalAlignment", -4108);merge_range->setProperty("WrapText", true);merge_range->setProperty("MergeCells", true);  /合并单元格/merge_range->setProperty("MergeCells", false);  /拆分单元格/work_book->dynamicCall("Save()");  /保存文件(为了对比test与下面的test2文件,这里不做保存操作) work_book->dynamicCall("SaveAs(const QString&)", "E:test2.xlsx");  /另存为另一个文件 work_book->dynamicCall("Close(Boolean)", false);  /关闭文件excel.dynamicCall("Quit(void)");  /退出效果如下:操作前:操作后:    到这里很多人也许都在纳闷,单元格的宏怎么获取的?比如对齐方式(居中对齐),为什么值是-4108,而不是其他值呢?当然那不是我随便写的,自己可以录制宏,然后跟踪。看下图:如上所讲,已经基本可以满足常用的操作,如有更多专业需求,请参考Excel VBA.· Excel Object Model Reference. 最近写程序中需要将数据输出保存到Excel文件中。翻看C+ GUI Programming with Qt 4(Second Edition)发现可以在Qt中运用ActiveX控件,这真是太好了。        看了很久教程也没有学会,毕竟是新手,平时也没学过ActiveX编程。一些在VB中可以方便使用的函数在Qt中都没法儿运行。网上的方法也很多解决不了问题,还会报错。也许是版本问题吧,Qt都更新了好几次了。所以只好自己多试几次。经过摸索我的方法如下:首先在.pro文件中添加CONFIG += qaxcontainer接着程序实现cpp view plaincopy1. QString filepath=QFileDialog:getSaveFileName(this,tr("Save orbit"),".",tr("Microsoft Office 2007 (*.xlsx)");/获取保存路径  2.     if(!filepath.isEmpty()  3.         QAxObject *excel = new QAxObject(this);  4.         excel->setControl("Excel.Application");/连接Excel控件  5.         excel->dynamicCall("SetVisible (bool Visible)","false");/不显示窗体  6.         excel->setProperty("DisplayAlerts", false);/不显示任何警告信息。如果为true那么在关闭是会出现类似“文件已修改,是否保存”的提示  7.         QAxObject *workbooks = excel->querySubObject("WorkBooks");/获取工作簿集合  8.         workbooks->dynamicCall("Add");/新建一个工作簿  9.         QAxObject *workbook = excel->querySubObject("ActiveWorkBook");/获取当前工作簿  10.         QAxObject *worksheets = workbook->querySubObject("Sheets");/获取工作表集合  11.         QAxObject *worksheet = worksheets->querySubObject("Item(int)",1);/获取工作表集合的工作表1,即sheet1  12.         QAxObject *cellX,*cellY;  13.         for(int i=0;i<curRow;i+)  14.             QString X="A"+QString:number(i+1);/设置要操作的单元格,如A1  15.             QString Y="B"+QString:number(i+1);  16.             cellX = worksheet->querySubObject("Range(QVariant, QVariant)",X);/获取单元格  17.             cellY = worksheet->querySubObject("Range(QVariant, QVariant)",Y);  18.             cellX->dynamicCall("SetValue(const QVariant&)",QVariant(ui->tableWidget->formula(i,0).toInt();/设置单元格的值  19.             cellY->dynamicCall("SetValue(const QVariant&)",QVariant(ui->tableWidget->formula(i,1).toInt();  20.         workbook->dynamicCall("SaveAs(const QString&)",QDir:toNativeSeparators(filepath);/保存至filepath,注意一定要用QDir:toNativeSeparators将路径中的"/"转换为"",不然一定保存不了。  21.         workbook->dynamicCall("Close()");/关闭工作簿  22.         excel->dynamicCall("Quit()");/关闭excel  23.         delete excel;  24.         excel=NULL;          另外附上在网上搜到的一些常用操作:QAxWidget excel("Excel.Application");1) 显示当前窗口:excel.setProperty("Visible", true);2) 更改 Excel 标题栏:excel.setProperty("Caption", "Invoke Microsoft Excel");3) 添加新工作簿:QAxObject * workbooks = excel.querySubObject("WorkBooks");workbooks->dynamicCall("Add");4) 打开已存在的工作簿:workbooks->dynamicCall("Open (const QString&)", QString("c:/test.xls");5) 获取活动工作簿:QAxObject * workbook = excel.querySubObject("ActiveWorkBook");6) 获取所有的工作表:QAxObject * worksheets = workbook->querySubObject("WorkSheets");7) 获取工作表数量:int intCount = worksheets->property("Count").toInt();8) 获取第一个工作表:QAxObject * worksheet = workbook->querySubObject("Worksheets(int)", 1);9) 获取cell的值:QAxObject * range = worksheet->querySubObject("Cells(int,int)", 1, 1 );以上操作不一定每个都可用(都好用),仅作为参考吧。起码我第9)个就没成功,不知为何?后来我改用了Range(QVariant, QVariant)的方法来替代它。        最后附上我用QAxBase:generateDocumentation()方法获得的对应于的带Qt数据类型的QAxObject或者QAxWidget中可用的属性、信号和槽列表(虽然我还不大会用,不过参考下还是很好的): 

    注意事项

    本文(Qt下Excel操作(8页).doc)为本站会员(1595****071)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开