当前位置: 首页 > news >正文

C++操作excel,即使函数设置了不备份,但保存后,excel依然会自动生成备份文件的原因分析,及如何来禁止自动备份

开发环境

操作系统:windows 10
编译器:Visual Studio 2010、2015、2017、2022
office 2016、2019、2021
wps 2019、2024

问题描述

通过C++操作excel,保存后,excel会自动生成备份文件。

void CExcelDemoDlg::OnBnClickedButton1()
{CApplication app;          //Excel应用程序接口CWorkbooks books;         //工作薄集合CWorkbook book;          //工作薄CWorksheets sheets;         //工作表集合CWorksheet sheet;          //工作表CRange range;                 //Excel中针对单元格的操作都应先获取其对应的Range对象CFont0 font;CRange cols;CRange iCell;LPDISPATCH lpDisp;COleVariant vResult;COleVariant	covTrue((short)TRUE);COleVariant covFalse((short)FALSE);COleVariant covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);//初始化if (!app.CreateDispatch("Excel.Application")){this->MessageBox("无法创建Excel应用!");return;}app.put_Visible(FALSE);     //可见app.put_UserControl(TRUE); //用户可控制//打开XLS文件books.AttachDispatch(app.get_Workbooks());lpDisp = books.Open("C:\\test\\excel\\test.xlsx",covOptional, covOptional, covOptional, covOptional, covOptional,covOptional, covOptional, covOptional, covOptional, covOptional,covOptional, covOptional, covOptional, covOptional);book.AttachDispatch(lpDisp);sheets.AttachDispatch(book.get_Worksheets());LPDISPATCH lpSheets = sheets.get_Item(_variant_t(1));sheet = sheets.Add(covOptional, _variant_t(lpSheets), _variant_t(1), covOptional);//sheet.AttachDispatch(lpSheets);lpSheets->Release();range.AttachDispatch(sheet.get_UsedRange());sheet.get_Cells();range.get_Cells();VARIANT var = range.get_Item(_variant_t(1), _variant_t(1));VariantClear(&var);//book.Save(); book.SaveAs(_variant_t("C:\\test\\excel\\test.xlsx"), vtMissing, vtMissing, vtMissing, vtMissing,_variant_t(FALSE), 0, vtMissing, vtMissing, vtMissing, vtMissing, vtMissing, vtMissing);book.Close(covOptional, COleVariant("C:\\test\\excel\\test.xlsx"), covOptional);books.Close();//释放对象(相当重要!)range.ReleaseDispatch();sheet.ReleaseDispatch();sheets.ReleaseDispatch();book.ReleaseDispatch();books.ReleaseDispatch();//App一定要释放,否则程序结束后还会有一个Excel进程驻留在内存中,而且程序重复运行的时候会出错app.Quit();app.ReleaseDispatch();AfxMessageBox("It's test mode2 End!!");
}

在这里插入图片描述

问题分析

1、起因是原本是正常的,之前测试人员也遇到过,但当时定位是excel另存为自动备份的原因。
在这里插入图片描述
2、我重装系统后,安装了office2016、wps 2019,然后无意间发现我也会自动备份了
于是开始着重分析,同样的安装包,同样的操作系统,重装系统居然就会自动备份了,很奇怪,于是,经过如下分析测试:

1、升级office 2016到office 2019,问题依然存在,再升级到office 2021,问题被解决(说明office版本可能有影响)
2、回退office版本到2016,然后卸载wps 2019,问题解决((说明WPS有影响))
3、在office版本为2016的前提下,升级wps 2019至当前最新版本,问题依然存在
4、在office版本为2016,并安装了WPS的前提下,打开wps安装目录,发现安装目录下有两个dll(wpsapi.dll及wpsapiex.dll)名字看着比较有影响,于是依次删除两个dll,发现wpsapiex.dll是有影响的,删除后,调用app.CreateDispatch("Excel.Application")会返回错误。
在这里插入图片描述
5、这就说明注册表出问题了,于是怀疑安装wps后,也可能很鸡贼的注册了一个名叫“Excel.Application”的注册表,于是准备去注册表搜搜
6、win+R打开运行窗口后,输入regedit,点确定
在这里插入图片描述
7、在HKEY_CLASSES_ROOT处右键-查找,在查找目标处输入“Excel.Application”,然后点查找下一个
在这里插入图片描述
8、其中分别在HKEY_CLASSES_ROOT和HKEY_CURRENT_USER里都找到一个“Excel.Application”
在这里插入图片描述
9、展开Excel.Application,点击CLSID,然后双击右侧内容,弹出窗口后,复制数据
在这里插入图片描述
10、在HKEY_CLASSES_ROOT处右键-查找,在查找目标处输入上一步复制的字符“{00024500-0000-0000-C000-000000000046}”,然后点“查找下一个”,在计算机\HKEY_CLASSES_ROOT\CLSID\下找到如下图所示:
在这里插入图片描述
11、展开,然后点击“LocalServer32”,查看右侧内容,正常,无疑问。
在这里插入图片描述
12、按F3继续查找下一个,然后在计算机\HKEY_CLASSES_ROOT\WOW6432Node\CLSID\下也找到一个,展开,然后点击“LocalServer32”,查看右侧内容,发现疑问,居然路径被改成wps的启动路径了!!!!!
在这里插入图片描述

解决方案

直接右键-重命名“LocalServer32”:
在这里插入图片描述
后面再次操作会自动生成这个文件夹,并且会将值改为默认的excel路径。
在这里插入图片描述

备注:这里不能删除这个文件夹,我也没搞清楚,删除后,运行的时候就找不到了,但备份却能自动生成,而且重命名后,后面计算机\HKEY_CURRENT_USER也会被自动修改,如下图。
总之就一句话:重命名就行,不用搞其他的,免得引起其他风险

在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Ps:首选项 - 文件处理
  • stm32智能颜色送餐小车(ESP8266WIFI模块、APP制作、物联网模型建立、MQTTFX)
  • go设计模式——单例模式
  • Mybatis插件:慢sql存储到数据库
  • 简单步骤获取IP地址SSL 证书
  • C/C++控制台贪吃蛇游戏的实现
  • go中 panicrecoverdefer机制
  • python构建一个web程序
  • 浪潮服务器NVME 硬盘通过 Intel VROC 做RAID
  • MySQL中处理JSON数据:大数据分析新方向,技术详解与应用场景
  • LabVIEW深度监测系统
  • 实验九:点阵屏实验
  • Linux云计算 |【第二阶段】SECURITY-DAY5
  • 零基础5分钟上手谷歌云GCP - 服务器自动扩展
  • Go 使用Redis安装、实例和基本操作
  • 【5+】跨webview多页面 触发事件(二)
  • 【翻译】babel对TC39装饰器草案的实现
  • iOS | NSProxy
  • LeetCode541. Reverse String II -- 按步长反转字符串
  • Magento 1.x 中文订单打印乱码
  • Python_网络编程
  • socket.io+express实现聊天室的思考(三)
  • Traffic-Sign Detection and Classification in the Wild 论文笔记
  • 从setTimeout-setInterval看JS线程
  • 读懂package.json -- 依赖管理
  • 搞机器学习要哪些技能
  • 基于Mobx的多页面小程序的全局共享状态管理实践
  • 事件委托的小应用
  • 云大使推广中的常见热门问题
  • 阿里云IoT边缘计算助力企业零改造实现远程运维 ...
  • ​二进制运算符:(与运算)、|(或运算)、~(取反运算)、^(异或运算)、位移运算符​
  • (33)STM32——485实验笔记
  • (6) 深入探索Python-Pandas库的核心数据结构:DataFrame全面解析
  • (9)目标检测_SSD的原理
  • (delphi11最新学习资料) Object Pascal 学习笔记---第5章第5节(delphi中的指针)
  • (多级缓存)缓存同步
  • (附源码)ssm学生管理系统 毕业设计 141543
  • (附源码)计算机毕业设计大学生兼职系统
  • (论文阅读笔记)Network planning with deep reinforcement learning
  • (实战)静默dbca安装创建数据库 --参数说明+举例
  • (五)网络优化与超参数选择--九五小庞
  • (转)socket Aio demo
  • .mkp勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .net core控制台应用程序初识
  • .NET DataGridView数据绑定说明
  • .net MySql
  • .NET 反射 Reflect
  • .NET 快速重构概要1
  • .NET轻量级ORM组件Dapper葵花宝典
  • [4.9福建四校联考]
  • [AIGC] 解题神器:Python中常用的高级数据结构
  • [Android View] 可绘制形状 (Shape Xml)
  • [cocos creator]EditBox,editing-return事件,清空输入框
  • [Debugger]调试Arm设备
  • [Flutter]WindowsPlatform上运行遇到的问题总结