QT应用编程: 导出QTableWidget数据写入到Execl表格

举报
DS小龙哥 发表于 2021/12/09 22:54:15 2021/12/09
【摘要】 一、环境介绍 操作系统介绍:win10 64位 QT版本: 5.12.6 二、功能介绍 将QTableWidget表格编辑的数据写入到本地execl表格文件中保存。 Header: #include <QAxObject> qmake: QT += axcontainer 三、示例代码 /*日期:...

一、环境介绍

操作系统介绍:win10 64位

QT版本: 5.12.6

二、功能介绍

将QTableWidget表格编辑的数据写入到本地execl表格文件中保存。


  
  1. Header: #include <QAxObject>
  2. qmake: QT += axcontainer

三、示例代码


  
  1. /*
  2. 日期: 2020-12-23
  3. 作者: DS小龙哥
  4. 环境: win10 QT5.12.6 MinGW32
  5. 功能: 导出数据到execl表格
  6. */
  7. void Widget::SaveExeclData()
  8. {
  9. int value;
  10. value=QMessageBox::question(this,"提示","确定导出表格数据到Execl?",
  11. QMessageBox::Yes | QMessageBox::No,QMessageBox::Yes);
  12. if(value==QMessageBox::No)return;
  13. //获取保存的文件路径
  14. QString filepath = QFileDialog::getSaveFileName(this, "选择保存文件名称",
  15. QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation),
  16. "Excel 文件(*.xls *.xlsx)");
  17. qDebug()<<"filepath:"<<filepath;
  18. if(filepath.isEmpty())
  19. {
  20. QMessageBox::critical(this,"提示","未选择正确的文件.导出失败.",
  21. QMessageBox::Ok,QMessageBox::Ok);
  22. return;
  23. }
  24. QAxObject *excel = new QAxObject(this);
  25. if(excel->setControl("Excel.Application"))
  26. {
  27. excel->dynamicCall("SetVisible (bool Visible)","false");
  28. excel->setProperty("DisplayAlerts", false);
  29. QAxObject *workbooks = excel->querySubObject("WorkBooks");
  30. workbooks->dynamicCall("Add");
  31. QAxObject *workbook = excel->querySubObject("ActiveWorkBook");
  32. QAxObject *worksheet = workbook->querySubObject("Worksheets(int)", 1);
  33. QTableWidget *table=ui->tableWidget_Measure;
  34. int i,j,colcount=table->columnCount(),rowcount=table->rowCount();
  35. QAxObject *cell,*col;
  36. cell=worksheet->querySubObject("Cells(int,int)", 1, 1);
  37. cell->dynamicCall("SetValue(const QString&)", "title");
  38. cell->querySubObject("Font")->setProperty("Size", 18);
  39. worksheet->querySubObject("Range(const QString&)", "1:1")->setProperty("RowHeight", 60);
  40. QString cellTitle;
  41. cellTitle.append("A1:");
  42. cellTitle.append(QChar(colcount + 'A'));
  43. cellTitle.append(QString::number(1));
  44. QAxObject *range = worksheet->querySubObject("Range(const QString&)", cellTitle);
  45. range->setProperty("WrapText", true);
  46. range->setProperty("MergeCells", true);
  47. range->setProperty("HorizontalAlignment", -4108);
  48. range->setProperty("VerticalAlignment", -4108);
  49. //行的表头
  50. for(i=0;i<colcount;i++)
  51. {
  52. QString columnName;
  53. cell=worksheet->querySubObject("Cells(int,int)", 2, i+2);
  54. columnName=table->horizontalHeaderItem(i)->text();
  55. cell->dynamicCall("SetValue(const QString&)", columnName);//打印到excel
  56. cell->querySubObject("Font")->setProperty("Bold", true);
  57. cell->querySubObject("Interior")->setProperty("Color",QColor(191, 191, 191));
  58. cell->setProperty("HorizontalAlignment", -4108);
  59. cell->setProperty("VerticalAlignment", -4108);
  60. }
  61. //列的表头
  62. for(i=0;i<rowcount;i++)
  63. {
  64. //读取
  65. QString rowName;
  66. //修改内容
  67. cell=worksheet->querySubObject("Cells(int,int)", i+3, 1);
  68. //获取垂直表头
  69. // rowName=table->verticalHeaderItem(i)->text();
  70. //horizontalHeaderItem(i)->text();//获取此处的文本内容,i是列号,就是第几列中的文本内容
  71. //写表头数据
  72. cell->dynamicCall("SetValue(const QString&)",i);
  73. cell->querySubObject("Font")->setProperty("Bold", true);
  74. cell->querySubObject("Interior")->setProperty("Color",QColor(191, 191, 191));
  75. cell->setProperty("HorizontalAlignment", -4108);
  76. cell->setProperty("VerticalAlignment", -4108);
  77. }
  78. //数据
  79. for(i=0;i<table->rowCount();i++)
  80. {
  81. for (j=0;j<colcount;j++)
  82. {
  83. QString rowdata;
  84. rowdata=table->item(i,j)->text();
  85. worksheet->querySubObject("Cells(int,int)", i+3, j+2)->dynamicCall("SetValue(const QString&)",rowdata);
  86. }
  87. }
  88. QString lrange;
  89. lrange.append("A2:");
  90. lrange.append(colcount + 'A');
  91. lrange.append(QString::number(table->rowCount() +2));//终止行
  92. range = worksheet->querySubObject("Range(const QString&)", lrange);
  93. range->querySubObject("Borders")->setProperty("LineStyle", QString::number(1));
  94. range->querySubObject("Borders")->setProperty("Color", QColor(0, 0, 0));
  95. QString rowsName;
  96. rowsName.append("A2:");
  97. rowsName.append(colcount + 'A');
  98. rowsName.append(QString::number(table->rowCount() + 2));
  99. range = worksheet->querySubObject("Range(const QString&)", rowsName);
  100. range->setProperty("RowHeight", 20);
  101. range->setProperty("ColumnWidth", 60);
  102. workbook->dynamicCall("SaveAs(const QString&)",QDir::toNativeSeparators(filepath));
  103. workbook->dynamicCall("Close()");
  104. excel->dynamicCall("Quit()");
  105. delete excel;
  106. excel=nullptr;
  107. if(QMessageBox::question(nullptr,"完成","文件已经导出,是否现在打开?",QMessageBox::Yes|QMessageBox::No)==QMessageBox::Yes)
  108. {
  109. QDesktopServices::openUrl(QUrl("file:///" + QDir::toNativeSeparators(filepath)));
  110. }
  111. }
  112. else
  113. {
  114. QMessageBox::warning(nullptr,"错误","未能创建 Excel 对象,请安装 Microsoft Excel。",QMessageBox::Apply);
  115. }
  116. }

 

文章来源: xiaolong.blog.csdn.net,作者:DS小龙哥,版权归原作者所有,如需转载,请联系作者。

原文链接:xiaolong.blog.csdn.net/article/details/111571781

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。