2025-06
27

诡异的Excel异常

By xrspook @ 8:38:39 归类于: 烂日记

近两天我的Microsoft 365在处理Excel文件的时候出现了两个很奇怪的现象。

第1个是我打开某个文件,要增加一行,发现增加完以后好像就卡住了,我的鼠标没办法定位,当我点击关闭文件的时候,会弹出一个白色的窗口,里面什么都没有。只有一个右上角的X可以点,但实际上如果我不点那个X,点回车的话,等于是我点击了确认。出去以后发现被我插入了一行的那个东西被保存了,因为文件的时间变成了我刚刚处理的那个时间,但实际上当我再进去,依然是上一次的那个模样。这到底是怎么回事呢?为什么我的鼠标双击某个单元格的时候没有定位输入功能呢?第1次实际上我是没有保存的,发现插入行以后出现了异常,我选择的是关闭,因为关闭文件右上角那个叉做不到,所以我就直接在任务管理器里结束Excel这个进程。当我下一次再打开这个文件的时候,当然它会显示一个不正常关闭的存档按钮,但无论是用那个文件,还是我重新打开的那个,依然会出现我上面出说的那些现象。关键是仅仅是那个文件这样,其它文件没有问题,所以这到底是什么情况呢?我那个文件里面完全没有特殊的东西,没有高技术含量的Excel处理,纯粹是表格,纯粹是数据,再加一些很简单一个公式。这个文件我是添加在坚果云里的,从文件历史看来,一直也都只是我在编辑。从编辑时间看来,也都是正常的,但为什么这个文件就出现了这种奇怪的现象呢?因为鼠标好像是没办法操作,所以打开那个文件以后,我点了个F12,这是一个另存为的功能,然后我把这个文件另存为另外一个文件,那个文件居然就正常了。这到底是什么情况?没人动过我的文件,我自己显示自己动过的时间是没有问题的,我不可能上一次保存的时候没有发现这种不对劲。

接下来第2天,当我要编辑完另外一个Excel文件的时候,要保存,弹个窗口出来说这个文件是只读状态,无法保存。为什么这个文件是只读状态呢?我瞄了一眼最上面的文件名和文件状态,的确显示的是只读。我出去了以后再进去,发现还是这样,我退出文件看了一下坚果云的同步,没有说其它用户正在打开这个文件,坚果云的同步状态也是显示这个文件处在普通状态,可以读写,不处在同步中。好端端一个文件,我怎么会把它设置为只读呢?然后我右键属性,把只读勾掉,接着文件就正常了。

莫名其妙出现一波Excel操作无能,莫名其妙出现一波文件自己变成了只读状态。无论是哪一条,都让人觉得很无语,也很心惊。为什么会这样呢?如果这两个文件我都没有进行坚果云同步的话,可能我动了又或者中毒了,被动了我都不知道,但实际上这两个文件是在坚果云之下同步的,所以如果文件有改动不可能没有记录,但偏偏就是发生了这样的事情,所以这到底是什么情况?是坚果云没有记录下那个东西?改变文件的属性从正常变成只读坚果云不会记录?还是说我用的是win10系统微软很快就要终止支持了,所以故意搞些事情出来。虽然据说Microsoft 365还会对win10系统延长几年安全更新。不是坚果云,不是微软,那么我感觉那个玩意就是单位装的那个EDR杀毒软件了。那个东西说不准在什么时候会启动,有时启动能感觉出来,有时不知道。我觉得那个东西会在我们的电脑里面注入某些数据。比如生成一些隐藏的诱捕文件,据说那些诱捕文件是用来引诱勒索软件的。因为宿舍的电脑我设置了显示全部隐藏文件,所以某一天开机以后,我发现桌面多了几个奇怪命名奇怪后缀的东西,打开发现里面的东西完全看不懂。某一天我又发现,宿舍的那台电脑的坚果云同步了几个旧的文件,只是几个而已,那些都是好几年前的文件了,为什么要同步那些文件呢?打开那些东西,显示没有问题,但至于里面的内容怎么样,不知道。我下载了上一个版本跟同步的那个版本对比,也没有发现有什么不一样的地方,但既然触发了坚果云的同步,我觉得肯定是有些东西变化了,但这到底是什么呢?在单位使用使用这个EDR杀毒软件之前,我的坚果云,我的Microsoft 365都没有出现过上述的那几种奇怪现象。

