Excel类似split功能

=left(A1,find("|",A1)-1)
=right(A1,len(A1)-find("|",A1))

转载于:https://my.oschina.net/wugong/blog/1585975

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以通过以下步骤实现: 1. 在Qt中创建一个SQLite数据库,并创建一个表来存储CSV文件数据。 2. 使用Qt的文件对话框,让用户选择CSV文件。 3. 读取CSV文件数据,并将数据插入到SQLite数据库中的表中。 4. 添加过滤、固定列、排序等功能,可以使用Qt的QSortFilterProxyModel类来实现。 下面是一个示例代码,用于导入CSV文件到SQLite数据库中: ```cpp #include <QtSql> #include <QFileDialog> #include <QTextStream> class CsvFileModel : public QObject { Q_OBJECT public: CsvFileModel(QObject *parent = nullptr) : QObject(parent) {} bool importCsvFile(const QString &filePath, const QString &tableName, const QStringList &header) { QFile file(filePath); if (!file.open(QIODevice::ReadOnly)) { return false; } QSqlDatabase db = QSqlDatabase::database(); if (!db.isValid()) { return false; } QSqlQuery query(db); QString createTableSql = QString("CREATE TABLE %1 (%2)").arg(tableName).arg(header.join(", ")); if (!query.exec(createTableSql)) { return false; } QTextStream in(&file); while (!in.atEnd()) { QString line = in.readLine(); QStringList values = line.split(","); if (values.size() != header.size()) { continue; } QString insertSql = QString("INSERT INTO %1 (%2) VALUES (%3)") .arg(tableName) .arg(header.join(", ")) .arg(values.join(", ")); if (!query.exec(insertSql)) { return false; } } return true; } }; class CsvTableModel : public QSqlTableModel { Q_OBJECT public: CsvTableModel(QObject *parent = nullptr, QSqlDatabase db = QSqlDatabase()) : QSqlTableModel(parent, db) {} QVariant data(const QModelIndex &idx, int role = Qt::DisplayRole) const override { if (role == Qt::DisplayRole && idx.column() == 0) { return QSqlTableModel::data(idx).toString().toUpper(); } return QSqlTableModel::data(idx, role); } }; class CsvTableProxyModel : public QSortFilterProxyModel { Q_OBJECT public: CsvTableProxyModel(QObject *parent = nullptr) : QSortFilterProxyModel(parent) {} bool filterAcceptsColumn(int source_column, const QModelIndex &source_parent) const override { QString header = sourceModel()->headerData(source_column, Qt::Horizontal).toString(); if (header.startsWith("A")) { return true; } return false; } bool lessThan(const QModelIndex &left, const QModelIndex &right) const override { QString leftData = sourceModel()->data(left).toString(); QString rightData = sourceModel()->data(right).toString(); return leftData < rightData; } }; void importCsvFileToSqlite() { QString filePath = QFileDialog::getOpenFileName(nullptr, "Open CSV file", ".", "CSV files (*.csv)"); if (filePath.isEmpty()) { return; } CsvFileModel csvFile; QStringList header = {"Name", "Age", "Gender"}; if (!csvFile.importCsvFile(filePath, "people_info", header)) { qDebug() << "Failed to import CSV file to SQLite database!"; return; } QSqlDatabase db = QSqlDatabase::database(); if (!db.isValid()) { return; } CsvTableModel *tableModel = new CsvTableModel(nullptr, db); tableModel->setTable("people_info"); tableModel->select(); CsvTableProxyModel *proxyModel = new CsvTableProxyModel(nullptr); proxyModel->setSourceModel(tableModel); QTableView *tableView = new QTableView(nullptr); tableView->setModel(proxyModel); tableView->setSortingEnabled(true); tableView->show(); } ``` 在上面的代码中,CsvFileModel类用于导入CSV文件到SQLite数据库中。CsvTableModel继承自QSqlTableModel,用于显示SQLite数据库中的数据。CsvTableProxyModel继承自QSortFilterProxyModel,用于添加过滤、固定列、排序等功能。在importCsvFileToSqlite函数中,首先让用户选择CSV文件,然后调用CsvFileModel的importCsvFile函数将数据导入到SQLite数据库中。最后创建一个QTableView来显示SQLite数据库中的数据,并使用CsvTableProxyModel来添加过滤、固定列、排序等功能

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值