Qt Excel库xlsx写入单元格样式及使用

本文介绍了如何使用Qt xlsx库来创建Excel文件并设置单元格样式,包括边框、字体、颜色和对齐方式。通过示例代码展示了如何创建不同样式的单元格,如蓝色背景、红色文字等。
摘要由CSDN通过智能技术生成

Qt xlsx 库使用前言

 
  1. 因为我对 xls 格式不做兼容要求,所以选取了此库。具体需要实现的功能,写入 Excel 样式。

Qt xlsx 库写入单元格样式方法

 
  1. /*单元格边框样式*/
  2. format.setBorderColor(QColor("#000000"));
  3. format.setBorderStyle(QXlsx::Format::BorderThin);
  4. /*单元格设置字体样式*/
  5. format.setFontColor(QColor("#FFFFFF"));
  6. format.setFontSize(11);
  7. format.setFontBold(false);
  8. format.setFontName(QStringLiteral("Calibri"));
  9. /*单元格背景颜色*/
  10. format.setPatternBackgroundColor(QColor("#00B050"));
  11. format.setPatternForegroundColor(Qt::red);
  12. /*单元格居中方式*/
  13. format.setVerticalAlignment(QXlsx::Format::AlignVCenter);
  14. format.setHorizontalAlignment(QXlsx::Format::AlignHCenter);

