QT常用表格导出为Excel以及Excel导入表格

表格导出为Excel

  • 注意:演示所用到的软件为Qt5.14.2,编译器为MinGW 64-bit,电脑必须装有office
  • 所用的类为 QAxObject,QAxObject可以实例化为一个空对象,使用它应该封装的COM对象的名称,或者使用一个指向表示现有COM对象的IUnknown的指针。如果COM对象实现了IDispatch接口,则该对象的属性、方法和事件将作为Qt属性、槽和信号可用。基类QAxBase提供了通过IUnknown指针直接访问COM对象的API。
    简而言之,可以通过QAxObject 来读取、修改Excel表格
  • 在.pro中添加 QT += axcontainer
  • 添加头文件
#include <QFileDialog> 
#include <QDesktopServices>

话不多说,代码搞起

QTableWidget导出为Excel

void MainWindow::WidgetExcalByHtml(QTableWidget *tableWidget, QString &title)
{QString fileName = QFileDialog::getSaveFileName(tableWidget, "保存",                                           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 colCount = tableWidget->columnCount();int rowCount = tableWidget->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);range->setProperty("VertivcalAlignment", -4108);//列标题for (int 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", tableWidget->columnWidth(i)/6);cell = workSheet->querySubObject("Cells(int, int)", 2, i+1);columnName = tableWidget->horizontalHeaderItem(i)->text();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);cell->setProperty("VertivcalAlignment", -4108);}//处理数据for (int i = 0; i < rowCount; i++){for (int j = 0; j < colCount; j++){workSheet->querySubObject("Cells(int, int)", i + 3, j + 1)->dynamicCall("SetValue(const QString&)", tableWidget->item(i, j)? tableWidget->item(i, j)->text():"");}}//画框线QString l_range;l_range.append("A2:");l_range.append(colCount -1 + 'A');l_range.append(QString::number(tableWidget->rowCount() + 2));range = workSheet->querySubObject("Range(const QString&)", l_range);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(tableWidget->rowCount() + 2));range = workSheet->querySubObject("Range(const QString&)", rowsName);range->setProperty("RowHeight", 20);workBook->dynamicCall("SaveAs(const QString&)", QDir::toNativeSeparators(fileName)); //保存到fileNameworkBook->dynamicCall("Close()"); //关闭工作簿excel->dynamicCall("Quit()"); //关闭exceldelete  excel;excel = NULL;if ((QMessageBox::question(NULL, tr("完成"), tr("文件已导出,是否现在打开?")), QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes){QDesktopServices().openUrl(QUrl("file:///" + QDir::toNativeSeparators(fileName)));}}else{QMessageBox::warning(NULL, tr("错误"), tr("未能创建 Excel 对象,请安装 Microsoft Excel。"), QMessageBox::Apply);}}

QTableView导出为Excel

与QTableWidget导出Excel写法一样,只是QTableView获取行列以及获取单元格数据的方式和上面的不同,这个我在上篇博客已经提到,下面代码我在不同的地方设置了粗斜体,方便观看。

void MainWindow::Table2ExcelByHtml(QTableView *tableView, QString &title)
{QString fileName = QFileDialog::getSaveFileName(tableView, "保存",                                                    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 colCount = tableView->model()->columnCount();int rowCount = 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);range->setProperty("VertivcalAlignment", -4108);//列标题for (int 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", tableView->columnWidth(i)/6);cell = workSheet->querySubObject("Cells(int, int)", 2, i+1);***columnName = tableView->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);cell->setProperty("VertivcalAlignment", -4108);}//处理数据for (int i = 0; i < rowCount; i++){for (int j = 0; j < colCount; j++){***QModelIndex index = tableView->model()->index(i, j);QString strData = tableView->model()->data(index).toString();workSheet->querySubObject("Cells(int, int)", i + 3, j + 1)->dynamicCall("SetValue(const QString&)", strData);***}}//画框线QString l_range;l_range.append("A2:");l_range.append(colCount -1 + 'A');***l_range.append(QString::number(tableView->model()->rowCount() + 2));***range = workSheet->querySubObject("Range(const QString&)", l_range);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(tableView->model()->rowCount() + 2));***range = workSheet->querySubObject("Range(const QString&)", rowsName);range->setProperty("RowHeight", 20);workBook->dynamicCall("SaveAs(const QString&)", QDir::toNativeSeparators(fileName)); //保存到fileNameworkBook->dynamicCall("Close()"); //关闭工作簿excel->dynamicCall("Quit()"); //关闭exceldelete  excel;excel = NULL;if ((QMessageBox::question(NULL, tr("完成"), tr("文件已导出,是否现在打开?")), QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes){QDesktopServices().openUrl(QUrl("file:///" + QDir::toNativeSeparators(fileName)));}}else{QMessageBox::warning(NULL, tr("错误"), tr("未能创建 Excel 对象,请安装 Microsoft Excel。"), QMessageBox::Apply);}}
}

Excel导出小结

  • 使用方法
    QString fileName = "newExcel";WidgetExcalByHtml(ui->tableWidget, fileName);Table2ExcelByHtml(ui->tableView, fileName);
  • 常用函数
QAxWidget excel("Excel.Application");//将对象的name属性的值设置为value
bool QObject::setProperty(const char *name, const QVariant &value)//调用COM对象的方法函数,以var形式传递参数,并返回该方法返回的值。
//如果方法没有返回值或函数调用失败,此函数将返回无效的QVariant对象。
QVariant QAxBase::dynamicCall(const char *function, QList<QVariant> &vars)1) 显示当前窗口:
excel.setProperty("Visible", true);
2) 更改 Excel 标题栏:
excel.setProperty("Caption", "Invoke Microsoft Excel");
3) 添加新工作簿:
QAxObject * workbooks = excel.querySubObject("WorkBooks");
workbooks->dynamicCall("Add");
4) 打开已存在的工作簿:
workbooks->dynamicCall("Open (const QString&)", QString("c:/test.xls"));
5) 获取活动工作簿:
QAxObject * workbook = excel.querySubObject("ActiveWorkBook");
6) 获取所有的工作表:
QAxObject * worksheets = workbook->querySubObject("WorkSheets");
7) 获取工作表数量:
int intCount = worksheets->property("Count").toInt();
8) 获取第一个工作表:
QAxObject * worksheet = workbook->querySubObject("Worksheets(int)", 1);
9) 获取cell的值:
QAxObject * range = worksheet->querySubObject("Cells(int,int)", 1, 1 );