如果杀毒软件是我们自己装的、是单机版的,我们还可以让它暂停、让它退出,但是这个EDR根本不受终端电脑的控制,所以如果某一天有人控制了我们的总控,那该怎么办呢?

2025-06
1

糟糕的汇总功能

By xrspook @ 8:17:07 归类于: 烂日记

智能化这个东西,我感觉是一个深渊、无底洞。理想很丰满,现实很骨感。几乎可以这么说,现在单位的所谓智能化,无论是单位的作业系统,还是集团公司的OA系统,都是一个四不像的东西。也不是说它们不能把某些数据呈现出来,关键是明明那些明细数据都已经收集齐全了,但是最终那些如何汇总可以这么说,两边都是一团糟。为什么都这么糟糕呢?为什么就不能把数据整合到一个让人舒服的模样呢?最基础的东西不断地让我填,填了一遍又一遍,但最后明明这个汇总结果根据已有的基础数据是完全可以组合生成出来的,但出来的东西就是非常的糟糕。比如说把不应该拼接的东西拼接在一起,结果那个结果就是还不如直接没有,因为放在那里只是碍眼而已,没有任何实质效果。两边的系统都存在这种问题。这是技术上实现不了的吗?显然不是。

因为浪潮现成的那些导出让我们的活没法干,所以我们单位的人也就只能写数据库查询,把我们想要的那些明细数据整合出来,然后通过Excel查询数据库,最终输出。我自己也在做同样的事情,我通过的是Excel的VBA,查询的是多个我自己的原始数据,有些数据只是一个复制粘贴,但有些数据需要日积月累手动录入,之所以不能直接使用系统的数据,因为某些数据是需要进行拆分微调的,某些则需要人肉添加某些必要的字段。为什么浪潮那里就不能把那些字段直接带入呢?还有那些微调,本来是不应该存在的,之所以存在,就是因为发生了一些非常规的业务。某些人觉得这么干没有问题,但实际上他根本没有考虑到我们的系统不支持你这么脑洞大开。再深一层的考虑,为什么会不支持?因为那的确不是一个白纸黑字明码标价说明可以这么操作的事情。难听一点,可以称之为违规,因为规范里根本没说过可以这么干,但如果人情一点,可以说这也是一条没什么问题的操作方式,只是原有的那些不够全面。最终到底认可还是不认可就看你怎么解释,听你解释的人是如何理解、有多大的容忍度。

无论是我的同事查询数据库,还是我用VBA查询多表,最终大家都是根据已有的明细数据生成一个我们觉得舒服、我们需要的那种表达方式。为什么我们能做出来,但是那些所谓系统却做不出来呢?浪潮做不出来,可能是他们根本没有在那个地方用过心。致远做不出来,居然跟我们说是因为我们给的钱不够。实际上有些功能是一期的时候给过钱,写过需求,要求他们那么干的,但实际上他们出来的效果不符合我们的要求。在这种情况下,你应该给我修正过来啊,但为什么没有呢?写需求的人没发现,发现的人不知道如何去反馈。基层单位不知道集团公司当初写的需求是什么。集团公司要基层单位使用这套系统的时候完全没有任何的指引。基层单位只能摸着石头过河,没有手册,没有讲课。我也不知道我应该看到些什么,不应该看到些什么。当我看到一些理论上跟我没有关系的东西的时候,我只能认为可能那套系统就这么个样子,就是可以让我看到,虽然那对我来说没有什么意义。

无论是浪潮还是致远,他们觉得基础数据的收集是他们得做的,而后续的汇总查询是额外的工作量。实际上换一个角度考虑,如果你能把那些字段构直接交给用户,让用户自己去设定流程查询,你完全没有任何工作量。你只需要教会用户如何组合就好了。汇总数据,无论是1个还是10个还是100个,都只是用户发挥想象力的事情而已。他们不敢放开这个,可能他们就没试过放开过。为什么会这么说呢?因为中兴云在介绍他们的系统的时候,就曾经说过这么一条:用户可以自己设定流程,生成自己的查询汇总数据,具备很强的拓展功能。说是这么说,实际上他能不能实现我不知道。显然即便开放了,这也不是一般人就能做得了的事情,起码他得懂一些东西。提出某些汇总需求的人得明确讲出他的数据是怎么来的,然后那个懂一些的人才知道该怎么给你凑出这个玩意。现在我估计情况是要汇总数据的人没有说清楚那是怎么来的,其次那个懂一些帮你设置那个流程的人不存在。

明明打通任督二脉就能轻而易举就解决的问题,现在翻来覆去、耗费大量人力物力。

2025-05
30

自动生成Excel索引

By xrspook @ 8:22:23 归类于: 烂日记

我要对一堆的本地eml文件做一个索引,应该用什么方式表达呢?一开始我想到的是做一个html的网页。上面需要表达的信息包括:分类、时间、附件个数、发件人、邮件主题以及文件路径。文件路径应该是一个超链接,我点击这个网页的超链接,就能到达那个文件,可能是直接打开文件。有没有一种方式是打开资源管理器直接锚定到那个文件但不打开呢?一开始我是这么设想的,但后来网友告知,在浏览器层面没办法打开这些文件,因为安全性的原因,浏览器没有打开文件的权限。如果那是一个txt文件,那么你可以直接在浏览器里打开,如果是一个图片,也能打开,但是如果那是一些其它后缀的文件,理论上是打不开的,哪怕你在浏览器里以资源管理器索引的方式打开了文件夹的目录,当你点击某个后缀文件的时候,会弹出一个窗口让你下载。一整个下午我就在这里兜圈子,总感觉是不是有一种方式能够让浏览器弹出资源管理器锚定到那个文件,哪怕不打开文件本身。我一开始天真地觉得,在浏览器里面点超链接就能直接打开eml文件,因为那个后缀的文件我已经设定了默认打开方式是雷鸟。事实证明,我只是一个下午都在白费力气而已。

普通a开头的超链接是无法打开eml文件的,我想到了Excel里面的超链接。Excel的超链接可以直接链接到某个文件。它跟浏览器不一样。不会在Excel里面打开那些东西,哪怕那些个txt或者一个图片,会直接打开文件。所以我就尝试在Excel里给eml文件做一个超链接,结果发现。当我点击那个超链接的时候,会弹出一个窗口,告诉我这么干不安全,但是我依然可以选择是继续打开那个文件,之后雷鸟就会启动,那个eml文件就被打开了。所以简单来说,实际上在Excel里面是直接可以打开eml文件的,不过打开的时候会有一个令人烦恼的弹窗,可能在某些地方进行设置,可以把那个安全提醒的弹窗去掉,但我觉得没有必要。如果你不想被那个弹窗烦恼,你可以右键那个单元格的链接地址,直接贴到任何一个资源管理器地址栏,回车就打开了。操作是有点烦,但起码不会像浏览器那样,打不开或者非让你下载不可。

折腾了一个下午之后,我发现原来我的目标居然是把那个邮件索引做在Excel文件里。Excel的版本可以做的,和之前的功能没有区别,更强大的地方在于如果是在Excel文件里,排序很方便,搜索也很方便。

接下来我没有做更多浪费时间的事情,直接去把这个问题丢给Deepseek,问它如何用Python的方式把批量的 eml文件信息输出到Excel。第1次给我的那个版本只能针对某个路径,但如果那个路径里面还有子文件夹会被忽略,所以后来我增加提问,所以Deepseek又给了我递归那个路径下所有文件夹的版本。默认的回答没有附件个数,所以最后我要加多了要计算每个邮件附件个数的功能。

事实证明Deepseek真的是一个好东西,因为它第1个版本的代码已经能输出大概差不多那种东西,但是不能完全符合我的要求,因为它认为重要的信息和我需要的信息以及排序始终有区别。把pandas里面的数据输出到Excel有好几种方式,但是有些输出方式出来的那个Excel文件我个人感觉很丑,所以我又花了半个下午的时间改成了以xlwings输出,这个东西比其它输出在格式调整方面有更大的调控空间,比如自适配行高和列宽。在其它引擎里可能需要一大段的代码,但是在xlwings里面就只需要一句autofit。之所以知道这个,是因为之前在学Python提高Excel工作效率的书里我已经接触过这个东西。

Deepseek的代码能解决核心问题,但细节调整还是得靠自己。从第1次叫Deepseek写代码到我最终得到我想要的那个Excel索引,花了不到24小时。

2025-04
12

使用内部数据就会卡?

By xrspook @ 8:35:34 归类于: 烂日记

昨天说到一个很简单的SQL语句引用的数据库就只有一个字段两行记录,居然需要24秒才能得出结果。这让我觉得非常不可思议。首先可以肯定的是数据量非常少,为什么会出现这种问题呢?那只能是连接方面是不是出了什么故障,也不能说,那是失效的,因为的确还能查询得到想要查询的东西。在我测试的那个宏里面。我引用了两个文件,一个是外部文件,一个是内部文件。外部文件是含有比较多的数据,而内部文件,也就是我一开始说的那个只有两条数据。我感觉如果我的SQL再厉害一些,我对VBA再熟悉一些的话,那个内部文件可能我就不需要引用了,我直接就在VBA里创建一个数据库,然后把两条数据给写进去,用完以后就删掉,但显然现在我还没有很大的把握,一定能完美地做这件事情。把我某个文件里面的数据转化为数据库的数据我又烂熟,所以我采取了现在使用的这种方式。

ADO+SQL的这种方式,因为我们是跨表引用,所以意味着数据肯定来源于多个文件。他们有可能是同一个工作簿的不同工作表,也有可能是在不同的工作簿里。对我来说,只要是在一个工作簿里,那么起码一开始设定指向的时候就得有一个数据源。最经典的方式引用的那个数据源在使用数据的时候,在from后面不需要进行进一步的引用,其它的就得麻烦一些。我的第一个反应是,是不是引用数据的那个语句出现了变动呢?比如说现在我用的是Excel12。在数据源引用方面,我又折腾了一番,发现好像还是那样,没什么进展。会拖慢查询的那个数据源,我甚至把它放到了主数据源里,结果发现还是很慢,于是这就排除了是数据源引用语句变动导致缓慢。

所以这到底是什么原因造成的呢?因为我有很多个跨表引用的查询。有些查询是内部数据外部数据都有,有些只有外部数据,经过测试后我发现好像只有引用了内部数据的查询才会变慢。

为了证明我这个想法,星期三的晚上我编造了一些数据做测试。主要原理就是研究是不是数据源的关系导致这种变慢。一开始我的设计就是一个排列组合的方式,因为我默认的数据引用是要跨表的,所以我把数据源根据内内、内外、外外和外内这4种方式测试,实际上内内和外外是一回事,也就不需要进行两个引用了,所以我又把那两个东西拿了出来,同样进行测试。结果让人有点吃惊,凡是有内部数据参与的查询都会变慢。我测试的数据就只有一个字段几条记录,内内和内外需要12秒,外外需要0.1秒,外内需要24秒。这就能解释为什么我的那些变慢的查询起码都要24秒才能出结果。因为我永远把内部数据放在后面。究其原因是因为我设计那些查询的时候,我后来才想到要在那个查询文件里面搭一个加脚手架,把一些基础的东西加上去,在这种情况下我加得最多的是日期表。

关于这个测试的来龙去脉以及最终的结果,我在ExcelHome里面做了一个详细的帖子,在这里就不再具体阐述了。

折腾了这么一番以后,我发现这个锅还真不是我整出来的。造锅的是微软,不知道更新出了什么状况导致了。

Excel用多了,不知不觉我也居然能挑出微软的毛病。

2025-04
11

查询突然变慢

By xrspook @ 8:14:07 归类于: 烂日记

周三的下午跟往常一样,我点一下自己写的ADO+SQL+VBA的跨表查询文件,结果发现之前一秒就能出结果的东西等了好久,鼠标在那里转圈,我都甚至怀疑是Excel不知道因为什么原因卡死了,但我又有理由相信这不是卡死,因为当VBA要运行很长时间的时候,就会出现那种假死的状态。以前我遇到过这种情况,当我要查询一整年的平均库存的时候,就会这样,如果只是查询一个月的,没有问题。之所以一整年会出状况,是因为需要处理的数据的确有点多,如果我用的不是Excel的VBA的SQL,如果我要做的那个平均库存是在数据库里,用正儿八经规范标准的SQL做,我感觉不需要那么长时间。要长时间运行,无可避免会出现假死状态。周三下午,我就经历了一次,但我觉得那个查询不应该会假死。那个查询文件我用了接近两年,一直以来都没什么问题,因为数据不多,很简单,所以正常情况下,一秒之内出结果。其它查询可能需要的时间长一点,因为涉及的数据量比较大,但是这一次让我卡死的那个,一直以来,当我测试成功通过以后,就没有卡死过。

为什么会这样呢?我把自己写的所有查询文件全部都点了一遍。我觉得既然最简单的那个都要卡24秒,那些之前需要更长运行时间,会让人疯掉。测试结果让我有点意外。我猜想会更疯狂的那些居然没事,跟以前一样,运行时间没什么区别,但有些我感觉没有难度的东西,反倒卡住了。最卡的那个卡了97秒,实际上那个查询平时只需要0.5秒。

遇到这种情况,首先我不觉得是因为我的查询文件出了状况,因为这几天它没改动过,除非有人动了我的电脑,但这个几率太低。我觉得出状况最大的可能性是那个源文件的结构发生了某些变化,因为我引用的是Excel文件。用的那个范围是一个超级表,而如果在那个超级表以外的某个地方出现了一些奇怪的数据,比如说在纯日期的列里面出现了文本,那么就会导致在SQL转化数据的过程之中出现一些意想不到的事情。为了避免这种事情,我把源数据的那些空白行和列全部都删除处理。这就保证了我的原始数据是符合规定的,和以前的格式是一致的。接下来我觉得这会不会是更新的问题,所以我对windows系统以及Microsoft 365都进行了手动的更新。这两个东西的确都是需要安装更新的。更新完成了以后,问题依旧。

接下来我有两个选择,一个是就这样等死,反正现在的情况也不是出不了查询结果,只是用时很长而已。万一这真的是微软升级的bug,说不定哪一天他们就会解决掉,但也说不准他们永远都不解决这个我认为是bug的问题。第二个选择是我主动出击,逐个测试VBA查询里的语句。找出那条让我运行时间很长的语句,然后判定到底是什么原因。

那个理论上一秒就应该结束的查询,实际上是Excel工作表里面汇集了多个汇总查询。我只是把结果都在一个页面展示而已,所以首先,我要找出导致最终结果很慢的是哪个查询。这是一个反推的过程。让我有点意外的是,那些涉及很多数据的查询居然都没有问题,一个我觉得根本不会出问题的问东西里居然出问题了。出问题的那个查询实际上只涉及了一个字段两条数据。这简直让我震惊了,怎么居然这样呢?

这个问题是我之前没有遇到过的,但从发现这个奇葩之后,我觉得自己有点跟那杠上了。

© 2004 - 2026 我的天 | Theme by xrspook | Power by WordPress