一、环境介绍
操作系统介绍:win10 64位
QT版本: 5.12.6
将QTableWidget表格编辑的数据写入到本地execl表格文件中保存。
Header: #include <QAxObject> qmake: QT += axcontainer
三、示例代码
/* 日期: 2020-12-23 作者: DS小龙哥 环境: win10 QT5.12.6 MinGW32 功能: 导出数据到execl表格 */ void Widget::SaveExeclData() { int value; value=QMessageBox::question(this,"提示","确定导出表格数据到Execl?", QMessageBox::Yes | QMessageBox::No,QMessageBox::Yes); if(value==QMessageBox::No)return; //获取保存的文件路径 QString filepath = QFileDialog::getSaveFileName(this, "选择保存文件名称", QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation), "Excel 文件(*.xls *.xlsx)"); qDebug()<<"filepath:"<<filepath; if(filepath.isEmpty()) { QMessageBox::critical(this,"提示","未选择正确的文件.导出失败.", QMessageBox::Ok,QMessageBox::Ok); return; } QAxObject *excel = new QAxObject(this); 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); QTableWidget *table=ui->tableWidget_Measure; int i,j,colcount=table->columnCount(),rowcount=table->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", 60); QString cellTitle; cellTitle.append("A1:"); cellTitle.append(QChar(colcount + '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); range->setProperty("VerticalAlignment", -4108); //行的表头 for(i=0;i<colcount;i++) { QString columnName; cell=worksheet->querySubObject("Cells(int,int)", 2, i+2); columnName=table->horizontalHeaderItem(i)->text(); cell->dynamicCall("SetValue(const QString&)", columnName);//打印到excel cell->querySubObject("Font")->setProperty("Bold", true); cell->querySubObject("Interior")->setProperty("Color",QColor(191, 191, 191)); cell->setProperty("HorizontalAlignment", -4108); cell->setProperty("VerticalAlignment", -4108); } //列的表头 for(i=0;i<rowcount;i++) { //读取 QString rowName; //修改内容 cell=worksheet->querySubObject("Cells(int,int)", i+3, 1); //获取垂直表头 // rowName=table->verticalHeaderItem(i)->text(); //horizontalHeaderItem(i)->text();//获取此处的文本内容,i是列号,就是第几列中的文本内容 //写表头数据 cell->dynamicCall("SetValue(const QString&)",i); cell->querySubObject("Font")->setProperty("Bold", true); cell->querySubObject("Interior")->setProperty("Color",QColor(191, 191, 191)); cell->setProperty("HorizontalAlignment", -4108); cell->setProperty("VerticalAlignment", -4108); } //数据 for(i=0;i<table->rowCount();i++) { for (j=0;j<colcount;j++) { QString rowdata; rowdata=table->item(i,j)->text(); worksheet->querySubObject("Cells(int,int)", i+3, j+2)->dynamicCall("SetValue(const QString&)",rowdata); } } QString lrange; lrange.append("A2:"); lrange.append(colcount + '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("A2:"); rowsName.append(colcount + 'A'); rowsName.append(QString::number(table->rowCount() + 2)); range = worksheet->querySubObject("Range(const QString&)", rowsName); range->setProperty("RowHeight", 20); range->setProperty("ColumnWidth", 60); workbook->dynamicCall("SaveAs(const QString&)",QDir::toNativeSeparators(filepath)); workbook->dynamicCall("Close()"); excel->dynamicCall("Quit()"); delete excel; excel=nullptr; if(QMessageBox::question(nullptr,"完成","文件已经导出,是否现在打开?",QMessageBox::Yes|QMessageBox::No)==QMessageBox::Yes) { QDesktopServices::openUrl(QUrl("file:///" + QDir::toNativeSeparators(filepath))); } } else { QMessageBox::warning(nullptr,"错误","未能创建 Excel 对象,请安装 Microsoft Excel。",QMessageBox::Apply); } }