Excel表格数据导入到QT中的表格

个人简单实现的界面,关键代码下面会介绍,如何读取Excel表格数据
在这里插入图片描述

  1. 获取Excel表格中的workSheet
    QString filePath = QFileDialog::getOpenFileName(this, QStringLiteral("选择Excel文件"), "",QStringLiteral("Excel file(*.xls *.xlsx)"));if(filePath.isEmpty()) return;excel = new QAxObject(this);excel->setControl("Excel.Application");excel->dynamicCall("SetVisible (bool Visible)", "false");excel->setProperty("DisplayAlerts", false);workbooks = excel->querySubObject("WorkBooks");workbook = workbooks->querySubObject("Open (const QString&)",filePath);worksheets = workbook->querySubObject("WorkSheets");int sheet_count = worksheets->property("Count").toInt();// 获取工作表数目for (int i = 1; i <= sheet_count; i++){work_sheet = workbook->querySubObject("Sheets(int)",i);// Sheets(int)也可换为Worksheets(int)QString work_sheet_name = work_sheet->property("Name").toString(); // 获取工作表名称work_sheet_name = QString("sheet%1:").arg(i) + work_sheet_name;ui->sheetName->addItem(work_sheet_name);  // 这里因为项目需要,我加了个ComboBox来列举所有sheet/*打印出sheet表名QString message = QString("sheet ") + QString::number(i,10) + QString(" name:");qDebug()<<message<<work_sheet_name;*/}
  1. 导入某一个sheet表
    QString str = "";if(sheet_count < 0){if(QMessageBox::warning(this, "提示", "这是一个空表格!", QMessageBox::Yes) == QMessageBox::Yes)return;}str = ui->sheetName->currentText();if(ui->sheetName->count() <= 0){if(QMessageBox::warning(this, "提示", "请重新从文件中导入!", QMessageBox::Yes) == QMessageBox::Yes)return;}int index = str.mid(5, str.indexOf(":") - 5).toInt();qDebug() << "index===" << index;worksheet = workbook->querySubObject("Worksheets(int)", index);usedRange = worksheet->querySubObject("UsedRange");QAxObject *Rows = usedRange->querySubObject("Rows");QAxObject *Columns = usedRange->querySubObject("Columns");int intRows = Rows->property("Count").toInt();int intColumns = Columns->property("Count").toInt();qDebug() << "行:" << intRows << "列:" << intColumns;QVariant var = usedRange->dynamicCall("value");QVariantList varRowContents =var.toList();const int rowCount = varRowContents.size();totalLine = rowCount - 1;qDebug() << "rowCount" << rowCount;QVariantList tmp;//将每一个sheet表格中数据按行存到importData中,这是全局的QList<QList<QVariant>>类型for (int i = 1; i < rowCount; i++) {tmp = varRowContents[i].toList();importData.append(tmp);}
