QT 中使用 QTableView 和 QStandardItemModel 实现将数据导出到Excel 和 从Excel导入到 QTableView 的功能
简介
在Qt中,使用QTableView和QStandardItemModel来实现将数据导出到Excel和从Excel导入到QTableView的功能,而不使用第三方库(如QXlsx)。
效果
将 QTableView 中的数据导出到Excel
//从tableview 导出到 EXcle
void MainInterface::on_pushButton_Export_clicked()
{
//使用 QStandardItemModel模型
QStandardItemModel* model = static_cast<QStandardItemModel*>(ui->tableView_staffInfo->model());
//使用 QSqlQueryModel 模型
// QSqlQueryModel* model = static_cast<QSqlQueryModel*>(ui->tableView_staffInfo->model()); //(两种任选一种都可以)
//给导出文件名加上当前时间
QString filePath = QDateTime::currentDateTime().toString("../yyyy_MM_dd hh_mm_ss") + ".xls"; //项目目录的上一级目录
// qDebug()<<str;
//设置文件路径
QFile file(filePath);
if (file.open(QIODevice::WriteOnly | QIODevice::Truncate)) {
QTextStream out(&file);
for (int column = 0; column < model->columnCount(); column++) {
out << model->headerData(column, Qt::Horizontal).toString() << "\t";
}
out << "\n";
for (int row = 0; row < model->rowCount(); row++) {
for (int column = 0; column < model->columnCount(); column++) {
QModelIndex index = model->index(row, column);
out << model->data(index).toString() << "\t";
}
out << "\n";
}
file.close();
}
//提示导出完成
QMessageBox::information(this, "提示", "导出完成。 ");
}
//这段代码将 QTableView 中的数据以制表符分隔的形式写入到Excel文件中。
从Excel导入数据到 QTableView
//从 excel导入到 tableview
void MainInterface::on_pushButton_Inport_Data_clicked()
{
//使用 QStandardItemModel模型
QStandardItemModel* model = new QStandardItemModel();
ui->tableView_staffInfo->setModel(model);
// QString filePath = "path_to_excel_file.xls";
// 获取文件路径
QString filePath = QFileDialog::getOpenFileName(this,
"打开的界面标题",
"C:\\Users\\18584\\Desktop\\qtcode",//默认打开目录+文件
"excel(*.xls)");//文件类型过滤
//判断文件路径是否为空
if(filePath.isEmpty()){
QMessageBox::warning(this, "提示", "文件路径错误。");
return;
}else{
}
QFile file(filePath);
if (file.open(QIODevice::ReadOnly)) {
QTextStream in(&file);
QString line = in.readLine();
QStringList header = line.split("\t");
model->setHorizontalHeaderLabels(header);
while (!in.atEnd()) {
line = in.readLine();
QStringList data = line.split("\t");
QList<QStandardItem*> items;
for (int i = 0; i < data.size(); i++) {
items.append(new QStandardItem(data.at(i)));
}
model->appendRow(items);
}
file.close();
}
//提示导入完成
QMessageBox::information(this, "提示", "导入完成。 ");
}
//这段代码从Excel文件中读取数据,将表头设置为QTableView的水平表头,
//然后逐行将数据添加到QTableView中的QStandardItemModel。
其他
请注意,这种方法基于文本的导入和导出,可能无法完全保留原始的数据类型和格式。如果有特殊的数据类型需要处理,或者需要更高级的功能,推荐使用专门的Excel处理库(如QXlsx)。