建设官方网站多少,鲜花网站建设的主要工作流程,wordpress本地ftp,做外掛网站空间这是我记录Qt学习过程的第6篇心得文章#xff0c;主要是方便自己编写的应用程序导出Excel数据的#xff0c;走了不少弯路直接上代码。
实现代码#xff1a;
//人员信息导出
ui-pbtn2-setEnabled(false);
// 打开文件对话框#xff0c;选择 excel文件
QString fil…这是我记录Qt学习过程的第6篇心得文章主要是方便自己编写的应用程序导出Excel数据的走了不少弯路直接上代码。
实现代码
//人员信息导出
ui-pbtn2-setEnabled(false);
// 打开文件对话框选择 excel文件
QString fileName QFileDialog::getSaveFileName(this, 人员信息导出, personnel, excel文件(*.xlsx));
if (fileName.isEmpty()) return;
this-fun_statusBar(人员信息导出 fileName);// 创建Excel应用程序对象
QAxObject *excel new QAxObject(Excel.Application);
if (!excel-isNull())
{this-fun_statusBar(人员信息导出 创建Excel对象成功);excel-setProperty(Visible, false); //设置为false以在后台运行// excel-setProperty(SetVisible(bool), false); //设置为false以在后台运行// 新建工作簿QAxObject *workbooks excel-querySubObject(Workbooks);this-fun_statusBar(人员信息导出 新建Excel工作簿成功);// 添加一个工作簿QAxObject *workbook workbooks-querySubObject(Add);this-fun_statusBar(人员信息导出 添加Excel工作簿成功);QAxObject *worksheets workbook-querySubObject(Worksheets);// 获取第一个工作簿// QAxObject *worksheet worksheets-querySubObject(Item(int), 1);QAxObject *worksheet workbook-querySubObject(WorkSheets(int), 1);this-fun_statusBar(人员信息导出 打开Excel获取第一个工作表成功);// 设置工作表标题worksheet-setProperty(Name, personnel);// 获取表格数据模型 根据自己表格使用的数据模型更改为 QAbstractItemModel获其他QSqlRelationalTableModel *itemModel qobject_castQSqlRelationalTableModel *(ui-tableView-model());if (itemModel){this-fun_statusBar(人员信息导出 打开数据表成功);int rowCount itemModel-rowCount();int colCount itemModel-columnCount();QString str ;// 写入表头for (int col 1; col colCount; col){QString data itemModel-headerData(col - 1, Qt::Horizontal).toString();QAxObject *cell worksheet-querySubObject(Cells(int,int), 1, col);cell-setProperty(Value, data);str data ;// 设置文字格式QAxObject *range cell-querySubObject(Characters());QAxObject *font range-querySubObject(Font);font-setProperty(Name, 黑体); // 字体名称font-setProperty(Size, 12); // 字体大小font-setProperty(Color, 0x000000); // 字体颜色蓝色cell-setProperty(HorizontalAlignment, -4108); // 水平居中cell-setProperty(VerticalAlignment, -4108); // 垂直居中//设置列宽QAxObject *column worksheet-querySubObject(Columns(int), col 1);int columnWidth{};switch (col){case 0:case 2:case 3:columnWidth 10;break;case 7:columnWidth 12;break;case 8:columnWidth 50;break;case 11:case 12:columnWidth 14;break;default:columnWidth 20;break;}column-setProperty(ColumnWidth, columnWidth); // 设置每列的宽度根据实际自己调整delete font;delete range;delete column;delete cell;}qDebug() 人员信息导出表头写入 str Qt::endl;// 写入数据for (int row 2; row rowCount; row){str ;for (int col 1; col colCount; col){QVariant data itemModel-index(row - 2, col - 1).data();QAxObject *cell worksheet-querySubObject(Cells(int,int), row, col);// 前缀单引号以确保作为文本处理if (data.toString().length() 18 data.toString().contains(QRegExp(\\d{18}))){// 检查是否是身份证号假设身份证号是18位数字cell-dynamicCall(SetValue(const QVariant), QString() data.toString());}else if (data.toString().length() 11 data.toString().contains(QRegExp(\\d{11}))){// 检查是否是手机号码假设手机号码是11位数字cell-dynamicCall(SetValue(const QVariant), QString() data.toString());}else{cell-dynamicCall(SetValue(const QVariant), data.toString());}// 设置单元格格式为文本cell-setProperty(NumberFormat, ); // 表示文本格式cell-setProperty(HorizontalAlignment, -4108); // 水平居中cell-setProperty(VerticalAlignment, -4108); // 垂直居中str data.toString() ;delete cell;}qDebug() 人员信息导出数据写入 str Qt::endl;}this-fun_statusBar(人员信息导出 数据表数据写入成功);// 保存工作簿if (!workbook-dynamicCall(SaveAs(const QString), QDir::toNativeSeparators(fileName)).toBool()){skysonya.messageBox(warning, wTitle, 保存Excel文件失败);}}else{skysonya.messageBox(warning, wTitle, 打开数据表失败);}// 关闭工作簿workbook-dynamicCall(Close (bool), false);// 退出Excel应用程序excel-dynamicCall(Quit());// 清理对象delete worksheet;delete worksheets;delete workbook;delete workbooks;delete excel;
}
else
{skysonya.messageBox(warning, wTitle, 创建Excel对象失败);
}
ui-pbtn2-setEnabled(true);
this-fun_statusBar()为自己构建的函数代码如下
//状态栏信息显示
void MainWindow::fun_statusBar(QString str)
{str 提示信息 str;this-statusBar()-showMessage(str);qDebug() str Qt::endl;
}
skysonya.messageBox()函数前文中已有介绍。