//    qDebug() << importData;//导入结束解释释放指针excel->dynamicCall("Quit(void)");worksheet = NULL;usedRange = NULL;excel = NULL;workbook = NULL;workbooks = NULL;

至此,Excel表格中的数据都已经存到QList<QList>中了,根据自己的需求,一个个取出来写入QTableWidget和QTableView表格中,具体怎么插入,可以参照上篇博客的插入方法,细节方面如果有问题可以留言或者发我邮箱
18856496324@163.com

3.一次性导入所有sheet表

if(sheet_count < 0){if(QMessageBox::warning(this, "提示", "这是一个空表格!", QMessageBox::Yes) == QMessageBox::Yes)return;}if(ui->sheetName->count() <= 0){if(QMessageBox::warning(this, "提示", "请重新从文件中导入!", QMessageBox::Yes) == QMessageBox::Yes)return;}//将所有sheet表数据存到importData中,这是全局的QList<QList<QVariant>>类型for (int i = 1; i <= sheet_count; i++){worksheet = workbook->querySubObject("Worksheets(int)", i);usedRange = worksheet->querySubObject("UsedRange");QVariant var = usedRange->dynamicCall("value");QVariantList varRowContents =var.toList();const int rowCount = varRowContents.size();//这一步比较关键,如果每个sheet表前几行都是你不想要的数据,可以每次去除掉那几行,然后所有sheet表行数累加,或者先修改Excel表格,将不需要的行都删除,保留自己的数据行,可以写成totalLine += rowCount;还有一点需要注意,对于某些行列合并的地方,此方法不能准确读取其正确行列位置,可能导致数据顺序出现差错totalLine += (rowCount - 1); qDebug() <<"all impport line::" << totalLine;QVariantList tmp;//这里j代表从第几行开始将数据全部导入,个人因为项目中表格只需要从第3行开始获取数据,所有定的是3for (int j = 3; j < rowCount; j++) {tmp = varRowContents[j].toList();importData.append(tmp);}worksheet = NULL;usedRange = NULL;}ui->sheetName->clear();excel->dynamicCall("Quit(void)");excel = NULL;workbook = NULL;workbooks = NULL;

至此,Excel表格中的数据都已经存到QList<QList>中了,根据自己的需求,一个个取出来写入QTableWidget和QTableView表格中,具体怎么插入,可以参照上篇博客的插入方法,细节方面如果有问题可以留言或者发我邮箱
18856496324@163.com

Excel导入小结

  1. 代码注意事项:代码中 excel,workbook,workbooks , worksheet ,usedRange定义的都是全局指针对象,很多函数中调用了。使用完这些对象后要严格按照标准 delete、置NULL。
  2. Excel表格注意事项:对于上面代码所示功能,只能导入特定的表格数据,表格不要合并,表格中数据过长设置成换行,不要延长到其他单元格,会影响读取正确性
  3. 用QList<QList>类型读取到的数据格式如下:
