Getsavefilename()样例代码片段

Getsavefilename()样例代码片段

    OPENFILENAME ofn;
    TCHAR szFile[MAX_PATH];
    ZeroMemory(&ofn,sizeof(ofn));
    ofn.lStructSize = sizeof(ofn);
    ofn.hwndOwner = m_hWnd;
    ofn.lpstrFile = szFile;
    ofn.lpstrFile[0] = _T('\0');
    ofn.nMaxFile = sizeof(szFile);
    ofn.lpstrFilter = _T("Text\0*.txt\0")
void MainWindow::on_exportToExcel_triggered() { if (!db.isOpen()) { QMessageBox::critical(this, "错误", "没有已打开的数据库!"); return; } QStringList tables = db.tables(); if (tables.isEmpty()) { QMessageBox::critical(this, "错误", "数据库中没有任何可用的表!"); return; } QString tableName = tables.first(); QString fileName = QFileDialog::getSaveFileName( this, tr("导出至CSV"), "", tr("Comma Separated Values File (*.csv);;所有文件 (*.*)") ); if (fileName.isEmpty()) { return; } if (!fileName.endsWith(".csv", Qt::CaseInsensitive)) { fileName.append(".csv"); } QFile file(fileName); if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) { QMessageBox::warning(this, "警告", "无法创建或打开指定文件以供写入!"); return; } QTextStream out(&file); QSqlQuery query(db); bool success = query.exec(QString("SELECT * FROM %1").arg(tableName)); if (!success) { QMessageBox::warning(this, "警告", query.lastError().text()); file.remove(); file.close(); return; } // 写入列标题,并添加额外处理防止特殊字符干扰 QStringList headers; int columnCount = query.record().count(); for (int i = 0; i < columnCount; ++i) { QString header = query.record().fieldName(i); if (header.contains(',') || header.contains('\"')) { header.replace("\"", "\"\""); header.prepend('"').append('"'); } headers << header; } out << headers.join(",") + "\n"; while (query.next()) { QStringList rowValues; for (int j = 0; j < columnCount; ++j) { QVariant valueVariant = query.value(j); // 如果是数字类型,则直接使用 toString() 避免自动加上双引号影响 Excel 解析 if (valueVariant.typeId() == QMetaType::Int || valueVariant.typeId() == QMetaType::Double) { rowValues << valueVariant.toString(); } else { QString value = valueVariant.toString(); // 对包含逗号、换行符或其他特殊符号的内容加双引号包裹 if (value.contains(',') || value.contains('\n') || value.contains('\"')) { value.replace("\"", "\"\""); value.prepend('"').append('"'); } rowValues << value.trimmed(); } } out << rowValues.join(",") + "\n"; } file.close(); QMessageBox::information(this, "成功", QString("数据已从表 '%1' 成功导出到 CSV 文件 '%2' 中!") .arg(tableName) .arg(fileName)); }此demo运行成功导出.csv表格后,打开表格后表格编号一列的编号与原数据库有差别(编号3导出后变成了5),修改一下
03-30
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值