Qt xlsx 库使用简单例子

 
  1. .h
  2. #ifndef MAINWINDOW_H
  3. #define MAINWINDOW_H
  4. #include <QMainWindow>
  5. #include "xlsxdocument.h"
  6. #include "xlsxformat.h"
  7. #include "xlsxcellrange.h"
  8. #include "xlsxchart.h"
  9. #include "xlsx/xlsxformat.h"
  10. #include "xlsx/xlsxformat_p.h"
  11. #include <QDebug>
  12. namespace Ui {
  13. class MainWindow;
  14. }
  15. class MainWindow : public QMainWindow
  16. {
  17. Q_OBJECT
  18. public:
  19. explicit MainWindow(QWidget *parent = 0);
  20. ~MainWindow();
  21. QXlsx::Format setFormatStyleBlue();
  22. QXlsx::Format setFormatStyleRed();
  23. QXlsx::Format setHeaderFormatStyle();
  24. QXlsx::Format setSingleFormatStyle();
  25. QXlsx::Format setDoubleFormatStyle();
  26. void getInitData();
  27. void initMakeExcel(QXlsx::Document &xlsx);
  28. private:
  29. Ui::MainWindow *ui;
  30. QMap<int, QList<QString> > m_gMapData;
  31. };
  32. #endif // MAINWINDOW_H
 
  1. .cpp
  2. #include "mainwindow.h"
  3. #include "ui_mainwindow.h"
  4. /***
  5. * https://www.cnblogs.com/wangjian8888/p/9176662.html
  6. */
  7. MainWindow::MainWindow(QWidget *parent) :
  8. QMainWindow(parent),
  9. ui(new Ui::MainWindow)
  10. {
  11. ui->setupUi(this);
  12. getInitData();
  13. QXlsx::Document xlsx("book1.xlsx");/*打开一个 book1 的文件*/
  14. xlsx.setRowHeight(1, 30);
  15. xlsx.setRowHeight(2, 25);
  16. xlsx.setRowHeight(3, 25);
  17. initMakeExcel(xlsx);
  18. // xlsx.write(1, 1, 12345, formatHeader);/*写入文字,应该刚才设置的样式*/
  19. // xlsx.write(1, 2, 12345, formatHeader);/*写入文字,应该刚才设置的样式*/
  20. // xlsx.write(1, 3, 12345, formatHeader);/*写入文字,应该刚才设置的样式*/
  21. // xlsx.write(1, 4, 12345, formatHeader);/*写入文字,应该刚才设置的样式*/
  22. // xlsx.write(1, 5, 12345, formatHeader);/*写入文字,应该刚才设置的样式*/
  23. // xlsx.write(2, 1, 12345, formatSingal);/*写入文字,应该刚才设置的样式*/
  24. // xlsx.write(2, 2, 888, formatSingal);/*写入文字,应该刚才设置的样式*/
  25. // xlsx.write(2, 3, 12345, formatSingal);/*写入文字,应该刚才设置的样式*/
  26. // xlsx.write(2, 4, 12345, formatSingal);/*写入文字,应该刚才设置的样式*/
  27. // xlsx.write(2, 5, 12345, formatBlue);/*写入文字,应该刚才设置的样式*/
  28. // xlsx.write(3, 1, 12345, formatDouble);/*写入文字,应该刚才设置的样式*/
  29. // xlsx.write(3, 2, 12345, formatDouble);/*写入文字,应该刚才设置的样式*/
  30. // xlsx.write(3, 3, 12345, formatDouble);/*写入文字,应该刚才设置的样式*/
  31. // xlsx.write(3, 4, 12345, formatDouble);/*写入文字,应该刚才设置的样式*/
  32. // xlsx.write(3, 5, 12345, formatRed);/*写入文字,应该刚才设置的样式*/
  33. // QXlsx::Format format2;/*重新设置另一个单元的样式*/
  34. // format2.setFontBold(true);/*设置加粗*/
  35. // format2.setFontUnderline(QXlsx::Format::FontUnderlineDouble);/*下双划线*/
  36. // format2.setFillPattern(QXlsx::Format::PatternLightUp);/*填充方式*/
  37. // xlsx.write("A4", "=44+33", format2);/*写入文字,应该刚才设置的样式*/
  38. // xlsx.write("C4", true, format2);
  39. xlsx.saveAs("book1.xlsx");/*保存*/
  40. // QXlsx::Document xlsx2("Book1.xlsx");/*复制 book1 到 book2*/
  41. // xlsx2.saveAs("Book2.xlsx");
  42. }
  43. MainWindow::~MainWindow()
  44. {
  45. delete ui;
  46. }
  47. QXlsx::Format MainWindow::setFormatStyleBlue()
  48. {
  49. QXlsx::Format format;/*设置该单元的样式*/
  50. format.setBorderColor(QColor("#000000"));
  51. format.setBorderStyle(QXlsx::Format::BorderThin);/*边框样式*/
  52. format.setFontColor(QColor("#FFFFFF"));/*文字为红色*/
  53. format.setFontSize(11);/*设置字体大小*/
  54. format.setFontBold(false);
  55. format.setFontName(QStringLiteral("Calibri"));
  56. format.setPatternBackgroundColor(QColor("#00B050"));/*背景颜色*/
  57. format.setPatternForegroundColor(Qt::red);
  58. format.setVerticalAlignment(QXlsx::Format::AlignVCenter);
  59. format.setHorizontalAlignment(QXlsx::Format::AlignHCenter);/*横向居中*/
  60. return format;
  61. }
  62. QXlsx::Format MainWindow::setFormatStyleRed()
  63. {
  64. QXlsx::Format format;/*设置该单元的样式*/
  65. format.setBorderColor(QColor("#000000"));
  66. format.setBorderStyle(QXlsx::Format::BorderThin);/*边框样式*/
  67. format.setFontColor(QColor("#FFFFFF"));/*文字为红色*/
  68. format.setFontSize(11);/*设置字体大小*/
  69. format.setFontBold(false);
  70. format.setFontName(QStringLiteral("Calibri"));
  71. format.setPatternBackgroundColor(QColor("#FF0000"));/*背景颜色*/
  72. format.setPatternForegroundColor(Qt::red);
  73. format.setVerticalAlignment(QXlsx::Format::AlignVCenter);
  74. format.setHorizontalAlignment(QXlsx::Format::AlignHCenter);/*横向居中*/
  75. return format;
  76. }
  77. QXlsx::Format MainWindow::setHeaderFormatStyle()
  78. {
  79. QXlsx::Format format;/*设置该单元的样式*/
  80. format.setBorderColor(QColor("#000000"));
  81. format.setBorderStyle(QXlsx::Format::BorderThin);/*边框样式*/
  82. format.setFontColor(QColor("#000000"));/*文字为红色*/
  83. format.setFontSize(12);/*设置字体大小*/
  84. format.setFontBold(true);
  85. format.setFontName(QStringLiteral("Calibri"));
  86. format.setPatternBackgroundColor(QColor("#A6A6A6"));/*背景颜色*/
  87. format.setPatternForegroundColor(Qt::red);
  88. format.setVerticalAlignment(QXlsx::Format::AlignVCenter);
  89. format.setHorizontalAlignment(QXlsx::Format::AlignHCenter);/*横向居中*/
  90. return format;
  91. }
  92. QXlsx::Format MainWindow::setSingleFormatStyle()
  93. {
  94. QXlsx::Format format;/*设置该单元的样式*/
  95. format.setBorderColor(QColor("#000000"));
  96. format.setBorderStyle(QXlsx::Format::BorderThin);/*边框样式*/
  97. format.setFontColor(QColor("#000000"));/*文字为红色*/
  98. format.setFontSize(11);/*设置字体大小*/
  99. format.setFontBold(false);
  100. format.setFontName(QStringLiteral("Calibri"));
  101. format.setPatternBackgroundColor(QColor("#FFFFFF"));/*背景颜色*/
  102. format.setPatternForegroundColor(Qt::red);
  103. format.setVerticalAlignment(QXlsx::Format::AlignVCenter);
  104. format.setHorizontalAlignment(QXlsx::Format::AlignHCenter);/*横向居中*/
  105. return format;
  106. }
  107. QXlsx::Format MainWindow::setDoubleFormatStyle()
  108. {
  109. QXlsx::Format format;/*设置该单元的样式*/
  110. format.setBorderColor(QColor("#000000"));
  111. format.setBorderStyle(QXlsx::Format::BorderThin);/*边框样式*/
  112. format.setFontColor(QColor("#000000"));/*文字为红色*/
  113. format.setFontSize(11);/*设置字体大小*/
  114. format.setFontBold(false);
  115. format.setFontName(QStringLiteral("Calibri"));
  116. format.setPatternBackgroundColor(QColor("#F2F2F2"));/*背景颜色*/
  117. format.setPatternForegroundColor(Qt::red);
  118. format.setVerticalAlignment(QXlsx::Format::AlignVCenter);
  119. format.setHorizontalAlignment(QXlsx::Format::AlignHCenter);/*横向居中*/
  120. return format;
  121. }
  122. void MainWindow::getInitData()
  123. {
  124. QList<QString> headerList;
  125. headerList << "Sensor" << "MUX" << "Sample"
  126. << "AD" << "IOC" << "CPU" << "Result";
  127. for(int row = 1; row < 10; ++row)
  128. {
  129. if(row == 1)
  130. {
  131. m_gMapData.insert(row, headerList);
  132. }
  133. else
  134. {
  135. QString mm = "0";
  136. if(row%2 == 0)
  137. {
  138. mm = "0";
  139. }
  140. else
  141. {
  142. mm = "1";
  143. }
  144. QList<QString> rowData;
  145. rowData << "2" << "5" << "3" << "6" << "5" << "6" << mm;
  146. m_gMapData.insert(row, rowData);
  147. }
  148. }
  149. }
  150. void MainWindow::initMakeExcel(QXlsx::Document &xlsx)
  151. {
  152. QMapIterator<int, QList<QString> > mapItor(m_gMapData);
  153. QXlsx::Format formatHeader, formatBlue, formatRed, formatSingal, formatDouble;/*设置该单元的样式*/
  154. formatHeader = setHeaderFormatStyle();
  155. formatBlue = setFormatStyleBlue();
  156. formatRed = setFormatStyleRed();
  157. formatSingal = setSingleFormatStyle();
  158. formatDouble = setDoubleFormatStyle();
  159. while (mapItor.hasNext()) {
  160. mapItor.next();
  161. int rowIndex = mapItor.key();
  162. QList<QString> rowList = mapItor.value();
  163. if(rowIndex == 1)
  164. {
  165. for(int j = 0; j < rowList.length(); j++)
  166. {
  167. xlsx.write(rowIndex, j+1, rowList.at(j), formatHeader);
  168. }
  169. }
  170. else
  171. {
  172. for(int i = 0; i < rowList.length(); i++)
  173. {
  174. if(i == rowList.length() - 1)
  175. {
  176. if(rowList.at(i).toInt() == 0)
  177. {
  178. xlsx.write(rowIndex, i+1, rowList.at(i).toInt(), formatRed);
  179. }
  180. else
  181. {
  182. xlsx.write(rowIndex, i+1, rowList.at(i).toInt(), formatBlue);
  183. }
  184. }
  185. else
  186. {
  187. if(rowIndex%2 == 0)
  188. {
  189. xlsx.write(rowIndex, i+1, rowList.at(i).toInt(), formatDouble);
  190. }
  191. else
  192. {
  193. xlsx.write(rowIndex, i+1, rowList.at(i).toInt(), formatSingal);
  194. }
  195. }
  196. }
  197. }
  198. }
  199. }

Qt xlsx 库使用简单例子最终效果

Qt Excel库xlsx写入单元格样式及使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值