(QVariant(Invalid), QVariant(QString, "顶丝"), QVariant(QString, "M5*4mm(100只)"), QVariant(Invalid), QVariant(QString, "个"), QVariant(double, 0), QVariant(double, 0), QVariant(Invalid))

具体可查看官方文档熟悉QVariant和QList容器

小NULL的修行之旅

本文也是借鉴各方资源,在自己做项目后的一些总结,写得有点粗糙,希望大家不吝赐教
借鉴链接:可参考

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/10002.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

获取微信的聊天记录导出为Excel

获取微信的聊天记录导出为Excel ios端 1.工具2.步骤 1.工具 iTunes楼月免费iTunes备份管理器DB Browser for SQLitepython 2.步骤 通过iTunes备份ipone中的数据到电脑上&#xff0c; 打开楼月免费iTunes备份管理器选择备份的记录 导出 微信个人信息中的DB文件夹 使用 DB Br…

Excel表格的导入导出——EasyExcel

参考视频 csdn参考地址 一、导入依赖 <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.0.5</version> </dependency>二、实体类 方式一&#xff1a;Excel Property&#xff08;&…

Easyexcel导入导出多个sheet

EasyExcel对于导入导出的操作十分简洁&#xff0c;记录一下多个sheet且内容不一致的导入导出。 引入 easyExcel依赖 <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.0.1</version></d…

EasyExcel实现Excel文件多sheet导入导出

一、概述 最近公司需要做一个需求&#xff0c;通过excel上传病例信息&#xff0c;并将病例信息进行归档和整理&#xff1b;该需求可以简化为excel模板下载和excel上传并解析归档。既然知道需求了&#xff0c;找excel的操作工具jar包吧&#xff0c;发现以前常用的poi需要写的代…

导入导出excel表格EasyExcel操作

