From 0a0e24960aa20dc275ca3301a1a54398e0cb0d91 Mon Sep 17 00:00:00 2001 From: Debao Zhang Date: Thu, 31 Oct 2013 14:58:28 +0800 Subject: [PATCH] Add a demo example --- examples/xlsx/demo/demo.pro | 9 ++ examples/xlsx/demo/doc/images/xlsx_demo.png | Bin 0 -> 39925 bytes examples/xlsx/demo/doc/src/demo.qdoc | 8 ++ examples/xlsx/demo/main.cpp | 120 ++++++++++++++++++++ examples/xlsx/xlsx.pro | 3 +- src/xlsx/doc/src/qtxlsx-index.qdoc | 22 ++-- 6 files changed, 150 insertions(+), 12 deletions(-) create mode 100644 examples/xlsx/demo/demo.pro create mode 100644 examples/xlsx/demo/doc/images/xlsx_demo.png create mode 100644 examples/xlsx/demo/doc/src/demo.qdoc create mode 100644 examples/xlsx/demo/main.cpp diff --git a/examples/xlsx/demo/demo.pro b/examples/xlsx/demo/demo.pro new file mode 100644 index 0000000..10c4270 --- /dev/null +++ b/examples/xlsx/demo/demo.pro @@ -0,0 +1,9 @@ +TARGET = demo + +#include(../../../src/xlsx/qtxlsx.pri) +QT+=xlsx + +CONFIG += console +CONFIG -= app_bundle + +SOURCES += main.cpp diff --git a/examples/xlsx/demo/doc/images/xlsx_demo.png b/examples/xlsx/demo/doc/images/xlsx_demo.png new file mode 100644 index 0000000000000000000000000000000000000000..954e0ebdb5455e924d5f4da99b9f7765492be684 GIT binary patch literal 39925 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 +#include "xlsxdocument.h" +#include "xlsxformat.h" +#include "xlsxcellrange.h" +#include "xlsxworksheet.h" + +QTXLSX_USE_NAMESPACE + +void writeHorizontalAlignCell(Document &xlsx, const QString &cell, const QString &text, Format::HorizontalAlignment align) +{ + Format *format = xlsx.createFormat(); + format->setHorizontalAlignment(align); + format->setBorderStyle(Format::BorderThin); + xlsx.write(cell, text, format); +} + +void writeVerticalAlignCell(Document &xlsx, const QString &range, const QString &text, Format::VerticalAlignment align) +{ + Format *format = xlsx.createFormat(); + format->setVerticalAlignment(align); + format->setBorderStyle(Format::BorderThin); + xlsx.mergeCells(range); + + CellRange r(range); + for (int row=r.firstRow(); row<=r.lastRow(); ++row) { + for (int col=r.firstColumn(); col<=r.lastColumn(); ++col) { + if (row == r.firstRow() && col == r.firstColumn()) + xlsx.write(row, col, text, format); + else + xlsx.write(row, col, QVariant(), format); + } + } +} + +void writeBorderStyleCell(Document &xlsx, const QString &cell, const QString &text, Format::BorderStyle bs) +{ + Format *format = xlsx.createFormat(); + format->setBorderStyle(bs); + xlsx.write(cell, text, format); +} + +void writeSolidFillCell(Document &xlsx, const QString &cell, const QColor &color) +{ + Format *format = xlsx.createFormat(); + format->setPatternBackgroundColor(color); + xlsx.write(cell, QVariant(), format); +} + +void writePatternFillCell(Document &xlsx, const QString &cell, Format::FillPattern pattern, const QColor &color) +{ + Format *format = xlsx.createFormat(); + format->setPatternForegroundColor(color); + format->setFillPattern(pattern); + xlsx.write(cell, QVariant(), format); +} + +void writeBorderAndFontColorCell(Document &xlsx, const QString &cell, const QString &text, const QColor &color) +{ + Format *format = xlsx.createFormat(); + format->setBorderStyle(Format::BorderThin); + format->setBorderColor(color); + format->setFontColor(color); + xlsx.write(cell, text, format); +} + +int main() +{ + Document xlsx; + + //The default sheet is "Sheet1" + xlsx.setSheetName("Aligns & Borders"); + xlsx.setColumn("B", "B", 20); + xlsx.setColumn("H", "H", 12); + xlsx.currentWorksheet()->setGridLinesVisible(false); + + //Alignment + writeHorizontalAlignCell(xlsx, "B3", "AlignLeft", Format::AlignLeft); + writeHorizontalAlignCell(xlsx, "B5", "AlignHCenter", Format::AlignHCenter); + writeHorizontalAlignCell(xlsx, "B7", "AlignRight", Format::AlignRight); + writeVerticalAlignCell(xlsx, "D3:D7", "AlignTop", Format::AlignTop); + writeVerticalAlignCell(xlsx, "F3:F7", "AlignVCenter", Format::AlignVCenter); + writeVerticalAlignCell(xlsx, "H3:H7", "AlignBottom", Format::AlignBottom); + + //Border + writeBorderStyleCell(xlsx, "B13", "BorderMedium", Format::BorderMedium); + writeBorderStyleCell(xlsx, "B15", "BorderDashed", Format::BorderDashed); + writeBorderStyleCell(xlsx, "B17", "BorderDotted", Format::BorderDotted); + writeBorderStyleCell(xlsx, "B19", "BorderThick", Format::BorderThick); + writeBorderStyleCell(xlsx, "B21", "BorderDouble", Format::BorderDouble); + writeBorderStyleCell(xlsx, "B23", "BorderDashDot", Format::BorderDashDot); + + //Fill + writeSolidFillCell(xlsx, "D13", Qt::red); + writeSolidFillCell(xlsx, "D15", Qt::blue); + writeSolidFillCell(xlsx, "D17", Qt::yellow); + writeSolidFillCell(xlsx, "D19", Qt::magenta); + writeSolidFillCell(xlsx, "D21", Qt::green); + writeSolidFillCell(xlsx, "D23", Qt::gray); + writePatternFillCell(xlsx, "F13", Format::PatternMediumGray, Qt::red); + writePatternFillCell(xlsx, "F15", Format::PatternDarkHorizontal, Qt::blue); + writePatternFillCell(xlsx, "F17", Format::PatternDarkVertical, Qt::yellow); + writePatternFillCell(xlsx, "F19", Format::PatternDarkDown, Qt::magenta); + writePatternFillCell(xlsx, "F21", Format::PatternLightVertical, Qt::green); + writePatternFillCell(xlsx, "F23", Format::PatternLightTrellis, Qt::gray); + + writeBorderAndFontColorCell(xlsx, "H13", "Qt::red", Qt::red); + writeBorderAndFontColorCell(xlsx, "H15", "Qt::blue", Qt::blue); + writeBorderAndFontColorCell(xlsx, "H17", "Qt::yellow", Qt::yellow); + writeBorderAndFontColorCell(xlsx, "H19", "Qt::magenta", Qt::magenta); + writeBorderAndFontColorCell(xlsx, "H21", "Qt::green", Qt::green); + writeBorderAndFontColorCell(xlsx, "H23", "Qt::gray", Qt::gray); + + xlsx.saveAs("Book1.xlsx"); + + //Make sure that read/write works well. + Document xlsx2("Book1.xlsx"); + xlsx2.saveAs("Book2.xlsx"); + + return 0; +} diff --git a/examples/xlsx/xlsx.pro b/examples/xlsx/xlsx.pro index decde8e..b337552 100644 --- a/examples/xlsx/xlsx.pro +++ b/examples/xlsx/xlsx.pro @@ -7,5 +7,6 @@ SUBDIRS = hello style \ numberformat \ readwrite \ datavalidation \ - definename + definename \ + demo diff --git a/src/xlsx/doc/src/qtxlsx-index.qdoc b/src/xlsx/doc/src/qtxlsx-index.qdoc index 9e43fd3..e5f4c53 100644 --- a/src/xlsx/doc/src/qtxlsx-index.qdoc +++ b/src/xlsx/doc/src/qtxlsx-index.qdoc @@ -28,6 +28,17 @@ \page index.html \brief Qt Xlsx provides functionality for handling .xlsx files. + The \l{Qt Xlsx C++ Classes}{Qt Xlsx Module} provides a set of classes to read and write Excel files. It doesn't require + Microsoft Excel and can be used in any platform that Qt5 supported. The library can be used to + + \list + \li Generate a new .xlsx file from scratch + \li Extract data from an existing .xlsx file + \li Edit an existing .xlsx file + \endlist + + \image xlsx_demo.png + \table \row \li Source code: \li \l{https://github.com/dbzhang800/QtXlsxWriter} @@ -37,17 +48,6 @@ \li License: \li MIT \endtable - The \l{Qt Xlsx C++ Classes}{Qt Xlsx Module} provides a set of classes to read and write Excel files. It doesn't require - Microsoft Excel and can be used in any platform that Qt5 supported. - - The library can be used to - - \list - \li Generate a new .xlsx file from scratch - \li Extract data from an existing .xlsx file - \li Edit an existing .xlsx file - \endlist - \section1 Getting Started To include the definitions of the module's classes, using the following directive: