• Qt 使用QtXlsx操作Excel表


    1.环境搭建

    QtXlsx是一个用于读写Microsoft Excel文件(.xlsx)的Qt库。它提供了一组简单易用的API,可以方便地处理电子表格数据。

    Github下载:GitHub - dbzhang800/QtXlsxWriter: .xlsx file reader and writer for Qt5
    官方文档:http://qtxlsx.debao.me/

    环境搭建

    解压压缩包

    QtXlsx源码嵌入QTCreator中使用。

    新建一个QTCreator窗体项目,将上图src文件夹拷贝到该项目路径中。

    将如下代码拷贝到测试工程.pro文件中

    qmake,编译代码。

    2.常用方法

    创建和保存Excel文件:

    QXlsx::Document xlsx;
    xlsx.write("A1", "Hello");
    xlsx.write("B1", "World");
    xlsx.saveAs("example.xlsx");

    读取单元格数据:

    QXlsx::Document xlsx("example.xlsx");
    QString cellValue = xlsx.read("A1")->toString();

    读取列数据:

    QXlsx::Document xlsx("example.xlsx");
    QStringList columnValues = xlsx.read("B")->toStringList();

    修改单元格数据:

    QXlsx::Document xlsx("example.xlsx");
    xlsx.write("A2", 123);
    xlsx.save();

    合并单元格:

    QXlsx::Document xlsx("example.xlsx");
    xlsx.mergeCells("A1:B1");
    xlsx.save();

    设置单元格格式:

    QXlsx::Document xlsx("example.xlsx");
    xlsx.setColumnWidth(1, 30);
    xlsx.setCellFont(1, 1, QFont("Arial", 12, QFont::Bold));
    xlsx.save();

    操作工作表:

    QXlsx::Document xlsx("example.xlsx");
    xlsx.selectSheet("Sheet2"); // 选中某个工作表
    xlsx.addSheet("NewSheet"); // 添加一个新的工作表
    xlsx.deleteSheet("Sheet1"); // 删除指定工作表
    xlsx.save();

    插入图片:

    QXlsx::Document xlsx("example.xlsx");
    QImage image("image.png");
    xlsx.insertImage(1, 1, image);
    xlsx.save();

    更多详细案例,请参考官方帮助文档: 官方文档:http://qtxlsx.debao.me/

    3.代码示例

    做一个日历表格。

    1. #include "mainwindow.h"
    2. #include "ui_mainwindow.h"
    3. #include "xlsxdocument.h"
    4. #include "xlsxchartsheet.h"
    5. #include "xlsxcellrange.h"
    6. #include "xlsxchart.h"
    7. #include "xlsxrichstring.h"
    8. #include "xlsxworkbook.h"
    9. #include
    10. QTXLSX_USE_NAMESPACE
    11. MainWindow::MainWindow(QWidget *parent) :
    12. QMainWindow(parent),
    13. ui(new Ui::MainWindow)
    14. {
    15. ui->setupUi(this);
    16. Document xlsx;
    17. QDate today(QDate::currentDate());
    18. for (int month = 1; month <= 12; ++month) {
    19. xlsx.addSheet(QLocale().monthName(month));
    20. xlsx.currentWorksheet()->setGridLinesVisible(false);
    21. // the header row
    22. Format headerStyle;
    23. headerStyle.setFontSize(48);
    24. headerStyle.setFontColor(Qt::darkBlue);
    25. headerStyle.setHorizontalAlignment(Format::AlignHCenter);
    26. headerStyle.setVerticalAlignment(Format::AlignVCenter);
    27. xlsx.setRowHeight(1, 80);
    28. xlsx.write("A1", QString("%1 %2").arg(QLocale().monthName(month)).arg(today.year()));
    29. xlsx.mergeCells("A1:N1", headerStyle);
    30. // header with month titles
    31. for (int day = 1; day <= 7; ++day) {
    32. Format monthStyle;
    33. monthStyle.setFontSize(12);
    34. monthStyle.setFontColor(Qt::white);
    35. monthStyle.setFontBold(true);
    36. monthStyle.setHorizontalAlignment(Format::AlignHCenter);
    37. monthStyle.setVerticalAlignment(Format::AlignVCenter);
    38. monthStyle.setFillPattern(Format::PatternSolid);
    39. monthStyle.setPatternBackgroundColor(Qt::darkBlue);
    40. xlsx.setColumnWidth(day * 2 - 1, day * 2 - 1, 5);
    41. xlsx.setColumnWidth(day * 2, day * 2, 13);
    42. xlsx.write(2, day * 2 - 1, QLocale().dayName(day));
    43. xlsx.mergeCells(CellRange(2, day * 2 - 1, 2, day * 2), monthStyle);
    44. }
    45. QColor borderColor = QColor(Qt::gray);
    46. Format weekendLeftStyle;
    47. weekendLeftStyle.setFontSize(14);
    48. weekendLeftStyle.setFontBold(true);
    49. weekendLeftStyle.setHorizontalAlignment(Format::AlignLeft);
    50. weekendLeftStyle.setVerticalAlignment(Format::AlignTop);
    51. weekendLeftStyle.setPatternBackgroundColor(QColor("#93CCEA"));
    52. weekendLeftStyle.setLeftBorderStyle(Format::BorderThin);
    53. weekendLeftStyle.setLeftBorderColor(borderColor);
    54. weekendLeftStyle.setBottomBorderStyle(Format::BorderThin);
    55. weekendLeftStyle.setBottomBorderColor(borderColor);
    56. Format weekendRightStyle;
    57. weekendRightStyle.setHorizontalAlignment(Format::AlignHCenter);
    58. weekendRightStyle.setVerticalAlignment(Format::AlignTop);
    59. weekendRightStyle.setPatternBackgroundColor(QColor("#93CCEA"));
    60. weekendRightStyle.setRightBorderStyle(Format::BorderThin);
    61. weekendRightStyle.setRightBorderColor(borderColor);
    62. weekendRightStyle.setBottomBorderStyle(Format::BorderThin);
    63. weekendRightStyle.setBottomBorderColor(borderColor);
    64. Format workdayLeftStyle;
    65. workdayLeftStyle.setHorizontalAlignment(Format::AlignLeft);
    66. workdayLeftStyle.setVerticalAlignment(Format::AlignTop);
    67. workdayLeftStyle.setPatternBackgroundColor(Qt::white);
    68. workdayLeftStyle.setLeftBorderStyle(Format::BorderThin);
    69. workdayLeftStyle.setLeftBorderColor(borderColor);
    70. workdayLeftStyle.setBottomBorderStyle(Format::BorderThin);
    71. workdayLeftStyle.setBottomBorderColor(borderColor);
    72. Format workdayRightStyle;
    73. workdayRightStyle.setHorizontalAlignment(Format::AlignHCenter);
    74. workdayRightStyle.setVerticalAlignment(Format::AlignTop);
    75. workdayRightStyle.setPatternBackgroundColor(Qt::white);
    76. workdayRightStyle.setRightBorderStyle(Format::BorderThin);
    77. workdayRightStyle.setRightBorderColor(borderColor);
    78. workdayRightStyle.setBottomBorderStyle(Format::BorderThin);
    79. workdayRightStyle.setBottomBorderColor(borderColor);
    80. Format greyLeftStyle;
    81. greyLeftStyle.setPatternBackgroundColor(Qt::lightGray);
    82. greyLeftStyle.setLeftBorderStyle(Format::BorderThin);
    83. greyLeftStyle.setLeftBorderColor(borderColor);
    84. greyLeftStyle.setBottomBorderStyle(Format::BorderThin);
    85. greyLeftStyle.setBottomBorderColor(borderColor);
    86. Format greyRightStyle;
    87. greyRightStyle.setPatternBackgroundColor(Qt::lightGray);
    88. greyRightStyle.setRightBorderStyle(Format::BorderThin);
    89. greyRightStyle.setRightBorderColor(borderColor);
    90. greyRightStyle.setBottomBorderStyle(Format::BorderThin);
    91. greyRightStyle.setBottomBorderColor(borderColor);
    92. int rownum = 3;
    93. for (int day = 1; day <= 31; ++day) {
    94. QDate date(today.year(), month, day);
    95. if (!date.isValid())
    96. break;
    97. xlsx.setRowHeight(rownum, 100);
    98. int dow = date.dayOfWeek();
    99. int colnum = dow * 2 - 1;
    100. if (dow <= 5) {
    101. xlsx.write(rownum, colnum, day, workdayLeftStyle);
    102. xlsx.write(rownum, colnum + 1, QVariant(), workdayRightStyle);
    103. } else {
    104. xlsx.write(rownum, colnum, day, weekendLeftStyle);
    105. xlsx.write(rownum, colnum + 1, QVariant(), weekendRightStyle);
    106. }
    107. if (day == 1 && dow != 1) { // First day
    108. for (int i = 1; i < dow; ++i) {
    109. xlsx.write(rownum, i * 2 - 1, QVariant(), greyLeftStyle);
    110. xlsx.write(rownum, i * 2, QVariant(), greyRightStyle);
    111. }
    112. } else if (day == date.daysInMonth() && dow != 7) { // Last day
    113. for (int i = dow + 1; i <= 7; ++i) {
    114. xlsx.write(rownum, i * 2 - 1, QVariant(), greyLeftStyle);
    115. xlsx.write(rownum, i * 2, QVariant(), greyRightStyle);
    116. }
    117. }
    118. if (dow == 7)
    119. rownum++;
    120. }
    121. }
    122. xlsx.saveAs("Book1.xlsx");
    123. // Make sure that read/write works well.
    124. Document xlsx2("Book1.xlsx");
    125. xlsx2.saveAs("Book2.xlsx");
    126. }
    127. MainWindow::~MainWindow()
    128. {
    129. delete ui;
    130. }

    4.相关推荐

    Qt 使用Quazip解压缩、压缩文件-CSDN博客

     QCustomplot详解_qcustomplot中rescαlerαxis的作用_Mr.codeee的博客-CSDN博客

    Qt 二维码生成与识别-CSDN博客
     

  • 相关阅读:
    拍摄视频,真的帧率越高越好吗?
    传感器的基本特性
    【Java学习】JavaWeb ---- JDBC
    【代码分析】初学解惑C++:函数适配器
    Drools规则引擎讲解
    verilog 移位操作符
    【pytorch问题解决】OSError: [WinError 1455] 页面文件太小,无法完成操作。
    知识变现海哥:打造爆款课程的底层逻辑
    Flask Web框架入门教程
    cmake简洁教程 - 第二篇
  • 原文地址:https://blog.csdn.net/wzz953200463/article/details/134155530