Qt 将TableWidget表格数据保存到Excle的方法
程序员文章站
2024-03-17 19:51:46
...
在我刚接触这一块时,下面这篇博文给了我很大帮助,在此表示感谢。
参考博文:https://blog.csdn.net/LJianDong/article/details/84565194
添加这两个头文件
#include <QDesktopServices>
#include <QUrl>
下面是实现:
void MainWindow::on_saveDataBtn_clicked()
{
QString fileName = QFileDialog::getSaveFileName(this,tr("Excle file"),QString("./test.xls"),tr("Excel Files(*.xls)")); //设置保存的文件名
if(fileName != NULL)
{
QAxObject *excel = new QAxObject;
if(excel->setControl("Excel.Application"))
{
excel->dynamicCall("SetVisible (bool Visible)",false);
excel->setProperty("DisplayAlerts",false);
QAxObject *workbooks = excel->querySubObject("WorkBooks"); //获取工作簿集合
workbooks->dynamicCall("Add"); //新建一个工作簿
QAxObject *workbook = excel->querySubObject("ActiveWorkBook"); //获取当前工作簿
QAxObject *worksheet = workbook->querySubObject("Worksheets(int)", 1);
QAxObject *cell;
/*添加Excel表头数据*/
for(int i = 1; i <= ui->tableWidget->columnCount(); i++)
{
cell = worksheet->querySubObject("Cells(int,int)", 1, i);
cell->setProperty("RowHeight", 40);
cell->dynamicCall("SetValue(const QString&)", ui->tableWidget->horizontalHeaderItem(i-1)->data(0).toString());
}
/*将form列表中的数据依此保存到Excel文件中*/
for(int j = 2; j <= ui->tableWidget->rowCount()+1;j++)
{
for(int k = 1;k <= ui->tableWidget->columnCount();k++)
{
cell = worksheet->querySubObject("Cells(int,int)", j, k);
cell->dynamicCall("SetValue(const QString&)",ui->tableWidget->item(j-2,k-1)->text()+ "\t");
}
}
/*将生成的Excel文件保存到指定目录下*/
workbook->dynamicCall("SaveAs(const QString&)",QDir::toNativeSeparators(fileName)); //保存至fileName
workbook->dynamicCall("Close()"); //关闭工作簿
excel->dynamicCall("Quit()"); //关闭excel
delete excel;
excel = NULL;
if (QMessageBox::question(NULL,QString::fromUtf8("完成"),QString::fromUtf8("文件已经导出,是否现在打开?"),QMessageBox::Yes|QMessageBox::No)==QMessageBox::Yes)
{
QDesktopServices::openUrl(QUrl("file:///" + QDir::toNativeSeparators(fileName)));
}
}
}
}
上一篇: POJ 魔兽世界之一:备战 题解
下一篇: mysql存储过程和使用场景