Fix issue 6: row & column No. starts from 1 instead of 0 now
This commit is contained in:
@@ -7,10 +7,10 @@ int main()
|
|||||||
{
|
{
|
||||||
//![0]
|
//![0]
|
||||||
Document xlsx;
|
Document xlsx;
|
||||||
for (int i=0; i<10; ++i) {
|
for (int i=1; i<=10; ++i) {
|
||||||
xlsx.write(i, 0, i);
|
xlsx.write(i, 1, i);
|
||||||
xlsx.write(i, 1, i*i);
|
xlsx.write(i, 2, i*i);
|
||||||
xlsx.write(i, 2, i*i*i);
|
xlsx.write(i, 3, i*i*i);
|
||||||
}
|
}
|
||||||
//![0]
|
//![0]
|
||||||
//![1]
|
//![1]
|
||||||
@@ -20,12 +20,12 @@ int main()
|
|||||||
xlsx.defineName("Factor", "=0.5");
|
xlsx.defineName("Factor", "=0.5");
|
||||||
//![1]
|
//![1]
|
||||||
//![2]
|
//![2]
|
||||||
xlsx.write(10, 0, "=SUM(MyCol_1)");
|
xlsx.write(11, 1, "=SUM(MyCol_1)");
|
||||||
xlsx.write(10, 1, "=SUM(MyCol_2)");
|
xlsx.write(11, 2, "=SUM(MyCol_2)");
|
||||||
xlsx.write(10, 2, "=SUM(MyCol_3)");
|
xlsx.write(11, 3, "=SUM(MyCol_3)");
|
||||||
xlsx.write(11, 0, "=SUM(MyCol_1)*Factor");
|
xlsx.write(12, 1, "=SUM(MyCol_1)*Factor");
|
||||||
xlsx.write(11, 1, "=SUM(MyCol_2)*Factor");
|
xlsx.write(12, 2, "=SUM(MyCol_2)*Factor");
|
||||||
xlsx.write(11, 2, "=SUM(MyCol_3)*Factor");
|
xlsx.write(12, 3, "=SUM(MyCol_3)*Factor");
|
||||||
//![2]
|
//![2]
|
||||||
|
|
||||||
xlsx.save();
|
xlsx.save();
|
||||||
|
|||||||
+27
-26
@@ -74,18 +74,18 @@ void writeInternalNumFormatsCell(Document &xlsx, int row, double value, int numF
|
|||||||
{
|
{
|
||||||
Format *format = xlsx.createFormat();
|
Format *format = xlsx.createFormat();
|
||||||
format->setNumberFormatIndex(numFmt);
|
format->setNumberFormatIndex(numFmt);
|
||||||
xlsx.write(row, 0, value);
|
xlsx.write(row, 1, value);
|
||||||
xlsx.write(row, 1, QString("Builtin NumFmt %1").arg(numFmt));
|
xlsx.write(row, 2, QString("Builtin NumFmt %1").arg(numFmt));
|
||||||
xlsx.write(row, 2, value, format);
|
xlsx.write(row, 3, value, format);
|
||||||
}
|
}
|
||||||
|
|
||||||
void writeCustomNumFormatsCell(Document &xlsx, int row, double value, const QString &numFmt)
|
void writeCustomNumFormatsCell(Document &xlsx, int row, double value, const QString &numFmt)
|
||||||
{
|
{
|
||||||
Format *format = xlsx.createFormat();
|
Format *format = xlsx.createFormat();
|
||||||
format->setNumberFormat(numFmt);
|
format->setNumberFormat(numFmt);
|
||||||
xlsx.write(row, 0, value);
|
xlsx.write(row, 1, value);
|
||||||
xlsx.write(row, 1, numFmt);
|
xlsx.write(row, 2, numFmt);
|
||||||
xlsx.write(row, 2, value, format);
|
xlsx.write(row, 3, value, format);
|
||||||
}
|
}
|
||||||
|
|
||||||
int main()
|
int main()
|
||||||
@@ -243,19 +243,19 @@ int main()
|
|||||||
//Create the fourth sheet.
|
//Create the fourth sheet.
|
||||||
xlsx.addWorksheet("NumFormats");
|
xlsx.addWorksheet("NumFormats");
|
||||||
xlsx.setColumn("B", "B", 40);
|
xlsx.setColumn("B", "B", 40);
|
||||||
writeInternalNumFormatsCell(xlsx, 3, 2.5681, 2);
|
writeInternalNumFormatsCell(xlsx, 4, 2.5681, 2);
|
||||||
writeInternalNumFormatsCell(xlsx, 4, 2500000, 3);
|
writeInternalNumFormatsCell(xlsx, 5, 2500000, 3);
|
||||||
writeInternalNumFormatsCell(xlsx, 5, -500, 5);
|
writeInternalNumFormatsCell(xlsx, 6, -500, 5);
|
||||||
writeInternalNumFormatsCell(xlsx, 6, -0.25, 9);
|
writeInternalNumFormatsCell(xlsx, 7, -0.25, 9);
|
||||||
writeInternalNumFormatsCell(xlsx, 7, 890, 11);
|
writeInternalNumFormatsCell(xlsx, 8, 890, 11);
|
||||||
writeInternalNumFormatsCell(xlsx, 8, 0.75, 12);
|
writeInternalNumFormatsCell(xlsx, 9, 0.75, 12);
|
||||||
writeInternalNumFormatsCell(xlsx, 9, 41499, 14);
|
writeInternalNumFormatsCell(xlsx, 10, 41499, 14);
|
||||||
writeInternalNumFormatsCell(xlsx, 10, 41499, 17);
|
writeInternalNumFormatsCell(xlsx, 11, 41499, 17);
|
||||||
|
|
||||||
writeCustomNumFormatsCell(xlsx, 12, 20.5627, "#.###");
|
writeCustomNumFormatsCell(xlsx, 13, 20.5627, "#.###");
|
||||||
writeCustomNumFormatsCell(xlsx, 13, 4.8, "#.00");
|
writeCustomNumFormatsCell(xlsx, 14, 4.8, "#.00");
|
||||||
writeCustomNumFormatsCell(xlsx, 14, 1.23, "0.00 \"RMB\"");
|
writeCustomNumFormatsCell(xlsx, 15, 1.23, "0.00 \"RMB\"");
|
||||||
writeCustomNumFormatsCell(xlsx, 15, 60, "[Red][<=100];[Green][>100]");
|
writeCustomNumFormatsCell(xlsx, 16, 60, "[Red][<=100];[Green][>100]");
|
||||||
|
|
||||||
//---------------------------------------------------------------
|
//---------------------------------------------------------------
|
||||||
//Create the fifth sheet.
|
//Create the fifth sheet.
|
||||||
@@ -274,16 +274,17 @@ int main()
|
|||||||
//Create the fifth sheet.
|
//Create the fifth sheet.
|
||||||
xlsx.addWorksheet("Grouping");
|
xlsx.addWorksheet("Grouping");
|
||||||
qsrand(QDateTime::currentMSecsSinceEpoch());
|
qsrand(QDateTime::currentMSecsSinceEpoch());
|
||||||
for (int row=1; row<31; ++row) {
|
for (int row=2; row<31; ++row) {
|
||||||
for (int col=0; col<10; ++col)
|
for (int col=1; col<=10; ++col)
|
||||||
xlsx.write(row, col, qrand() % 100);
|
xlsx.write(row, col, qrand() % 100);
|
||||||
}
|
}
|
||||||
xlsx.groupRows(3, 6);
|
xlsx.groupRows(4, 7);
|
||||||
xlsx.groupRows(10, 25, false);
|
xlsx.groupRows(11, 26, false);
|
||||||
xlsx.groupRows(14, 16, false);
|
xlsx.groupRows(15, 17, false);
|
||||||
xlsx.groupRows(19, 21, false);
|
xlsx.groupRows(20, 22, false);
|
||||||
xlsx.groupColumns(0, 1);
|
xlsx.setColumn(1, 10, 10.0);
|
||||||
xlsx.groupColumns(4, 7, false);
|
xlsx.groupColumns(1, 2);
|
||||||
|
xlsx.groupColumns(5, 8, false);
|
||||||
|
|
||||||
xlsx.saveAs("Book1.xlsx");
|
xlsx.saveAs("Book1.xlsx");
|
||||||
|
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ int main(int argc, char** argv)
|
|||||||
QGuiApplication(argc, argv);
|
QGuiApplication(argc, argv);
|
||||||
|
|
||||||
QXlsx::Document xlsx;
|
QXlsx::Document xlsx;
|
||||||
xlsx.setColumn(0, 4, 20.0);
|
xlsx.setColumn(1, 4, 20.0);
|
||||||
|
|
||||||
QXlsx::Format *header = xlsx.createFormat();
|
QXlsx::Format *header = xlsx.createFormat();
|
||||||
header->setFontBold(true);
|
header->setFontBold(true);
|
||||||
@@ -19,32 +19,32 @@ int main(int argc, char** argv)
|
|||||||
<<"yyyy-mmm-dd"
|
<<"yyyy-mmm-dd"
|
||||||
<<"$ #,##0.00"
|
<<"$ #,##0.00"
|
||||||
<<"[red]0.00";
|
<<"[red]0.00";
|
||||||
xlsx.write(0, 0, "Raw data", header);
|
xlsx.write(1, 1, "Raw data", header);
|
||||||
xlsx.write(0, 1, "Format", header);
|
xlsx.write(1, 2, "Format", header);
|
||||||
xlsx.write(0, 2, "Shown value", header);
|
xlsx.write(1, 3, "Shown value", header);
|
||||||
for (int i=0; i<numFormats.size(); ++i) {
|
for (int i=0; i<numFormats.size(); ++i) {
|
||||||
int row = i+1;
|
int row = i+2;
|
||||||
xlsx.write(row, 0, 100.0);
|
xlsx.write(row, 1, 100.0);
|
||||||
xlsx.write(row, 1, numFormats[i]);
|
xlsx.write(row, 2, numFormats[i]);
|
||||||
QXlsx::Format *format = xlsx.createFormat();
|
QXlsx::Format *format = xlsx.createFormat();
|
||||||
format->setNumberFormat(numFormats[i]);
|
format->setNumberFormat(numFormats[i]);
|
||||||
xlsx.write(row, 2, 100.0, format);
|
xlsx.write(row, 3, 100.0, format);
|
||||||
}
|
}
|
||||||
|
|
||||||
//Builtin number formats
|
//Builtin number formats
|
||||||
xlsx.addWorksheet();
|
xlsx.addWorksheet();
|
||||||
xlsx.setColumn(0, 4, 20.0);
|
xlsx.setColumn(1, 4, 20.0);
|
||||||
xlsx.write(0, 0, "Raw data", header);
|
xlsx.write(1, 1, "Raw data", header);
|
||||||
xlsx.write(0, 1, "Builtin Format", header);
|
xlsx.write(1, 2, "Builtin Format", header);
|
||||||
xlsx.write(0, 2, "Shown value", header);
|
xlsx.write(1, 3, "Shown value", header);
|
||||||
for (int i=0; i<50; ++i) {
|
for (int i=0; i<50; ++i) {
|
||||||
int row = i+1;
|
int row = i+2;
|
||||||
int numFmt = i;
|
int numFmt = i;
|
||||||
xlsx.write(row, 0, 100.0);
|
xlsx.write(row, 1, 100.0);
|
||||||
xlsx.write(row, 1, numFmt);
|
xlsx.write(row, 2, numFmt);
|
||||||
QXlsx::Format *format = xlsx.createFormat();
|
QXlsx::Format *format = xlsx.createFormat();
|
||||||
format->setNumberFormatIndex(numFmt);
|
format->setNumberFormatIndex(numFmt);
|
||||||
xlsx.write(row, 2, 100.0, format);
|
xlsx.write(row, 3, 100.0, format);
|
||||||
}
|
}
|
||||||
|
|
||||||
xlsx.save();
|
xlsx.save();
|
||||||
|
|||||||
@@ -5,31 +5,31 @@
|
|||||||
int main()
|
int main()
|
||||||
{
|
{
|
||||||
QXlsx::Document xlsx;
|
QXlsx::Document xlsx;
|
||||||
xlsx.write(0, 2, "Row:0, Col:2 ==> (C1)");
|
xlsx.write(1, 2, "Row:0, Col:2 ==> (C1)");
|
||||||
|
|
||||||
//Set the height of the first row to 50.0(points)
|
//Set the height of the first row to 50.0(points)
|
||||||
xlsx.setRow(0, 50.0);
|
xlsx.setRow(1, 50.0);
|
||||||
|
|
||||||
//Set the width of the third column to 40.0(chars)
|
//Set the width of the third column to 40.0(chars)
|
||||||
xlsx.setColumn(2, 3, 40.0);
|
xlsx.setColumn(3, 3, 40.0);
|
||||||
|
|
||||||
//Set style for the row 11th.
|
//Set style for the row 11th.
|
||||||
QXlsx::Format *format1 = xlsx.createFormat();
|
QXlsx::Format *format1 = xlsx.createFormat();
|
||||||
format1->setFontBold(true);
|
format1->setFontBold(true);
|
||||||
format1->setFontColor(QColor(Qt::blue));
|
format1->setFontColor(QColor(Qt::blue));
|
||||||
format1->setFontSize(20);
|
format1->setFontSize(20);
|
||||||
xlsx.write(10, 0, "Hello Row Style");
|
xlsx.write(11, 1, "Hello Row Style");
|
||||||
xlsx.write(10, 5, "Blue Color");
|
xlsx.write(11, 6, "Blue Color");
|
||||||
xlsx.setRow(10, 40, format1);
|
xlsx.setRow(11, 41, format1);
|
||||||
|
|
||||||
//Set style for the col [9th, 16th)
|
//Set style for the col [9th, 16th)
|
||||||
QXlsx::Format *format2 = xlsx.createFormat();
|
QXlsx::Format *format2 = xlsx.createFormat();
|
||||||
format2->setFontBold(true);
|
format2->setFontBold(true);
|
||||||
format2->setFontColor(QColor(Qt::magenta));
|
format2->setFontColor(QColor(Qt::magenta));
|
||||||
for (int row=11; row<30; row++)
|
for (int row=12; row<=30; row++)
|
||||||
for (int col=8; col<15; col++)
|
for (int col=9; col<=15; col++)
|
||||||
xlsx.write(row, col, row+col);
|
xlsx.write(row, col, row+col);
|
||||||
xlsx.setColumn(8, 15, 5.0, format2);
|
xlsx.setColumn(9, 16, 5.0, format2);
|
||||||
|
|
||||||
xlsx.save();
|
xlsx.save();
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
@@ -24,17 +24,17 @@ int main()
|
|||||||
format3->setFontBold(true);
|
format3->setFontBold(true);
|
||||||
format3->setFontColor(QColor(Qt::blue));
|
format3->setFontColor(QColor(Qt::blue));
|
||||||
format3->setFontSize(20);
|
format3->setFontSize(20);
|
||||||
xlsx.write(10, 0, "Hello Row Style");
|
xlsx.write(11, 1, "Hello Row Style");
|
||||||
xlsx.write(10, 5, "Blue Color");
|
xlsx.write(11, 6, "Blue Color");
|
||||||
xlsx.setRow(10, 40, format3);
|
xlsx.setRow(11, 41, format3);
|
||||||
|
|
||||||
QXlsx::Format *format4 = xlsx.createFormat();
|
QXlsx::Format *format4 = xlsx.createFormat();
|
||||||
format4->setFontBold(true);
|
format4->setFontBold(true);
|
||||||
format4->setFontColor(QColor(Qt::magenta));
|
format4->setFontColor(QColor(Qt::magenta));
|
||||||
for (int row=20; row<40; row++)
|
for (int row=21; row<=40; row++)
|
||||||
for (int col=8; col<15; col++)
|
for (int col=9; col<16; col++)
|
||||||
xlsx.write(row, col, row+col);
|
xlsx.write(row, col, row+col);
|
||||||
xlsx.setColumn(8, 15, 5.0, format4);
|
xlsx.setColumn(9, 16, 5.0, format4);
|
||||||
|
|
||||||
xlsx.write("A5", QDate(2013, 8, 29));
|
xlsx.write("A5", QDate(2013, 8, 29));
|
||||||
|
|
||||||
|
|||||||
@@ -181,32 +181,19 @@ int Document::unmergeCells(const CellRange &range)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief Set properties for a row of cells.
|
Sets row \a height and \a format. Row height measured in point size. If format
|
||||||
* \param row The worksheet row (zero indexed).
|
equals 0 then format is ignored. \a row is 1-indexed.
|
||||||
* \param height The row height.
|
|
||||||
* \param format Optional Format object.
|
|
||||||
* \param hidden
|
|
||||||
*/
|
*/
|
||||||
bool Document::setRow(int row, double height, Format *format, bool hidden)
|
bool Document::setRow(int row, double height, Format *format, bool hidden)
|
||||||
{
|
{
|
||||||
return currentWorksheet()->setRow(row, height, format, hidden);
|
return currentWorksheet()->setRow(row, height, format, hidden);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
|
||||||
\overload
|
|
||||||
Sets row height and format. Row height measured in point size. If format
|
|
||||||
equals 0 then format is ignored. \a row should be "1", "2", "3", ...
|
|
||||||
*/
|
|
||||||
bool Document::setRow(const QString &row, double height, Format *format, bool hidden)
|
|
||||||
{
|
|
||||||
return currentWorksheet()->setRow(row, height, format, hidden);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
Sets column width and format for all columns from colFirst to colLast. Column
|
Sets column width and format for all columns from colFirst to colLast. Column
|
||||||
width measured as the number of characters of the maximum digit width of the
|
width measured as the number of characters of the maximum digit width of the
|
||||||
numbers 0, 1, 2, ..., 9 as rendered in the normal style's font. If format
|
numbers 0, 1, 2, ..., 9 as rendered in the normal style's font. If format
|
||||||
equals 0 then format is ignored. \a colFirst and \a colLast are all zero-indexed.
|
equals 0 then format is ignored. \a colFirst and \a colLast are all 1-indexed.
|
||||||
*/
|
*/
|
||||||
bool Document::setColumn(int colFirst, int colLast, double width, Format *format, bool hidden)
|
bool Document::setColumn(int colFirst, int colLast, double width, Format *format, bool hidden)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -63,7 +63,6 @@ public:
|
|||||||
int unmergeCells(const CellRange &range);
|
int unmergeCells(const CellRange &range);
|
||||||
int unmergeCells(const QString &range);
|
int unmergeCells(const QString &range);
|
||||||
bool setRow(int row, double height, Format* format=0, bool hidden=false);
|
bool setRow(int row, double height, Format* format=0, bool hidden=false);
|
||||||
bool setRow(const QString &row, double height, Format* format=0, bool hidden=false);
|
|
||||||
bool setColumn(int colFirst, int colLast, double width, Format* format=0, bool hidden=false);
|
bool setColumn(int colFirst, int colLast, double width, Format* format=0, bool hidden=false);
|
||||||
bool setColumn(const QString &colFirst, const QString &colLast, double width, Format* format=0, bool hidden=false);
|
bool setColumn(const QString &colFirst, const QString &colLast, double width, Format* format=0, bool hidden=false);
|
||||||
bool groupRows(int rowFirst, int rowLast, bool collapsed = true);
|
bool groupRows(int rowFirst, int rowLast, bool collapsed = true);
|
||||||
|
|||||||
@@ -91,7 +91,7 @@ QDateTime datetimeFromNumber(double num, bool is1904)
|
|||||||
QPoint xl_cell_to_rowcol(const QString &cell_str)
|
QPoint xl_cell_to_rowcol(const QString &cell_str)
|
||||||
{
|
{
|
||||||
if (cell_str.isEmpty())
|
if (cell_str.isEmpty())
|
||||||
return QPoint(0, 0);
|
return QPoint(-1, -1);
|
||||||
QRegularExpression re(QStringLiteral("^([A-Z]{1,3})(\\d+)$"));
|
QRegularExpression re(QStringLiteral("^([A-Z]{1,3})(\\d+)$"));
|
||||||
QRegularExpressionMatch match = re.match(cell_str);
|
QRegularExpressionMatch match = re.match(cell_str);
|
||||||
if (match.hasMatch()) {
|
if (match.hasMatch()) {
|
||||||
@@ -104,8 +104,7 @@ QPoint xl_cell_to_rowcol(const QString &cell_str)
|
|||||||
expn++;
|
expn++;
|
||||||
}
|
}
|
||||||
|
|
||||||
col--;
|
int row = row_str.toInt();
|
||||||
int row = row_str.toInt() - 1;
|
|
||||||
return QPoint(row, col);
|
return QPoint(row, col);
|
||||||
} else {
|
} else {
|
||||||
return QPoint(-1, -1); //...
|
return QPoint(-1, -1); //...
|
||||||
@@ -114,7 +113,6 @@ QPoint xl_cell_to_rowcol(const QString &cell_str)
|
|||||||
|
|
||||||
QString xl_col_to_name(int col_num)
|
QString xl_col_to_name(int col_num)
|
||||||
{
|
{
|
||||||
col_num += 1; //Change to 1-index
|
|
||||||
QString col_str;
|
QString col_str;
|
||||||
|
|
||||||
int remainder;
|
int remainder;
|
||||||
@@ -141,7 +139,6 @@ int xl_col_name_to_value(const QString &col_str)
|
|||||||
expn++;
|
expn++;
|
||||||
}
|
}
|
||||||
|
|
||||||
col--;
|
|
||||||
return col;
|
return col;
|
||||||
}
|
}
|
||||||
return -1;
|
return -1;
|
||||||
@@ -149,7 +146,6 @@ int xl_col_name_to_value(const QString &col_str)
|
|||||||
|
|
||||||
QString xl_rowcol_to_cell(int row, int col, bool row_abs, bool col_abs)
|
QString xl_rowcol_to_cell(int row, int col, bool row_abs, bool col_abs)
|
||||||
{
|
{
|
||||||
row += 1; //Change to 1-index
|
|
||||||
QString cell_str;
|
QString cell_str;
|
||||||
if (col_abs)
|
if (col_abs)
|
||||||
cell_str.append(QLatin1Char('$'));
|
cell_str.append(QLatin1Char('$'));
|
||||||
@@ -170,7 +166,7 @@ QString xl_rowcol_to_cell_fast(int row, int col)
|
|||||||
col_str = xl_col_to_name(col);
|
col_str = xl_col_to_name(col);
|
||||||
col_cache[col] = col_str;
|
col_cache[col] = col_str;
|
||||||
}
|
}
|
||||||
return col_str + QString::number(row+1);
|
return col_str + QString::number(row);
|
||||||
}
|
}
|
||||||
|
|
||||||
} //namespace QXlsx
|
} //namespace QXlsx
|
||||||
|
|||||||
+20
-30
@@ -122,7 +122,7 @@ void WorksheetPrivate::calculateSpans()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((row_num + 1)%16 == 0 || row_num == dimension.lastRow()) {
|
if ((row_num)%16 == 0 || row_num == dimension.lastRow()) {
|
||||||
int span_index = row_num / 16;
|
int span_index = row_num / 16;
|
||||||
if (span_max != INT32_MIN) {
|
if (span_max != INT32_MIN) {
|
||||||
span_min += 1;
|
span_min += 1;
|
||||||
@@ -426,6 +426,10 @@ QList<QPair<QString, QString> > Worksheet::drawingLinks() const
|
|||||||
return d->drawingLinks;
|
return d->drawingLinks;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* Write \a value to cell (\a row, \a column) with the \a format.
|
||||||
|
* Both \a row and \a column are all 1-indexed value.
|
||||||
|
*/
|
||||||
int Worksheet::write(int row, int column, const QVariant &value, Format *format)
|
int Worksheet::write(int row, int column, const QVariant &value, Format *format)
|
||||||
{
|
{
|
||||||
Q_D(Worksheet);
|
Q_D(Worksheet);
|
||||||
@@ -850,9 +854,10 @@ void Worksheet::saveToXmlFile(QIODevice *device)
|
|||||||
it.next();
|
it.next();
|
||||||
QSharedPointer<XlsxColumnInfo> col_info = it.value();
|
QSharedPointer<XlsxColumnInfo> col_info = it.value();
|
||||||
writer.writeStartElement(QStringLiteral("col"));
|
writer.writeStartElement(QStringLiteral("col"));
|
||||||
writer.writeAttribute(QStringLiteral("min"), QString::number(col_info->firstColumn + 1));
|
writer.writeAttribute(QStringLiteral("min"), QString::number(col_info->firstColumn));
|
||||||
writer.writeAttribute(QStringLiteral("max"), QString::number(col_info->lastColumn + 1));
|
writer.writeAttribute(QStringLiteral("max"), QString::number(col_info->lastColumn));
|
||||||
writer.writeAttribute(QStringLiteral("width"), QString::number(col_info->width, 'g', 15));
|
if (col_info->width)
|
||||||
|
writer.writeAttribute(QStringLiteral("width"), QString::number(col_info->width, 'g', 15));
|
||||||
if (col_info->format)
|
if (col_info->format)
|
||||||
writer.writeAttribute(QStringLiteral("style"), QString::number(col_info->format->xfIndex()));
|
writer.writeAttribute(QStringLiteral("style"), QString::number(col_info->format->xfIndex()));
|
||||||
if (col_info->hidden)
|
if (col_info->hidden)
|
||||||
@@ -891,14 +896,14 @@ void WorksheetPrivate::writeSheetData(XmlStreamWriter &writer)
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
int span_index = row_num / 16;
|
int span_index = (row_num-1) / 16;
|
||||||
QString span;
|
QString span;
|
||||||
if (row_spans.contains(span_index))
|
if (row_spans.contains(span_index))
|
||||||
span = row_spans[span_index];
|
span = row_spans[span_index];
|
||||||
|
|
||||||
if (cellTable.contains(row_num)) {
|
if (cellTable.contains(row_num)) {
|
||||||
writer.writeStartElement(QStringLiteral("row"));
|
writer.writeStartElement(QStringLiteral("row"));
|
||||||
writer.writeAttribute(QStringLiteral("r"), QString::number(row_num + 1));
|
writer.writeAttribute(QStringLiteral("r"), QString::number(row_num));
|
||||||
|
|
||||||
if (!span.isEmpty())
|
if (!span.isEmpty())
|
||||||
writer.writeAttribute(QStringLiteral("spans"), span);
|
writer.writeAttribute(QStringLiteral("spans"), span);
|
||||||
@@ -938,10 +943,10 @@ void WorksheetPrivate::writeSheetData(XmlStreamWriter &writer)
|
|||||||
void WorksheetPrivate::writeCellData(XmlStreamWriter &writer, int row, int col, QSharedPointer<Cell> cell)
|
void WorksheetPrivate::writeCellData(XmlStreamWriter &writer, int row, int col, QSharedPointer<Cell> cell)
|
||||||
{
|
{
|
||||||
//This is the innermost loop so efficiency is important.
|
//This is the innermost loop so efficiency is important.
|
||||||
QString cell_range = xl_rowcol_to_cell_fast(row, col);
|
QString cell_pos = xl_rowcol_to_cell_fast(row, col);
|
||||||
|
|
||||||
writer.writeStartElement(QStringLiteral("c"));
|
writer.writeStartElement(QStringLiteral("c"));
|
||||||
writer.writeAttribute(QStringLiteral("r"), cell_range);
|
writer.writeAttribute(QStringLiteral("r"), cell_pos);
|
||||||
|
|
||||||
//Style used by the cell, row or col
|
//Style used by the cell, row or col
|
||||||
if (cell->format())
|
if (cell->format())
|
||||||
@@ -1127,8 +1132,8 @@ void WorksheetPrivate::writeDrawings(XmlStreamWriter &writer)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
Sets row height and format. Row height measured in point size. If format
|
Sets row \a height and \a format. Row height measured in point size. If format
|
||||||
equals 0 then format is ignored. \a row is zero-indexed.
|
equals 0 then format is ignored. \a row is 1-indexed.
|
||||||
*/
|
*/
|
||||||
bool Worksheet::setRow(int row, double height, Format *format, bool hidden)
|
bool Worksheet::setRow(int row, double height, Format *format, bool hidden)
|
||||||
{
|
{
|
||||||
@@ -1143,21 +1148,6 @@ bool Worksheet::setRow(int row, double height, Format *format, bool hidden)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
|
||||||
\overload
|
|
||||||
Sets row height and format. Row height measured in point size. If format
|
|
||||||
equals 0 then format is ignored. \a row should be "1", "2", "3", ...
|
|
||||||
*/
|
|
||||||
bool Worksheet::setRow(const QString &row, double height, Format *format, bool hidden)
|
|
||||||
{
|
|
||||||
bool ok=true;
|
|
||||||
int r = row.toInt(&ok);
|
|
||||||
if (ok)
|
|
||||||
return setRow(r-1, height, format, hidden);
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void WorksheetPrivate::splitColsInfo(int colFirst, int colLast)
|
void WorksheetPrivate::splitColsInfo(int colFirst, int colLast)
|
||||||
{
|
{
|
||||||
// Split current columnInfo, for example, if "A:H" has been set,
|
// Split current columnInfo, for example, if "A:H" has been set,
|
||||||
@@ -1201,10 +1191,10 @@ void WorksheetPrivate::splitColsInfo(int colFirst, int colLast)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
Sets column width and format for all columns from colFirst to colLast. Column
|
Sets column \a width and \a format for all columns from \a colFirst to \a colLast. Column
|
||||||
width measured as the number of characters of the maximum digit width of the
|
width measured as the number of characters of the maximum digit width of the
|
||||||
numbers 0, 1, 2, ..., 9 as rendered in the normal style's font. If format
|
numbers 0, 1, 2, ..., 9 as rendered in the normal style's font. If format
|
||||||
equals 0 then format is ignored.
|
equals 0 then format is ignored. Both \a colFirst and \a colLast are all 1-indexed.
|
||||||
*/
|
*/
|
||||||
bool Worksheet::setColumn(int colFirst, int colLast, double width, Format *format, bool hidden)
|
bool Worksheet::setColumn(int colFirst, int colLast, double width, Format *format, bool hidden)
|
||||||
{
|
{
|
||||||
@@ -1625,7 +1615,7 @@ void WorksheetPrivate::readSheetData(XmlStreamReader &reader)
|
|||||||
|
|
||||||
//"r" is optional too.
|
//"r" is optional too.
|
||||||
if (attributes.hasAttribute(QLatin1String("r"))) {
|
if (attributes.hasAttribute(QLatin1String("r"))) {
|
||||||
int row = attributes.value(QLatin1String("r")).toInt()-1;
|
int row = attributes.value(QLatin1String("r")).toInt();
|
||||||
rowsInfo[row] = info;
|
rowsInfo[row] = info;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1731,8 +1721,8 @@ void WorksheetPrivate::readColumnsInfo(XmlStreamReader &reader)
|
|||||||
QXmlStreamAttributes colAttrs = reader.attributes();
|
QXmlStreamAttributes colAttrs = reader.attributes();
|
||||||
int min = colAttrs.value(QLatin1String("min")).toInt();
|
int min = colAttrs.value(QLatin1String("min")).toInt();
|
||||||
int max = colAttrs.value(QLatin1String("max")).toInt();
|
int max = colAttrs.value(QLatin1String("max")).toInt();
|
||||||
info->firstColumn = min - 1;
|
info->firstColumn = min;
|
||||||
info->lastColumn = max - 1;
|
info->lastColumn = max;
|
||||||
|
|
||||||
//!Todo, customWidth support.
|
//!Todo, customWidth support.
|
||||||
//Note, node may have "width" without "customWidth"
|
//Note, node may have "width" without "customWidth"
|
||||||
|
|||||||
@@ -68,18 +68,18 @@ void UtilityTest::test_cell_to_rowcol_data()
|
|||||||
QTest::addColumn<int>("row");
|
QTest::addColumn<int>("row");
|
||||||
QTest::addColumn<int>("col");
|
QTest::addColumn<int>("col");
|
||||||
|
|
||||||
QTest::newRow("A1") << "A1" << 0 << 0;
|
QTest::newRow("A1") << "A1" << 1 << 1;
|
||||||
QTest::newRow("B1") << "B1" << 0 << 1;
|
QTest::newRow("B1") << "B1" << 1 << 2;
|
||||||
QTest::newRow("C1") << "C1" << 0 << 2;
|
QTest::newRow("C1") << "C1" << 1 << 3;
|
||||||
QTest::newRow("J1") << "J1" << 0 << 9;
|
QTest::newRow("J1") << "J1" << 1 << 10;
|
||||||
QTest::newRow("A2") << "A2" << 1 << 0;
|
QTest::newRow("A2") << "A2" << 2 << 1;
|
||||||
QTest::newRow("A3") << "A3" << 2 << 0;
|
QTest::newRow("A3") << "A3" << 3 << 1;
|
||||||
QTest::newRow("A10") << "A10" << 9 << 0;
|
QTest::newRow("A10") << "A10" << 10 << 1;
|
||||||
QTest::newRow("Z8") << "Z8" << 7 << 25;
|
QTest::newRow("Z8") << "Z8" << 8 << 26;
|
||||||
QTest::newRow("AA10") << "AA10" << 9 << 26;
|
QTest::newRow("AA10") << "AA10" << 10 << 27;
|
||||||
QTest::newRow("IU2") << "IU2" << 1 << 254;
|
QTest::newRow("IU2") << "IU2" << 2 << 255;
|
||||||
QTest::newRow("XFD1") << "XFD1" << 0 << 16383;
|
QTest::newRow("XFD1") << "XFD1" << 1 << 16384;
|
||||||
QTest::newRow("XFE1048577") << "XFE1048577" << 1048576 << 16384;
|
QTest::newRow("XFE1048577") << "XFE1048577" << 1048577 << 16385;
|
||||||
}
|
}
|
||||||
|
|
||||||
void UtilityTest::test_rowcol_to_cell()
|
void UtilityTest::test_rowcol_to_cell()
|
||||||
@@ -101,11 +101,11 @@ void UtilityTest::test_rowcol_to_cell_data()
|
|||||||
QTest::addColumn<bool>("col_abs");
|
QTest::addColumn<bool>("col_abs");
|
||||||
QTest::addColumn<QString>("cell");
|
QTest::addColumn<QString>("cell");
|
||||||
|
|
||||||
QTest::newRow("simple") << 0 << 0 << false << false << "A1";
|
QTest::newRow("simple") << 1 << 1 << false << false << "A1";
|
||||||
QTest::newRow("rowabs") << 0 << 0 << true << false << "A$1";
|
QTest::newRow("rowabs") << 1 << 1 << true << false << "A$1";
|
||||||
QTest::newRow("colabs") << 0 << 0 << false << true << "$A1";
|
QTest::newRow("colabs") << 1 << 1 << false << true << "$A1";
|
||||||
QTest::newRow("bothabs") << 0 << 0 << true << true << "$A$1";
|
QTest::newRow("bothabs") << 1 << 1 << true << true << "$A$1";
|
||||||
QTest::newRow("...") << 1048576 << 16384 << false << false << "XFE1048577";
|
QTest::newRow("...") << 1048577 << 16385 << false << false << "XFE1048577";
|
||||||
}
|
}
|
||||||
|
|
||||||
void UtilityTest::test_datetimeToNumber_data()
|
void UtilityTest::test_datetimeToNumber_data()
|
||||||
|
|||||||
@@ -55,16 +55,16 @@ void WorksheetTest::testDimension()
|
|||||||
|
|
||||||
sheet.write("C3", "Test");
|
sheet.write("C3", "Test");
|
||||||
qDebug()<<sheet.dimension().toString();
|
qDebug()<<sheet.dimension().toString();
|
||||||
QCOMPARE(sheet.dimension(), QXlsx::CellRange(2, 2, 2, 2)); //Single Cell
|
QCOMPARE(sheet.dimension(), QXlsx::CellRange(3, 3, 3, 3)); //Single Cell
|
||||||
|
|
||||||
sheet.write("B2", "Second");
|
sheet.write("B2", "Second");
|
||||||
QCOMPARE(sheet.dimension(), QXlsx::CellRange(1, 1, 2, 2));
|
QCOMPARE(sheet.dimension(), QXlsx::CellRange(2, 2, 3, 3));
|
||||||
|
|
||||||
sheet.write("D4", "Test");
|
sheet.write("D4", "Test");
|
||||||
QCOMPARE(sheet.dimension(), QXlsx::CellRange("B2:D4"));
|
QCOMPARE(sheet.dimension(), QXlsx::CellRange("B2:D4"));
|
||||||
|
|
||||||
sheet.write(10000, 10000, "For test");
|
sheet.write(10000, 10000, "For test");
|
||||||
QCOMPARE(sheet.dimension(), QXlsx::CellRange(1, 1, 10000, 10000));
|
QCOMPARE(sheet.dimension(), QXlsx::CellRange(2, 2, 10000, 10000));
|
||||||
}
|
}
|
||||||
|
|
||||||
void WorksheetTest::testSheetView()
|
void WorksheetTest::testSheetView()
|
||||||
@@ -81,9 +81,10 @@ void WorksheetTest::testSheetView()
|
|||||||
void WorksheetTest::testSetColumn()
|
void WorksheetTest::testSetColumn()
|
||||||
{
|
{
|
||||||
QXlsx::Worksheet sheet("", 1, 0);
|
QXlsx::Worksheet sheet("", 1, 0);
|
||||||
sheet.setColumn(0, 10, 20.0); //"A:K"
|
sheet.setColumn(1, 11, 20.0); //"A:K"
|
||||||
sheet.setColumn(3, 7, 10.0); //"D:H"
|
sheet.setColumn(4, 8, 10.0); //"D:H"
|
||||||
sheet.setColumn(5, 5, 15.0); //"F:F"
|
sheet.setColumn(6, 6, 15.0); //"F:F"
|
||||||
|
sheet.setColumn(1, 9, 8.8); //"A:H"
|
||||||
|
|
||||||
QByteArray xmldata = sheet.saveToXmlData();
|
QByteArray xmldata = sheet.saveToXmlData();
|
||||||
|
|
||||||
@@ -92,7 +93,8 @@ void WorksheetTest::testSetColumn()
|
|||||||
QVERIFY(xmldata.contains("<col min=\"4\" max=\"5\"")); //"D:E"
|
QVERIFY(xmldata.contains("<col min=\"4\" max=\"5\"")); //"D:E"
|
||||||
QVERIFY(xmldata.contains("<col min=\"6\" max=\"6\"")); //"F:F"
|
QVERIFY(xmldata.contains("<col min=\"6\" max=\"6\"")); //"F:F"
|
||||||
QVERIFY(xmldata.contains("<col min=\"7\" max=\"8\"")); //"G:H"
|
QVERIFY(xmldata.contains("<col min=\"7\" max=\"8\"")); //"G:H"
|
||||||
QVERIFY(xmldata.contains("<col min=\"9\" max=\"11\""));//"I:K"
|
QVERIFY(xmldata.contains("<col min=\"9\" max=\"9\""));//"I:I"
|
||||||
|
QVERIFY(xmldata.contains("<col min=\"10\" max=\"11\""));//"J:K"
|
||||||
}
|
}
|
||||||
|
|
||||||
void WorksheetTest::testWriteCells()
|
void WorksheetTest::testWriteCells()
|
||||||
@@ -100,10 +102,10 @@ void WorksheetTest::testWriteCells()
|
|||||||
QXlsx::Worksheet sheet("", 1, 0);
|
QXlsx::Worksheet sheet("", 1, 0);
|
||||||
sheet.write("A1", 123);
|
sheet.write("A1", 123);
|
||||||
sheet.write("A2", "Hello");
|
sheet.write("A2", "Hello");
|
||||||
sheet.writeInlineString(2, 0, "Hello inline"); //A3
|
sheet.writeInlineString(3, 1, "Hello inline"); //A3
|
||||||
sheet.write("A4", true);
|
sheet.write("A4", true);
|
||||||
sheet.write("A5", "=44+33");
|
sheet.write("A5", "=44+33");
|
||||||
sheet.writeFormula(4, 1, "44+33", 0, 77);
|
sheet.writeFormula(5, 2, "44+33", 0, 77);
|
||||||
|
|
||||||
QByteArray xmldata = sheet.saveToXmlData();
|
QByteArray xmldata = sheet.saveToXmlData();
|
||||||
|
|
||||||
@@ -259,7 +261,7 @@ void WorksheetTest::testReadRowsInfo()
|
|||||||
sheet.d_ptr->readSheetData(reader);
|
sheet.d_ptr->readSheetData(reader);
|
||||||
|
|
||||||
QCOMPARE(sheet.d_ptr->rowsInfo.size(), 1);
|
QCOMPARE(sheet.d_ptr->rowsInfo.size(), 1);
|
||||||
QCOMPARE(sheet.d_ptr->rowsInfo[2]->height, 40.0);
|
QCOMPARE(sheet.d_ptr->rowsInfo[3]->height, 40.0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void WorksheetTest::testReadMergeCells()
|
void WorksheetTest::testReadMergeCells()
|
||||||
|
|||||||
Reference in New Issue
Block a user