Seite 1 von 1

Daten aus Excel in Qtable, volle Genauigkeit

Verfasst: 12. Dezember 2017 11:47
von Chri
Hi

Ich möchte einen in Excel markierten Bereich in eine Qtable kopieren.

Was ich bis jetzt gemacht habe:

QClipboard *clipboard = QApplication::clipboard();
QStringList pasteString = clipboard->text().split('\n')
QLocale oe(QLocale::German, QLocale::Austria);

und dann ein "foreach" über die Elemente von pasteString:

ui->tableWidget->setItem(i,col,new QTableWidgetItem(QString::number(oe.toDouble(ding)) ));

OK, die Tabelle wird gefüllt. Aber nur mit der in Excel gerade angezeigten Genauigkeit.
Ich möchte aber die volle Genauigkeit. Nicht nur für die Tabelle, sondern auch zum Weiterrechnen.
Und außerdem: Wenn die Zellen in Excel erweitert formatiert sind (z.B. 23,4 kWh/a), dann gibt's überhaupt Probleme.

Wie kann man das lösen?

LG
Chri

Re: Daten aus Excel in Qtable, volle Genauigkeit

Verfasst: 12. Dezember 2017 17:42
von Christian81
Ich schätze das Excel das so in die Zwischenablage schiebt. Ggf. geht es über den Umweg einer csv-Datei besser.

Re: Daten aus Excel in Qtable, volle Genauigkeit

Verfasst: 13. Dezember 2017 14:49
von Chri
Das Problem ist nur:
Es soll der Anwender die Möglichkeit haben, in Excel einen Bereich markieren, kopieren,
in die qtableview klicken und dort einfügen (bzw. auf einen Button klicken, der einfügt)

LG
Chri

Re: Daten aus Excel in Qtable, volle Genauigkeit

Verfasst: 13. Dezember 2017 19:14
von Christian81
Wenn Excel das nicht anders exportiert - was soll Qt dann machen? Man könnte mal schauen ob Excel es noch in einem anderen Clipboard-Format in die Zwischenablage kopiert -> QClipboard::mimeData() und QMimeData::formats()

Re: Daten aus Excel in Qtable, volle Genauigkeit

Verfasst: 15. Dezember 2017 16:49
von Chri
Hi

Habe aus dem Internet folgenden Code zusammengebastelt:

QMimeData * mimeCopy = new QMimeData();
const QMimeData * mimeReference;
QClipboard *clipboard = QApplication::clipboard();
const QMimeData *mimeData = clipboard->mimeData();

foreach(QString format, mimeData->formats())
{
qDebug()<< mimeData->formats();
// QByteArray data = mimeReference->data(format);

if(format.startsWith("application/x-qt"))
{
// Retrieving true format name
int indexBegin = format.indexOf('"') + 1;
int indexEnd = format.indexOf('"', indexBegin);
format = format.mid(indexBegin, indexEnd - indexBegin);
}
qDebug()<< Format;
// mimeCopy->setData(format, data);
}

Auskommentiert sind die Zeilen, weil durch
QByteArray data = mimeReference->data(format);
das Programm abstürzt. Wie komme ich also zu den Daten?

Das 2. qDebug() liefert jedenfalls:
"Biff8", "Biff5", "Biff4", "Biff3", "Biff", "Wk1", "XML Spreadsheet", "text/html", "text/plain", "Csv", "Rich Text Format", "Embed Source", "Object Descriptor", "Link Source", "Link Source Descriptor", "Link"

Re: Daten aus Excel in Qtable, volle Genauigkeit

Verfasst: 16. Dezember 2017 08:19
von Christian81
Also speichert Excel das in verschiedenen Formaten in der Zwischenablage. CSV und XML Spreadsheet hören sich gut an. Wie das dann aber intern wirklich aufgebaut ist musst Du selbst herausfinden.