如题,该函数调用系统API来完成与一般应用同样的保存路径选取方式,会弹出系统窗口要求选择路径并命名文件。
void MyMainWin::writeExcel(QTableWidget *tableWidget){
QString fileName = QFileDialog::getSaveFileName(this, tr("另存为"), "/home", tr("Excel 工作簿(*.xlsx *.xls)"));
if(fileName.isEmpty()){
noPath();
return;
}
progressBar->show(); //显示进度
progressBar->setValue(0); //设置进度条的值为0
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 <= tableWidget->columnCount(); i++){
cell=worksheet->querySubObject("Cells(int,int)", 1, i);
cell->setProperty("RowHeight", 20);
cell->dynamicCall("SetValue(const QString&)", tableWidget->horizontalHeaderItem(i - 1)->data(0).toString());
if(progressBar->value() <= 50)
progressBar->setValue(10 + i * 5);
}
/*将列表中的数据依此保存到Excel文件中*/
for(int i = 2; i <= tableWidget->rowCount() + 1; i++){
for(int j = 1; j <= tableWidget->columnCount(); j++) {
cell=worksheet->querySubObject("Cells(int,int)", i, j);
cell->dynamicCall("SetValue(const QString&)", tableWidget->item(i - 2, j - 1)->text() + "\t");
}
if(progressBar->value() <= 90)
progressBar->setValue(50 + i * 5);
}
/*将生成的Excel文件保存到指定目录下*/
workbook->dynamicCall("SaveAs(const QString&)", QDir::toNativeSeparators(fileName)); //保存至fileName
workbook->dynamicCall("Close()"); //关闭工作簿
excel->dynamicCall("Quit()"); //关闭excel
delete excel;
excel=NULL;
progressBar->setValue(100);
}
return;
}