diff --git a/src/xlsx/xlsxrichstring.cpp b/src/xlsx/xlsxrichstring.cpp index e90614e..4d02594 100644 --- a/src/xlsx/xlsxrichstring.cpp +++ b/src/xlsx/xlsxrichstring.cpp @@ -70,10 +70,7 @@ RichString::RichString() RichString::RichString(const QString text) :d(new RichStringPrivate) { - if (Qt::mightBeRichText(text)) - setHtml(text); - else - addFragment(text, Format()); + addFragment(text, Format()); } /*! diff --git a/src/xlsx/xlsxworkbook.cpp b/src/xlsx/xlsxworkbook.cpp index 3dfe03b..ed08ee0 100755 --- a/src/xlsx/xlsxworkbook.cpp +++ b/src/xlsx/xlsxworkbook.cpp @@ -55,6 +55,7 @@ WorkbookPrivate::WorkbookPrivate(Workbook *q, Workbook::CreateFlag flag) : window_height = 9660; strings_to_numbers_enabled = false; + strings_to_hyperlinks_enabled = true; html_to_richstring_enabled = false; date1904 = false; defaultDateFormat = QStringLiteral("yyyy-mm-dd"); @@ -118,6 +119,18 @@ bool Workbook::isStringsToNumbersEnabled() const return d->strings_to_numbers_enabled; } +void Workbook::setStringsToHyperlinksEnabled(bool enable) +{ + Q_D(Workbook); + d->strings_to_hyperlinks_enabled = enable; +} + +bool Workbook::isStringsToHyperlinksEnabled() const +{ + Q_D(const Workbook); + return d->strings_to_hyperlinks_enabled; +} + void Workbook::setHtmlToRichStringEnabled(bool enable) { Q_D(Workbook); diff --git a/src/xlsx/xlsxworkbook.h b/src/xlsx/xlsxworkbook.h index 288e853..464f046 100755 --- a/src/xlsx/xlsxworkbook.h +++ b/src/xlsx/xlsxworkbook.h @@ -74,6 +74,8 @@ public: void setDate1904(bool date1904); bool isStringsToNumbersEnabled() const; void setStringsToNumbersEnabled(bool enable=true); + bool isStringsToHyperlinksEnabled() const; + void setStringsToHyperlinksEnabled(bool enable=true); bool isHtmlToRichStringEnabled() const; void setHtmlToRichStringEnabled(bool enable=true); QString defaultDateFormat() const; diff --git a/src/xlsx/xlsxworkbook_p.h b/src/xlsx/xlsxworkbook_p.h index 727d97f..c3a7c60 100644 --- a/src/xlsx/xlsxworkbook_p.h +++ b/src/xlsx/xlsxworkbook_p.h @@ -82,6 +82,7 @@ public: QList definedNamesList; bool strings_to_numbers_enabled; + bool strings_to_hyperlinks_enabled; bool html_to_richstring_enabled; bool date1904; QString defaultDateFormat; diff --git a/src/xlsx/xlsxworksheet.cpp b/src/xlsx/xlsxworksheet.cpp index 4f3509a..acd1931 100755 --- a/src/xlsx/xlsxworksheet.cpp +++ b/src/xlsx/xlsxworksheet.cpp @@ -60,7 +60,7 @@ WorksheetPrivate::WorksheetPrivate(Worksheet *p, Worksheet::CreateFlag flag) : AbstractSheetPrivate(p, flag) , windowProtection(false), showFormulas(false), showGridLines(true), showRowColHeaders(true) , showZeros(true), rightToLeft(false), tabSelected(false), showRuler(false) - , showOutlineSymbols(true), showWhiteSpace(true) + , showOutlineSymbols(true), showWhiteSpace(true), urlPattern(QStringLiteral("^([fh]tt?ps?://)|(mailto:)|(file://)")) { previous_row = 0; @@ -429,32 +429,10 @@ bool Worksheet::write(int row, int column, const QVariant &value, const Format & if (value.isNull()) { //Blank ret = writeBlank(row, column, format); - } else if (value.userType() == qMetaTypeId()) { - ret = writeString(row, column, value.value(), format); - } else if (value.userType() == QMetaType::Bool) { - //Bool - ret = writeBool(row,column, value.toBool(), format); - } else if (value.userType() == QMetaType::QDateTime || value.userType() == QMetaType::QDate) { - //DateTime, Date - // note that, QTime cann't convert to QDateTime - ret = writeDateTime(row, column, value.toDateTime(), format); - } else if (value.userType() == QMetaType::QTime) { - //Time - ret = writeTime(row, column, value.toTime(), format); - } else if (value.userType() == QMetaType::Int || value.userType() == QMetaType::UInt - || value.userType() == QMetaType::LongLong || value.userType() == QMetaType::ULongLong - || value.userType() == QMetaType::Double || value.userType() == QMetaType::Float) { - //Number - - ret = writeNumeric(row, column, value.toDouble(), format); - } else if (value.userType() == QMetaType::QUrl) { - //Url - ret = writeHyperlink(row, column, value.toUrl(), format); } else if (value.userType() == QMetaType::QString) { //String QString token = value.toString(); bool ok; - QRegularExpression urlPattern(QStringLiteral("^([fh]tt?ps?://)|(mailto:)|(file://)")); if (token.startsWith(QLatin1String("="))) { //convert to formula @@ -462,7 +440,7 @@ bool Worksheet::write(int row, int column, const QVariant &value, const Format & } else if (token.startsWith(QLatin1String("{=")) && token.endsWith(QLatin1Char('}'))) { //convert to array formula ret = writeArrayFormula(CellRange(row, column, row, column), token, format); - } else if (token.contains(urlPattern)) { + } else if (d->workbook->isStringsToHyperlinksEnabled() && token.contains(d->urlPattern)) { //convert to url ret = writeHyperlink(row, column, QUrl(token)); } else if (d->workbook->isStringsToNumbersEnabled() && (value.toDouble(&ok), ok)) { @@ -472,6 +450,27 @@ bool Worksheet::write(int row, int column, const QVariant &value, const Format & //normal string now ret = writeString(row, column, token, format); } + } else if (value.userType() == qMetaTypeId()) { + ret = writeString(row, column, value.value(), format); + } else if (value.userType() == QMetaType::Int || value.userType() == QMetaType::UInt + || value.userType() == QMetaType::LongLong || value.userType() == QMetaType::ULongLong + || value.userType() == QMetaType::Double || value.userType() == QMetaType::Float) { + //Number + + ret = writeNumeric(row, column, value.toDouble(), format); + } else if (value.userType() == QMetaType::Bool) { + //Bool + ret = writeBool(row,column, value.toBool(), format); + } else if (value.userType() == QMetaType::QDateTime || value.userType() == QMetaType::QDate) { + //DateTime, Date + // note that, QTime cann't convert to QDateTime + ret = writeDateTime(row, column, value.toDateTime(), format); + } else if (value.userType() == QMetaType::QTime) { + //Time + ret = writeTime(row, column, value.toTime(), format); + } else if (value.userType() == QMetaType::QUrl) { + //Url + ret = writeHyperlink(row, column, value.toUrl(), format); } else { //Wrong type return false; @@ -635,7 +634,7 @@ bool Worksheet::writeString(int row, int column, const QString &value, const For return false; RichString rs; - if (Qt::mightBeRichText(value) && d->workbook->isHtmlToRichStringEnabled()) + if (d->workbook->isHtmlToRichStringEnabled() && Qt::mightBeRichText(value)) rs.setHtml(value); else rs.addFragment(value, Format()); diff --git a/src/xlsx/xlsxworksheet_p.h b/src/xlsx/xlsxworksheet_p.h index 5507eeb..1817ee3 100644 --- a/src/xlsx/xlsxworksheet_p.h +++ b/src/xlsx/xlsxworksheet_p.h @@ -44,6 +44,7 @@ #include #include +#include class QXmlStreamWriter; class QXmlStreamReader; @@ -176,6 +177,8 @@ public: bool showRuler; bool showOutlineSymbols; bool showWhiteSpace; + + QRegularExpression urlPattern; }; }