mirror of
https://github.com/QtExcel/QXlsx.git
synced 2025-01-16 04:42:53 +08:00
189 lines
5.7 KiB
C++
189 lines
5.7 KiB
C++
// readStyle.cpp
|
|
|
|
#include "xlsxcellrange.h"
|
|
#include "xlsxchart.h"
|
|
#include "xlsxchartsheet.h"
|
|
#include "xlsxdocument.h"
|
|
#include "xlsxrichstring.h"
|
|
#include "xlsxworkbook.h"
|
|
|
|
#include <QtCore>
|
|
#include <QtGlobal>
|
|
|
|
QXLSX_USE_NAMESPACE
|
|
|
|
int readGoogleSpreadsheet();
|
|
int readMSExcel201x();
|
|
int readMSExcel201xNumber(QXlsx::Document *pXlsx);
|
|
int readLibreOffice();
|
|
int readWPSOffice();
|
|
|
|
int readStyle()
|
|
{
|
|
int ret;
|
|
|
|
// ret = readGoogleSpreadsheet();
|
|
|
|
// ret = readMSExcel201x();
|
|
|
|
return 0;
|
|
}
|
|
|
|
int readGoogleSpreadsheet()
|
|
{
|
|
Document xlsx("google-spreadsheet.xlsx"); // google docs
|
|
|
|
if (!xlsx.isLoadPackage()) {
|
|
qDebug() << "[readGoogleSpreadsheet] failed to load package";
|
|
return (-1);
|
|
}
|
|
|
|
// current sheet is default sheet. (Sheet1)
|
|
|
|
for (int row = 1; row < 20; ++row) {
|
|
auto cell = xlsx.cellAt(row, 1);
|
|
if (cell == NULL)
|
|
continue;
|
|
QVariant var = cell->readValue();
|
|
qint32 styleNo = cell->styleNumber();
|
|
|
|
Format fmt = cell->format();
|
|
QString strFormat;
|
|
if (fmt.hasNumFmtData()) {
|
|
QString strNumFormat = fmt.numberFormat();
|
|
if (!strNumFormat.isEmpty())
|
|
strFormat = strFormat + QString(" number format : ") + strNumFormat;
|
|
}
|
|
|
|
if (fmt.hasFontData()) {
|
|
Format::FontScript fs = fmt.fontScript();
|
|
}
|
|
|
|
if (fmt.hasFillData()) {
|
|
int fillIndex = fmt.fillIndex();
|
|
QByteArray ba = fmt.fillKey();
|
|
}
|
|
|
|
if (fmt.hasBorderData()) {
|
|
}
|
|
|
|
if (fmt.hasAlignmentData()) {
|
|
}
|
|
|
|
if (fmt.hasProtectionData()) {
|
|
}
|
|
|
|
if (styleNo >= 0) {
|
|
qDebug() << row << " " << var << " , style:" << styleNo << strFormat;
|
|
} else {
|
|
qDebug() << row << " " << var << strFormat;
|
|
}
|
|
}
|
|
|
|
/* Debug Output
|
|
1 QVariant(double, 1) , style: 1 ""
|
|
2 QVariant(QString, "2") , style: 2 ""
|
|
3 QVariant(double, 3) , style: 3 ""
|
|
4 QVariant(double, 4) , style: 4 ""
|
|
5 QVariant(double, 5) , style: 5 ""
|
|
6 QVariant(double, 6) , style: 6 " number format : _([$\-412]* #,##0.00_);_([$\-412]*
|
|
\\(#,##0.00\\);_([$\-412]* \"-\"??_);_(@_)" 7 QVariant(double, 7) , style: 7 " number format
|
|
: #,##0.00;(#,##0.00)" 8 QVariant(double, 8) , style: 8 " number format : [$\-412]#,##0.00"
|
|
9 QVariant(double, 9) , style: 9 " number format : [$\-412]#,##0"
|
|
10 QVariant(QString, "1900. 1. 9") , style: 10 " number format : yyyy. M. d"
|
|
11 QVariant(QTime, QTime("00:00:00.000")) , style: 11 " number format : am/pm h:mm:ss"
|
|
12 QVariant(QString, "1900. 1. 11 AM 12:00:00") , style: 12 " number format : yyyy. M. d
|
|
am/pm h:mm:ss" 13 QVariant(QString, "312:0:0") , style: 13 ""
|
|
*/
|
|
|
|
/* Testing of read google spreadsheet file (made by google docs)
|
|
https://github.com/j2doll/QXlsx/blob/master/image/LibreOffice-Google-XLSX.png
|
|
|
|
1 QVariant(double, 1) OK:it's auto style (1)
|
|
2 QVariant(QString, "2") OK:it's shared string. (2) see ./xl/sharedStrings.xml
|
|
3 QVariant(double, 3) PENDING:it's number (3.00) (TODO: use style[3] of cell)
|
|
4 QVariant(double, 4) PENDING:it's percentage (400.00%) (TODO: use style[4] of cell)
|
|
5 QVariant(double, 5) PENDING:it's exponentiation (5.00E+00) (TODO: use style[5] of cell)
|
|
6 QVariant(double, 6) PENDING:it's accounting#1 ($ 6.00) (TODO: use style[6] of cell)
|
|
7 QVariant(double, 7) PENDING:it's accounting#2 (7.00) (TODO: use style[7] of cell)
|
|
8 QVariant(double, 8) PENDING:it's currency ($8.00) (TODO: use style[8] of cell)
|
|
9 QVariant(double, 9) PENDING:it's currency(rounds) ($9) (TODO: use style[9] of cell)
|
|
|
|
10 QVariant(QString, "1900. 1. 9") OK:it's shared string. see /xl/sharedStrings.xml
|
|
11 QVariant(QDateTime, QDateTime(1900-01-11 00:00:00.000 KOREA KST Qt::TimeSpec(LocalTime)))
|
|
PENDING:it means '1900Y.1M.11D.00H-00m-00s'. but, style[11] uses 'AM/PM HH:mm:ss' format. (TODO:
|
|
use style[11] of cell) 12 QVariant(QString, "1900. 1. 11 AM 12:00:00") OK:it's shared string.
|
|
see /xl/sharedStrings.xml 13 QVariant(QDateTime, QDateTime(1900-01-13 00:00:00.000 KOREA KST
|
|
Qt::TimeSpec(LocalTime))) NOK:it's period (312H:00m:00s). [it's date. but, 13 days means 312
|
|
hours!!]
|
|
*/
|
|
|
|
return 0;
|
|
}
|
|
|
|
int readLibreOffice()
|
|
{
|
|
// WAIT...
|
|
return 0;
|
|
}
|
|
|
|
int readMSExcel201x()
|
|
{
|
|
Document xlsx("ms-number.xlsx"); // ms office online
|
|
|
|
if (!xlsx.isLoadPackage()) {
|
|
qDebug() << "[ms-number] failed to load package";
|
|
return (-1);
|
|
}
|
|
|
|
return readMSExcel201xNumber(&xlsx);
|
|
}
|
|
|
|
int readMSExcel201xNumber(QXlsx::Document *pXlsx)
|
|
{
|
|
if (NULL == pXlsx)
|
|
return (-1);
|
|
|
|
for (int row = 1; row < 10; ++row) {
|
|
auto cell = pXlsx->cellAt(row, 1);
|
|
if (cell == NULL)
|
|
continue;
|
|
|
|
QVariant var = cell->readValue();
|
|
qint32 styleNo = cell->styleNumber();
|
|
Format fmt = cell->format();
|
|
|
|
QString strFomrat;
|
|
if (fmt.hasNumFmtData()) {
|
|
QString strNumFormat = fmt.numberFormat();
|
|
strFomrat = strFomrat + QString(" number format :") + strNumFormat;
|
|
}
|
|
|
|
if (styleNo >= 0) {
|
|
qDebug() << row << " " << var << " , style:" << styleNo << strFomrat;
|
|
} else {
|
|
qDebug() << row << " " << var << strFomrat;
|
|
}
|
|
}
|
|
|
|
/* Debug output
|
|
1 QVariant(double, 1) ""
|
|
2 QVariant(double, 2) , style: 1 " number format :0.00_ "
|
|
3 QVariant(double, 3000) , style: 2 " number format :#,##0_ "
|
|
4 QVariant(double, -4) , style: 3 " number format :0_ ;[Red]\\-0\\ "
|
|
|
|
cell value that is printed on excel
|
|
[1]
|
|
[2.00]
|
|
[3,000]
|
|
[red minus four]
|
|
*/
|
|
|
|
return 0;
|
|
}
|
|
|
|
int readWPSOffice()
|
|
{
|
|
return 0;
|
|
}
|