Für den Fall, dass Sie eine Tabelle mit Daten aus der Anwendung in eine Datei im CSV -Format hochladen müssen, deren Schnittstelle ebenfalls in QML geschrieben ist, beeile ich mich mit diesem Artikel, einen kleinen Hinweis zu geben .
Beispielsweise wurde im Artikel über das Arbeiten mit der SQLite-Datenbank eine Datenbank in einer Anwendung in QML erstellt, der Daten hinzugefügt wurden und daraus gelöscht. Gleichzeitig wurden sie in TableView angezeigt, das bereits Teil der in QML geschriebenen Oberfläche war. Und um diese Tabelle anzuzeigen, wurde Datenmodell geerbt von QSqlQueryModel verwendet.
Ich schlage vor, die Quellen dieses Projekts zu verwenden und es so zu erweitern, dass die Anwendung eine Schaltfläche zum Exportieren von Daten in eine Datei im CSV -Format hat.
Was ist das CSV-Format
> CSV (aus dem Englischen Comma-Separated Values – durch Kommas getrennte Werte) – ein Textformat zur Darstellung tabellarischer Daten. Jede Zeile der Datei ist eine Zeile der Tabelle. Werte einzelner Spalten werden durch ein Trennzeichen (Trennzeichen) — ein Komma (
,) getrennt. Die meisten Programme interpretieren den CSV-Standard jedoch frei und erlauben die Verwendung anderer Zeichen als Trennzeichen.
>
>
Im Allgemeinen besteht die Essenz der Arbeit darin, eine Methode in unserem Datenmodell zu erstellen, die Daten aus diesem Modell zieht und jede Zelle in der Zeile mit einem Semikolon trennt und jede Zeile mit dem Zeilenumbruchzeichen „\n“ trennt.
Schreiben Sie eine Methode zum Exportieren der Tabelle in eine CSV-Datei
In der Header-Datei unseres Projekts fügen wir jeweils eine neue Methode zum Exportieren und eine weitere Methode hinzu, die die Anzahl der Zeilen im Datenmodell zurückgibt. Lassen Sie uns die Datenexportmethode als SLOT deklarieren, damit sie von der Ebene QML verfügbar ist.
private: int countRow(); public slots: void exportCSV();
Hier mache ich einen Vorbehalt in dem Sinne, warum wir eine eigene Methode brauchen, die die Anzahl der Zeilen zurückgibt, wenn QSqlQueryModel, von dem We geerbt hat, eine eigene Methode hat, die die Anzahl der Zeilen zurückgibt. Das Problem ist, dass es nicht so funktioniert, wie wir es uns wünschen. Wenn weniger als 256 Zeilen vorhanden sind, funktioniert alles einwandfrei, und wenn es mehr sind, wird immer noch der Wert 256 oder in einigen Fällen 512 zurückgegeben. Im Allgemeinen werden Sie nicht auf echte Daten warten. Daher wird das Problem durch eine SQL-Abfrage an die Datenbank gelöst.
int ListModel::countRow() { QSqlQuery query; query.prepare("SELECT COUNT(*) FROM " TABLE " ;"); query.exec(); query.first(); return query.value(0).toInt(); }
Analysieren wir nun die Methode zum Exportieren von Daten in eine CSV-Datei, an der die obige Methode zum Abrufen der Anzahl der Zeilen in der Tabelle beteiligt ist.
void ListModel::exportCSV() { /* Создаём объекта файла CSV и указываем путь к этому файлу * Не забудьте указать валидный путь и расширение .csv * */ QFile csvFile("C:/example/excelExample.csv"); // Открываем, или создаём файл, если он не существует if(csvFile.open( QIODevice::WriteOnly )) { // Создаём текстовый поток, в который будем писать данные QTextStream textStream( &csvFile ); QStringList stringList; // Вспомогательный объект QSqtringList, который сформирует строку // Проходимся по всем строкам ... for( int row = 0; row < this->countRow(); row++ ) { stringList.clear(); // ... каждый раз очищая stringList /* Если обратить внимание в заголовочный файл, то * можно увидеть в перечислении Roles, что ролей модели всего 4 * */ for( int column = 0; column < 4; column++ ) { // Записываем в stringList каждый элемент таблицы stringList << this->data(this->index(row, column), Qt::UserRole + 1 + column).toString(); } /* После чего отправляем весь stringList в файл через текстовый поток * добавляя разделители в виде ";", а также поставив в конце символ окончания строки * */ textStream << stringList.join( ';' )+"\n"; } // Закрываем файл - готово csvFile.close(); } }
main.qml
Nun, um dieses Geschäft zu starten, werde ich dem rowLayout in der main.qml-Datei eine Schaltfläche hinzufügen, durch deren Drücken wir mit dem Exportieren von Daten aus der Tabelle in die CSV-Datei beginnen.
// Программный код из предыдущего урока // Слой с TaxtField`ами и Button для занесения записей в базу данных RowLayout { id: rowLayout // Программный код из предыдущего урока // Кнопочка для запуска экспорта в Excel Button { text: qsTr("Экспорт в Excel") // Запускаем экспорт onClicked: { myModel.exportCSV() } } }
Insgesamt
Daher können Sie mit dem aktualisierten Anwendungscode aus dem letzten Artikel die Daten aus der Tabelle in einer CSV-Datei speichern. Und wie es funktioniert, sehen Sie sich das Video-Tutorial an.