首先,需要在.pro文件中添加如下語句
CONFIG += qaxcontainer #導出excel
然后在.cpp文件中添加如下語句
#include <QTableWidget> #include <QFileDialog> #include <QDesktopServices> #include <QMessageBox> #include <QAxObject>
最后是實現代碼
//第一個參數是頁面上的表格,第二個是導出文件的表頭數據 void FaJianDialog::Table2ExcelByHtml(QTableWidget *table,QString title) { QString fileName = QFileDialog::getSaveFileName(table, "保存",QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation),"Excel 文件(*.xls *.xlsx)"); if (fileName!="") { QAxObject *excel = new QAxObject; if (excel->setControl("Excel.Application")) //連接Excel控件 { excel->dynamicCall("SetVisible (bool Visible)","false");//不顯示窗體 excel->setProperty("DisplayAlerts", false);//不顯示任何警告信息。如果為true那么在關閉是會出現類似“文件已修改,是否保存”的提示 QAxObject *workbooks = excel->querySubObject("WorkBooks");//獲取工作簿集合 workbooks->dynamicCall("Add");//新建一個工作簿 QAxObject *workbook = excel->querySubObject("ActiveWorkBook");//獲取當前工作簿 QAxObject *worksheet = workbook->querySubObject("Worksheets(int)", 1); int i,j; //QTablewidget 獲取數據的列數 int colcount=table->columnCount(); //QTablewidget 獲取數據的行數 int rowscount=table->rowCount() //QTableView 獲取列數 //int colount=ui->tableview->model->columnCount(); //QTableView 獲取行數 //int rowcount=ui->tableview->model->rowCount(); QAxObject *cell,*col; //標題行 cell=worksheet->querySubObject("Cells(int,int)", 1, 1); cell->dynamicCall("SetValue(const QString&)", title); cell->querySubObject("Font")->setProperty("Size", 18); //調整行高 worksheet->querySubObject("Range(const QString&)", "1:1")->setProperty("RowHeight", 30); //合並標題行 QString cellTitle; cellTitle.append("A1:"); cellTitle.append(QChar(colcount - 1 + 'A')); cellTitle.append(QString::number(1)); QAxObject *range = worksheet->querySubObject("Range(const QString&)", cellTitle); range->setProperty("WrapText", true); range->setProperty("MergeCells", true); range->setProperty("HorizontalAlignment", -4108);//xlCenter range->setProperty("VerticalAlignment", -4108);//xlCenter //列標題 for(i=0;i<colcount;i++) { QString columnName; columnName.append(QChar(i + 'A')); columnName.append(":"); columnName.append(QChar(i + 'A')); col = worksheet->querySubObject("Columns(const QString&)", columnName); col->setProperty("ColumnWidth", table->columnWidth(i)/6); cell=worksheet->querySubObject("Cells(int,int)", 2, i+1); //QTableWidget 獲取表格頭部文字信息 columnName=table->horizontalHeaderItem(i)->text(); //QTableView 獲取表格頭部文字信息 // columnName=ui->tableView_right->model()->headerData(i,Qt::Horizontal,Qt::DisplayRole).toString(); cell->dynamicCall("SetValue(const QString&)", columnName); cell->querySubObject("Font")->setProperty("Bold", true); cell->querySubObject("Interior")->setProperty("Color",QColor(191, 191, 191)); cell->setProperty("HorizontalAlignment", -4108);//xlCenter cell->setProperty("VerticalAlignment", -4108);//xlCenter } //數據區 //QTableWidget 獲取表格數據部分 for(i=0;i<rowcount;i++){ for (j=0;j<colcount;j++) { worksheet->querySubObject("Cells(int,int)", i+3, j+1)->dynamicCall("SetValue(const QString&)", table->item(i,j)?table->item(i,j)->text():""); } } //QTableView 獲取表格數據部分 // for(i=0;i<rowcount;i++) //行數 // { // for (j=0;j<colcount;j++) //列數 // { // QModelIndex index = ui->tableView_right->model()->index(i, j); // QString strdata=ui->tableView_right->model()->data(index).toString(); // worksheet->querySubObject("Cells(int,int)", i+3, j+1)->dynamicCall("SetValue(const QString&)", strdata); // } // } //畫框線 QString lrange; lrange.append("A2:"); lrange.append(colcount - 1 + 'A'); lrange.append(QString::number(table->rowCount() + 2)); range = worksheet->querySubObject("Range(const QString&)", lrange); range->querySubObject("Borders")->setProperty("LineStyle", QString::number(1)); range->querySubObject("Borders")->setProperty("Color", QColor(0, 0, 0)); //調整數據區行高 QString rowsName; rowsName.append("2:"); rowsName.append(QString::number(table->rowCount() + 2)); range = worksheet->querySubObject("Range(const QString&)", rowsName); range->setProperty("RowHeight", 20); workbook->dynamicCall("SaveAs(const QString&)",QDir::toNativeSeparators(fileName));//保存至fileName workbook->dynamicCall("Close()");//關閉工作簿 excel->dynamicCall("Quit()");//關閉excel delete excel; excel=NULL; //QMessageBox::information(this,tr("提示"),tr("數據已保存")); if (QMessageBox::question(NULL,"完成","文件已經導出,是否現在打開?",QMessageBox::Yes|QMessageBox::No)==QMessageBox::Yes) { QDesktopServices::openUrl(QUrl("file:///" + QDir::toNativeSeparators(fileName))); } } else { QMessageBox::warning(NULL,"錯誤","未能創建 Excel 對象,請安裝 Microsoft Excel。",QMessageBox::Apply); } } }
至此,到處基本完成
出處:https://www.cnblogs.com/leocc325/p/12830233.html