Qt xlsx 库使用前言
因为我对 xls 格式不做兼容要求,所以选取了此库。具体需要实现的功能,写入 Excel 样式。
Qt xlsx 库写入单元格样式方法
/*单元格边框样式*/
format.setBorderColor(QColor("#000000"));
format.setBorderStyle(QXlsx::Format::BorderThin);
/*单元格设置字体样式*/
format.setFontColor(QColor("#FFFFFF"));
format.setFontSize(11);
format.setFontBold(false);
format.setFontName(QStringLiteral("Calibri"));
/*单元格背景颜色*/
format.setPatternBackgroundColor(QColor("#00B050"));
format.setPatternForegroundColor(Qt::red);
/*单元格居中方式*/
format.setVerticalAlignment(QXlsx::Format::AlignVCenter);
format.setHorizontalAlignment(QXlsx::Format::AlignHCenter);
Qt xlsx 库使用简单例子
.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include
#include "xlsxdocument.h"
#include "xlsxformat.h"
#include "xlsxcellrange.h"
#include "xlsxchart.h"
#include "xlsx/xlsxformat.h"
#include "xlsx/xlsxformat_p.h"
#include
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
QXlsx::Format setFormatStyleBlue();
QXlsx::Format setFormatStyleRed();
QXlsx::Format setHeaderFormatStyle();
QXlsx::Format setSingleFormatStyle();
QXlsx::Format setDoubleFormatStyle();
void getInitData();
void initMakeExcel(QXlsx::Document &xlsx);
private:
Ui::MainWindow *ui;
QMap > m_gMapData;
};
#endif // MAINWINDOW_H
.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
/***
* https://www.cnblogs.com/wangjian8888/p/9176662.html
*/
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
getInitData();
QXlsx::Document xlsx("book1.xlsx");/*打开一个 book1 的文件*/
xlsx.setRowHeight(1, 30);
xlsx.setRowHeight(2, 25);
xlsx.setRowHeight(3, 25);
initMakeExcel(xlsx);
// xlsx.write(1, 1, 12345, formatHeader);/*写入文字,应该刚才设置的样式*/
// xlsx.write(1, 2, 12345, formatHeader);/*写入文字,应该刚才设置的样式*/
// xlsx.write(1, 3, 12345, formatHeader);/*写入文字,应该刚才设置的样式*/
// xlsx.write(1, 4, 12345, formatHeader);/*写入文字,应该刚才设置的样式*/
// xlsx.write(1, 5, 12345, formatHeader);/*写入文字,应该刚才设置的样式*/
// xlsx.write(2, 1, 12345, formatSingal);/*写入文字,应该刚才设置的样式*/
// xlsx.write(2, 2, 888, formatSingal);/*写入文字,应该刚才设置的样式*/
// xlsx.write(2, 3, 12345, formatSingal);/*写入文字,应该刚才设置的样式*/
// xlsx.write(2, 4, 12345, formatSingal);/*写入文字,应该刚才设置的样式*/
// xlsx.write(2, 5, 12345, formatBlue);/*写入文字,应该刚才设置的样式*/
// xlsx.write(3, 1, 12345, formatDouble);/*写入文字,应该刚才设置的样式*/
// xlsx.write(3, 2, 12345, formatDouble);/*写入文字,应该刚才设置的样式*/
// xlsx.write(3, 3, 12345, formatDouble);/*写入文字,应该刚才设置的样式*/
// xlsx.write(3, 4, 12345, formatDouble);/*写入文字,应该刚才设置的样式*/
// xlsx.write(3, 5, 12345, formatRed);/*写入文字,应该刚才设置的样式*/
// QXlsx::Format format2;/*重新设置另一个单元的样式*/
// format2.setFontBold(true);/*设置加粗*/
// format2.setFontUnderline(QXlsx::Format::FontUnderlineDouble);/*下双划线*/
// format2.setFillPattern(QXlsx::Format::PatternLightUp);/*填充方式*/
// xlsx.write("A4", "=44+33", format2);/*写入文字,应该刚才设置的样式*/
// xlsx.write("C4", true, format2);
xlsx.saveAs("book1.xlsx");/*保存*/
// QXlsx::Document xlsx2("Book1.xlsx");/*复制 book1 到 book2*/
// xlsx2.saveAs("Book2.xlsx");
}
MainWindow::~MainWindow()
{
delete ui;
}
QXlsx::Format MainWindow::setFormatStyleBlue()
{
QXlsx::Format format;/*设置该单元的样式*/
format.setBorderColor(QColor("#000000"));
format.setBorderStyle(QXlsx::Format::BorderThin);/*边框样式*/
format.setFontColor(QColor("#FFFFFF"));/*文字为红色*/
format.setFontSize(11);/*设置字体大小*/
format.setFontBold(false);
format.setFontName(QStringLiteral("Calibri"));
format.setPatternBackgroundColor(QColor("#00B050"));/*背景颜色*/
format.setPatternForegroundColor(Qt::red);
format.setVerticalAlignment(QXlsx::Format::AlignVCenter);
format.setHorizontalAlignment(QXlsx::Format::AlignHCenter);/*横向居中*/
return format;
}
QXlsx::Format MainWindow::setFormatStyleRed()
{
QXlsx::Format format;/*设置该单元的样式*/
format.setBorderColor(QColor("#000000"));
format.setBorderStyle(QXlsx::Format::BorderThin);/*边框样式*/
format.setFontColor(QColor("#FFFFFF"));/*文字为红色*/
format.setFontSize(11);/*设置字体大小*/
format.setFontBold(false);
format.setFontName(QStringLiteral("Calibri"));
format.setPatternBackgroundColor(QColor("#FF0000"));/*背景颜色*/
format.setPatternForegroundColor(Qt::red);
format.setVerticalAlignment(QXlsx::Format::AlignVCenter);
format.setHorizontalAlignment(QXlsx::Format::AlignHCenter);/*横向居中*/
return format;
}
QXlsx::Format MainWindow::setHeaderFormatStyle()
{
QXlsx::Format format;/*设置该单元的样式*/
format.setBorderColor(QColor("#000000"));
format.setBorderStyle(QXlsx::Format::BorderThin);/*边框样式*/
format.setFontColor(QColor("#000000"));/*文字为红色*/
format.setFontSize(12);/*设置字体大小*/
format.setFontBold(true);
format.setFontName(QStringLiteral("Calibri"));
format.setPatternBackgroundColor(QColor("#A6A6A6"));/*背景颜色*/
format.setPatternForegroundColor(Qt::red);
format.setVerticalAlignment(QXlsx::Format::AlignVCenter);
format.setHorizontalAlignment(QXlsx::Format::AlignHCenter);/*横向居中*/
return format;
}
QXlsx::Format MainWindow::setSingleFormatStyle()
{
QXlsx::Format format;/*设置该单元的样式*/
format.setBorderColor(QColor("#000000"));
format.setBorderStyle(QXlsx::Format::BorderThin);/*边框样式*/
format.setFontColor(QColor("#000000"));/*文字为红色*/
format.setFontSize(11);/*设置字体大小*/
format.setFontBold(false);
format.setFontName(QStringLiteral("Calibri"));
format.setPatternBackgroundColor(QColor("#FFFFFF"));/*背景颜色*/
format.setPatternForegroundColor(Qt::red);
format.setVerticalAlignment(QXlsx::Format::AlignVCenter);
format.setHorizontalAlignment(QXlsx::Format::AlignHCenter);/*横向居中*/
return format;
}
QXlsx::Format MainWindow::setDoubleFormatStyle()
{
QXlsx::Format format;/*设置该单元的样式*/
format.setBorderColor(QColor("#000000"));
format.setBorderStyle(QXlsx::Format::BorderThin);/*边框样式*/
format.setFontColor(QColor("#000000"));/*文字为红色*/
format.setFontSize(11);/*设置字体大小*/
format.setFontBold(false);
format.setFontName(QStringLiteral("Calibri"));
format.setPatternBackgroundColor(QColor("#F2F2F2"));/*背景颜色*/
format.setPatternForegroundColor(Qt::red);
format.setVerticalAlignment(QXlsx::Format::AlignVCenter);
format.setHorizontalAlignment(QXlsx::Format::AlignHCenter);/*横向居中*/
return format;
}
void MainWindow::getInitData()
{
QList headerList;
headerList << "Sensor" << "MUX" << "Sample"
<< "AD" << "IOC" << "CPU" << "Result";
for(int row = 1; row < 10; ++row)
{
if(row == 1)
{
m_gMapData.insert(row, headerList);
}
else
{
QString mm = "0";
if(row%2 == 0)
{
mm = "0";
}
else
{
mm = "1";
}
QList rowData;
rowData << "2" << "5" << "3" << "6" << "5" << "6" << mm;
m_gMapData.insert(row, rowData);
}
}
}
void MainWindow::initMakeExcel(QXlsx::Document &xlsx)
{
QMapIterator > mapItor(m_gMapData);
QXlsx::Format formatHeader, formatBlue, formatRed, formatSingal, formatDouble;/*设置该单元的样式*/
formatHeader = setHeaderFormatStyle();
formatBlue = setFormatStyleBlue();
formatRed = setFormatStyleRed();
formatSingal = setSingleFormatStyle();
formatDouble = setDoubleFormatStyle();
while (mapItor.hasNext()) {
mapItor.next();
int rowIndex = mapItor.key();
QList rowList = mapItor.value();
if(rowIndex == 1)
{
for(int j = 0; j < rowList.length(); j++)
{
xlsx.write(rowIndex, j+1, rowList.at(j), formatHeader);
}
}
else
{
for(int i = 0; i < rowList.length(); i++)
{
if(i == rowList.length() - 1)
{
if(rowList.at(i).toInt() == 0)
{
xlsx.write(rowIndex, i+1, rowList.at(i).toInt(), formatRed);
}
else
{
xlsx.write(rowIndex, i+1, rowList.at(i).toInt(), formatBlue);
}
}
else
{
if(rowIndex%2 == 0)
{
xlsx.write(rowIndex, i+1, rowList.at(i).toInt(), formatDouble);
}
else
{
xlsx.write(rowIndex, i+1, rowList.at(i).toInt(), formatSingal);
}
}
}
}
}
}
Qt xlsx 库使用简单例子最终效果