一、添加依赖 <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.2.3</version> </dependency>二、创建实体类 /*** 创建User类,用于构建向Excel表格中写数据的类型;* ExcelPropert…

EasyExcel的导入导出使用

1、说明 EasyExcel是阿里出的一款基于Java的、快速、简洁、解决大文件内存溢出的处理Excel的开源工具&#xff0c;本文主要是使用这个工具对Excel导入导出进行讲解。 官网&#xff1a; https://easyexcel.opensource.alibaba.com/github&#xff1a; https://github.com/alib…

EasyExcel实现execl导入导出

引言 在实际开发中&#xff0c;处理 Excel 文件是一个常见的需求。EasyExcel 是一个基于 Java 的开源库&#xff0c;提供了简单易用的 API&#xff0c;可以方便地读取和写入 Excel 文件。本文将介绍如何使用 EasyExcel 实现 Excel 导入功能&#xff0c;以及一些相关的技巧和注…

导入Excel---post提交通用版

前端界面 通过点击导入弹出一个文本框下载导入的模板 直接进入代码实现环节: 前端部分添加导入按钮: <a href"javascript:;" class"btn btn-primary radius professional_btn">导入</a> 导入的文本框 //导入 $(".professional_btn&qu…

EasyExcel实现Excel文件导入导出

1 EasyExcel简介 EasyExcel是一个基于Java的简单、省内存的读写Excel的开源项目。在尽可能节约内存的情况下支持读写百M的Excel。 github地址: https://github.com/alibaba/easyexcel 官方文档: https://www.yuque.com/easyexcel/doc/easyexcel B站视频: https://www.bilib…

导出Excel表格(调用后端接口方式)

在开发中我们会遇到导出Excel表格的需求&#xff0c;但是导出分为前端生成和后端生成。 前端生成的方式CSDN其他小伙伴已经做出了很多教程&#xff0c;是依赖 xlsx插件。 但是&#xff0c;今天我讲的是&#xff0c;调用后端接口的方式生成Excel表格。 1.调用后端提供的导出接口…

如何快速构建网站chatgpt插件

在本文中&#xff0c;我们将一步一步地探索并构建一个名为"AI Prompt Testing"的项目。该项目是一个网站插件&#xff0c;旨在帮助网站生成一个ChatGPT提示测试题&#xff0c;以巩固当前网页的内容。 1、抽象提取 这个网站chatgpt插件大概的效果&#xff0c;类比的…

【ChatGPT】ChatGPT 高质量资源列表:3000 多个提示、示例、用例、工具、API、扩展、失败和其他资源的集合。

ChatGPT 高质量资源列表:3000 多个提示、示例、用例、工具、API、扩展、失败和其他资源的集合。 更新了 4 月 25 日,集成自治代理 AI 部分。 图片来源:作者,Midjourney。 目录 ChatGPT 高质量资源列表:3000 多个提示、示例、用例、工具、API、扩展、失败和其他资源的集合。…

伟大的创造不是计划出来的!来自OpenAI科学家的反直觉建议

来源 | 中国企业家杂志 每天几乎从一睁眼&#xff0c;我们的工作与生活都会被大大小小的目标所牵引。 诚然&#xff0c;若只想实现一些普普通通的小愿望&#xff0c;那么目标导向会非常有效。但对于那些与探索创造、创新发明有关的愿望&#xff0c;目标还有效吗&#xff1f; 近…

GitHub放大招!CEO现场挑战18分钟开发小游戏,人还在台上网友已经玩到了

梦晨 明敏 发自 凹非寺量子位 | 公众号 QbitAI GitHub CEO&#xff0c;直播AI写代码&#xff0c;挑战18分钟完成一个小游戏。 结果只用了不到15分钟&#xff0c;直接成功在线部署&#xff0c;这边人还在讲台上&#xff0c;全球网友已经能玩上了。 整个项目从一片空白的新建文件…

字节跳动副总裁谢欣:未来组织的30条思考

上一篇&#xff1a;支付系统就该这么设计&#xff0c;稳的一批&#xff01;&#xff01; 透明、共享是是创造愉悦工作环境、吸引牛人的前提&#xff0c;是弹性组织有效运作的根基&#xff0c;是未来组织的基石。 来源 | 华麓之音 01 组织升级&#xff1a; 员工需要被激发&#…

用ChatGPT实际沟通的结果[有图有真相]

笔者因为没有办法正常注册账号&#xff0c;所以使用的是试用版的chatgpt&#xff0c;语言模型当下试用版的是Chatgpt3.5的模型&#xff0c;而不是商用版的ChatGPT-4的模型。 首先问AI对单词词汇的含义的理解。 回答的很得体&#xff0c; 然后问对职业的区分&#xff0c;这些我都…

CnOpenData·A股上市公司标准数据

一、数据简介 按照《中华人民共和国标准化法》的定义&#xff0c;标准是指农业、工业、服务业以及社会事业等领域需要统一的技术要求。标准作为一种通用性的规范语言&#xff0c;在合理利用国家资源、保障产品质量、提高市场信任度、促进商品流通、维护公平竞争、保障安全等方面…

ChatGPT炒股:批量下载北交所上市公司的招股说明书

打开北京证券交易所官网&#xff0c;点击发行上市&#xff0c;然后点击公开发行信息披露&#xff0c;然后在查询框里面输入关键词&#xff1a;在北京证券交易所上市招股说明书&#xff0c;然后选择时间&#xff0c;点击查询&#xff0c;就可以看到所有北交所上市公司的招股说明…

万兴科技WondershareFilmora焕新上线已率先接入ChatGPT母公司OpenAI相关服务

AIGC加速布局&#xff01;近日&#xff0c;创意软件A股上市公司万兴科技&#xff08;300624.SZ&#xff09;旗下视频创意软件Wondershare Filmora焕新上线&#xff0c;新版本全新接入ChatGPT母公司OpenAI相关服务&#xff0c;率先在视频创作领域集成AIGC新技术。另据介绍&#…

巴比特 | 元宇宙每日必读:多家上市公司宣布将ChatGPT与虚拟数字人融合,是蹭概念,还是真未来?...

摘要&#xff1a;据财联社星矿数据统计&#xff0c;截至目前&#xff0c;A股中包括元隆雅图、风语筑、天娱数科等17家上市公司公布称&#xff0c;相关业务已经接入类似ChatGPT技术&#xff0c;或正在研究相关技术与数字人结合的应用场景。多位业内人士表示&#xff0c;接入Chat…