普通视图

发现新文章,点击刷新页面。
昨天以前首页

连串糟糕

2025年5月7日 08:16

五一之后的第一个工作日,简直就是糟糕的战斗机。上午的所有事情都比较正常,一切都按部就班,而且顺利得有点让我吃惊。比如平时得花好几天才能凑齐的东西,居然一个早上就完成了。那个东西之所以凑不齐,原因肯定不在我,是因为其他同事没有把数据交过来。

五一假期5天,每天都有100多台车,所以我拿单的时候实际上是比较崩溃的。5天加起来就超过了600个单。点单花掉了半个小时以上,把单拿回到办公室,又花了接近一个小时才全部用计算器过了一遍。后来我算了一下,这其实也挺神奇的。为什么我要花掉50分钟才点完那600多个单呢?我敲计算器的速度很快。600多个单里就只有最后那50个单出头那一份需要重打,其它都是一次性就完成。那么多单都可以一次性完成,我觉得运气比较好,而且很多单都是每份30个以上,好些都是50个左右,所以那么多单都可以一次性不出差错,就平时来说,这也是比较罕见的。为什么我依然要花那么长的时间呢?后来想了一下,因为实际上用计算器把那些单都打一遍核一个总数之前我还要点一下那些单的数量。接下来就是在打单的过程之中又有别人找我核对某些数据,所以实际上600个单我花了大概40分钟。直接粗暴地用时间除以数量去算,好像效率不怎么高,但实际上平时一天的量大概100多个单,需要个10~15分钟是很正常的。

糟糕的事情大概从下午开始,首先是下午一上班我就发现,办公室的电脑win10右下角的坚果云出现灰色状态,这意味着那东西连不上服务器,但是QQ跟微信都是正常的。我马上去打开了一下百度,发现打不开。接着我打开命令行去ping百度,直接没反应,然后我又去ping单位内网的智能化系统,可以打开。当我再去上集团公司的OA,发现同样是打不开的,这到底是怎么回事呢?简单一句就是我用Firefox打开任何的外网都不行。不仅仅是Firefox打不开,用ping的方式也完全没有反应。这到底是什么情况?然后我就去隔壁办公室,让别人也测试一下,发现他们的百度是能打开的,但是集团公司的OA打不开。遇到这种事情,我也就只能找网管,第一个反应是是不是那个杀毒软件又禁止了某些东西,比如封了某些端口?

Firefox是我的默认浏览器,但是当我用360极速打开百度的时候,居然打开了,虽然打开速度很慢,但是当我用Edge浏览器再去打开的时候,发现百度是打不开的,到底是什么情况呢?然后我赶紧求助网友,求助网管,在他们给我回复之前,我突然想到:这些有些能开,有些不能开,聊天软件没问题,是不是DNS被污染了呢?接着我就手机搜了个DNS,换了上去,没过几秒,所有的不正常都消失了。让我觉得很无语的是,在我的电脑打不开网站的时候,实际上我是用电脑共享出WiFi让手机上网,手机在微信上搜索DNS的。所以结论就是,并不是网络有问题,而纯粹只是DNS出状况了。网友说这个问题也不完全是我,他觉得是中午有人动过服务器,断网了一段时间,然后又恢复了,但是我的电脑手动设置了一个不太靠谱的DNS,所以就卡住。

网络恢复了,焦虑减轻了一大半,接下来用固体浆糊做了一些事,想去洗手,发现洗手间没水了。先是没网,然后没水,如果再加上没电,那么就算是全家桶了,但幸好这个为没水只是暂时性的,过了几分钟我再去,发现又有水了。问单位的负责人,告诉我他正在查单位哪里在漏水,所以刚才把水闸关了,但是还没找到漏水点。关了一下水闸,导致没水,居然都被我碰上了。

晚饭过后,我又仔细看了一下宿舍楼南面的那堵墙,发现又有几个非洲大蜗牛在爬升过程中。然后我就回宿舍拿了高浓度盐水对着我可以喷的那个来了几下,没过几秒钟的玩意就掉到地上了。有一个很高,我够不着,但是那个玩意已经爬到了我楼下那个房间阳台窗户的最高处,再往上爬就是我的房间了。所以我就回宿舍,先试图从高处往下喷,结果那个角度太刁钻,盐水根本喷不到,接下来我就拿了个水,拿了个盆,不断地往那个地方泼水,结果还是够不着。没有办法之下,我只能回到1楼,想拿个梯子爬上去再喷,然后就遇到了两个男同事,他们直接用梯子把那个东西给搞下来了。事实证明,用盐水喷正在爬行的蜗牛,的确可以让它缩回壳里,但是盐水不能杀死蜗牛。这是我想搞第2个蜗牛,回到1楼的时候,查看第1个被我喷在地上蜗牛时的结论。那个时候我不确定蜗牛死了没,所以我在宿舍出来的时候就带了一包洗鼻盐,直接就倒在地支蜗牛那里。最后我整了三只蜗牛,首先都是被喷到地上,然后我在上面撒盐。理论上那个玩意应该出水严重,但我觉得它们缩回到了壳里面,只是最外层的地方接触了盐,我不确定这样它们会不会杀死。微信公众号上科普的那些非洲大蜗牛文章说盐是可以杀死蜗牛的,因为蜗牛80%是水分,盐下去以后会让它们脱水。但我觉得这个东西得分情况讨论,如果你直接把它丢在盐堆里,只要出来它就必死无疑,它死定了,但是你如果只是在那身边撒一点盐,或者在它的软体上撒一点盐,那个东西完全缩在了壳里,可能受影响的部分不多。我撒完盐不久,下了一场大雨,当雨水把盐冲走了以后,我感觉大概率它们又会活过来。回到宿舍,拖完地坐在那里,拿起手机,我觉得那个蜗牛不会死,所以我又在淘宝上买了软体动物的专杀农药四聚乙醛。如果那个东西真的可以让蜗牛死一片在那里的话,我就直接让办公室多买一些,在宿舍楼、办公楼的草丛里都撒。如果不是那些杂草乱七八糟生长完全没有人管理,我们根本不至于会出现这种非洲蜗牛大泛滥。

单位大,单位废弃乱七八糟的地方也很多。

繁杂

2025年5月2日 08:36

22点44,同事把4月最后一天单位的作业数据发出来。理论上在22点30,单位的作业就算结束了,再往前推,实际上大概在21点30的时候,最后一车已经完成过磅,也就是说21点30-22点30大家只是在等待约定的结束时间而已。之前我也试过提前行动,结果是居然在22点28的时候,又来了几台车,他们是压着点过来的,于是我只能把之前已经做好的东西推翻重来。这一次,我不想推翻了,所以我真的是等到了22点30以后才开始行动,在同事把作业数据发出来之前,其实我已经整理好我的那部分了。一直以来我都是这么干的,这需要有非常好的预判,同时也意味着我不是在等待他们发号司令才开始做我的事情。

确认最终数据之后,我又花了一个小时,把接下来的事情做完。那包括核对库存,做各种各样的表,以及之前把已经做好,但没有提交的完成最后的步骤。为什么我会有月末焦虑呢?因为虽然这些事情都很琐碎,但是累积起来得用几十去形容,它们之间有很强的关联性。当你需要报送的东西越来越多以后,除了把那个数据做出来以外,你也得保证它们互相是不打架的,虽然它们都来自于同一个数据源,但是因为某些特殊情况,会有一些意外的发生。比如说一些非典型业务的出现,就很容易导致没有把数据反映上去,又或者没有把某些数据剔除掉。因为类似的东西要报很多,所以很重要的一点就是,我有没有漏掉?有时候我会做着做着,突然间不知道自己下一步要做什么了,尤其是当我做完一件事,然后被打断的时候。我也说不准这到底是我记忆力不好了还是真的太繁杂了。近几年那些加码的事情得用离谱去形容,以前我只需要管好纸质的东西。现在纸质的东西得管,系统也得管,因为系统的东西实际上是人工录入的,而且系统还一个又一个添上去。纸质的东西也就那样了,但系统的东西,还有一些你预测不到的,比如明明该到你报送的时候了,系统却打不开,又或者没办法转到你需要报的那个表上面,简直让人无语。

到该报报表的时候,报送报表的那个网站打不开是让人很抓狂的。第一次遇到的时候,我的第一反应是可能网站出状况了,我等一等,但是等了半天,还是那样。我差点就要找我的上级反映我报不了数据了,但是在反映这个事情之前,我把那个网站在另外一个浏览器里打开,结果居然就开了。谁知道你是什么情况呢?一直我都是用Firefox做那个报表,为什么Firefox现在就是打不开呢?那个系统是浪潮做的,浪潮干的事,什么状况都有可能发生。根据我的经验,这种有些浏览器能打开,有些浏览器打不开,尤其是我经常用的浏览器打不开的状况,通常清除一下这个网站的cookie就好了。结果真如我所料,我清除了那个网站的cookie,网页就打开了。当我跟网友吐槽起我这个差点给上级上报很囧的事情以后,他的回复是实际上清除缓存不应该由我这个使用者完成,而是应该在做网页设计的时候就写好清除缓存的脚本。使用者无论任何时候,只要不是服务器那边挂了,都可以正常访问使用。这证明了,不是我的问题,不是Firefox的问题,又是浪潮不知道哪位干的好事。

又一个月末挺过去了,但这个月末我居然有种其实我也不确定我是不是都干完了,还是说有些事情我漏掉还没做的迷糊。

win10更新卡死

2025年4月25日 08:27

周三的上午跟往常一样,我操作完一些必须要完成的事情以后,看到win10右下角出现了更新的符号,点开后那里说我已经完成了一个框架更新,同时也有一个累计更新,问我需不需要下载安装,我点击了下载安装,下载是正常的,但是安装到最后就告诉我更新失败。拿着那条代码去搜索,发现原因大概是这个更新在我这个系统的更新目录里,但是里面缺少了二进制的代码,所以更新失败。如果没记错的话,上个周末在家里,我的笔记本电脑也出现过这种情况,但是那个时候我根本没想,更新失败就等下一次再更新吧,反正也无所谓。单位电脑的框架更新已经安装完成,电脑就必须重启才能完成最后的步骤。反正那个时候我也没什么工作,更新完毕,重启一下电脑,理论上也耗不了多少时间。我又是那种强迫症患者,没办法接受右下角一直都有那个更新的符号。我在点击重启之前,我的手机正在使用着电脑共享出来的WiFi。以前是一直没什么问题,反正关掉电脑以后WiFi就断了,那么手机就会自动连上其它的WiFi。之所以我要用自己的电脑和无线网卡共享一个WiFi出来,是因为隔壁那个路由器可能连接的人多了,经常会出现莫名其妙的缓慢卡顿甚至上不了网。

Windows进入更新的蓝屏,进度条什么的一切正常,但是到了“正在准备windows,请勿关闭计算机”那个界面的时候。我就觉得不对劲了。电脑一边在更新,我手机一边在做任务,正常情况下我任务没做完,电脑就应该已经更新完毕了,但实际上我的任务全部都做完了,居然还卡在那个界面。卡了15分钟以后,我就不淡定了,开始找网友,开始在微信上搜索。卡了半个小时后,我更加不淡定了。在那个蓝屏的界面,除了等待,就只有硬重启。硬重启非常有可能会导致系统的损坏或丢失,结果就是进不了系统,或者即便能进系统,系统也不正常,所以最终的后果就是可能得重装。我知道强行关机的后果,但是等待实在让人非常煎熬,于是你控制不住自己用手机查找各种信息。网友建议我观察一下硬盘灯的状态,说如果硬盘灯处在熄灭状态,那么我重启估计也可以,但硬盘灯一直闪烁,只是有时闪得慢一点,有时闪得快一点,闪得快的时候,你甚至可以觉得那是常亮的。有段时候,硬盘灯闪得非常快,我觉得这是不是意味着这个卡的界面要结束了,但实际上并没有。闪得非常快之后又开始慢闪。我知道硬重启不太行,所有人都在劝我要耐心等待。幸好这段时间单位没什么事情。在纠结了一个半小时以后,突然蓝屏消失,电脑进入黑屏。之前也发生过一次,但当我动了一下鼠标后发现实际上是那个蓝屏的状态持续时间已经超过了半小时,所以我的电脑自动进入了休眠。一个半小时之后的那个黑屏跟之前不一样,因为几乎同时我就听到了电脑开机的声音,也就是说总算结束了那个蓝屏进入重启。我给好几台电脑都安装过win10系统,安装之后那些电脑都要进行很多的更新,但是我从来没有试过任何一台机会卡在我遇到的那个蓝屏界面超过一个半小时,别说一个半小时,超过15分钟都是比较离奇的事情,但总算我的电脑没有卡死,成功重启也成功进入系统。进入系统以后,我做的第一件事就是去更新那里不断的按了好多下暂停更新。直接把那个更新的日期推迟到5月中旬。

我实在接受不了月末的时候,再给我发生这么让人崩溃的事情。

Office的安装与激活

2025年4月16日 08:44

决定了我的备用电脑要安装Office 2021 proplus之后,接下来我就要决定这个玩意要怎么安装以及怎么激活。我是2017年转的岗位,大概是2018年我觉得是时候给office做一个升级了,在那之前我用的都是Office 2003。 Office 2003贯穿了我整个大学生涯以及开始工作的前十年。为什么我想到要升级office呢?因为岗位不一样了,我需要处理的数据更多更复杂。为了提升自己的技能,所以我买了Excelhome的三件套,那个时候标配的Office是2013,但谁也没告诉我2013的数据透视表就是一个巨大的悲剧。在这台电脑建立了数据透视表,到另外一台电脑就会失效,因为不知道为什么数据透视表的引用居然是一个绝对引用。你把你建立的文件发给别人,别人就会遇到,当他修改明细表的数据的时候发现汇总的数据透视表没有变化,接着,如果他足够理解数据透视表,一看源数据就会发现,原来是那样。你或许会觉得修改一次就完了,但实际上不是这样的。我有很多数据表格,我需要用同步软件在我不同的电脑上同步。同步完成的文件是上一次修改过这个文件电脑的绝对地址。结论就是这根本没法玩。所以我不得不又退回了Office 2003。2018年的双11我入手了荣耀笔记本电脑,自带的是Office 2016家庭版。那个家庭版让我的确感受到2016数据透视表已经治好了2013的那个作死的问题。我也尝试在台式机上安装2016,但那个时候我没有找到靠谱的激活方法,所里2018年的双十二,我在微软商城入手了Office 365个人版。当时那个玩意还附带了一年的视频会员,我选的是爱奇艺,但即便这样,价格也不低。不过这保证了我所有的电脑都可以用同一个office的版本,而且是最新版。

虽然我的电脑没有问题了,但是我还要解决我同事的电脑,因为我的岗位不仅仅是一个人,我还得和他们共享数据、共同编辑,所以那个时候我就研究了一番Office 2016 proplus的安装以及激活。

Office 2021跟Office 2016最大的区别在于,如果是批量版,从2019开始,再也没有官方的离线安装文件,你只能通过部署的方式下载。只是批量版没有了这种方式,零售版依然有离线下载安装程序。这貌似把一部分人挡在了门外,但实际上会一些人会把这些必须要靠命令行才能完成的事情可视化。现在无论你要想安装什么型号的office,总有部署工具,能满足你的需求,他们不仅仅能安装官方版的office软件,还可以一条龙替你激活,但是那种激活方式是不是你想要的,又是另外一个问题。但起码就安装这个步骤来说,你不需要去找微软官方的下载地址了,因为实际上那些部署软件用的就是微软的通道。

不同版本的office,安装设置会有一点点的不一样,比如更新通道的选择,比如选择零售版还是批量版。这两种东西的选择,关系到后续激活到底要用什么样的方式。即便同样是零售版或者批量版,但是不同型号的office以及同型号office的不同细分,又会有不一样的注意事项。

所以我感觉,既然我决定了要装某个版本的Office 2021,对我来说最大的抉择就是我要以什么形式激活,然后才能决定我应该安装什么版本的2021。

确定买断Office的版本

2025年4月15日 08:49

经过了Microsoft 365惊魂一夜之后,我意识到我不能把自己吊死在一棵树上,所以即便我要继续用 Microsoft Office软件,我也不能把所有电脑都用上365版本,主力机我可以继续用365,因为显然那个是最顺手的,如果他们能一直把服务提供下去,我也愿意一直每年都给他们一些费用。万一某一天365故障了,不让我们用了,我也得有对策,所以我的计划是所有的备用电脑全部装上proplus的版本,至于要装2019、2021还是2024,得考虑一下。2019跟2021比起来,我肯定会选2021,因为经过那么多年,其实2021也已经成熟了。之前不知道听谁说2016跟2019会在同一时间停止支持。

在我还不确定是要用2021还是2024的时候,突然间有人在ExcelHome上面问除了Microsoft 365以外,还有哪个版本的office是支持溢出函数。溢出函数是什么?ExcelHome的大神没有马上反应过来,但是我反应过来了,因为我用过那些函数,当我的设置不当的时候,在理论上应该显示正确答案的地方就会出现“溢出”两个字。溢出函数说白了就是动态数组函数。以前的数组函数,你必须要用三键结束,而且你还要把函数扩充到你想要的范围,但不知道是从2019还是2021开始就有了溢出函数这个东西,又或者准确的来说应该是动态数组函数,这些动态数组函数你只需要在一个单元格里设定,它的结果会扩充到其它的单元格,会向右向下扩充。至于扩充多少,就看你所设定的那个函数能获取到什么样的结果。正如上面我所说,如果你的函数设定是不对的,那么你就会得到溢出这两个字。如果你把单元格定位在动态数组函数非公式设定的那个单元格,会发现里面是主单元格灰色的公式,但实际上你看上去那个单元格又是有数据的。这是很方便的东西,也很奇妙,但如果你直接想把那个结果进一步使用,又很有难度。哪怕你想把那些东西建立一个超级表实际上也是做不到的,你想把那些数据作为数据透视表的元素去引用,也是不行的。所以这个动态数组函数到底用在什么地方呢?我觉得只能是最后的一步,就是你想做的那个事情的最后一步,因为那之后你已经没办法再继续操作下去了,情况就像在VBA的SQL里,把数据透视化展示就是语句的最后一步,透视处理之后的东西,你再也没办法进一步操作了。

我用过动态数组函数,但用得不多。因为我知道很多人的office还是挺低端的,可能不支持这个玩意,我看到他们看不到,文件发过去等于没用。动态数组函数我用得不多,但xlookup函数我用得挺多,基本可以这么说,在考虑怎么得出索引数据的时候,基本上我都会首先想到那个,而不是经典的那些组合,虽然实际上在某些情况下,他们得到能得到一样的结果,经典函数加上超级表的结构语言依然能得出很简便的索引公式。 Microsoft 365故障的那一天,因为电脑自动被退回到了Office 2016家庭版,然后我就见识到了自己的xlookup函数全部崩溃的那个画面。于是第二天我就把那些Excel表格公式全部改成了lookup函数,实际上也没有多大的改动,因为那不就是个多条件索引而已。 lookup函数Office 2016肯定是支持的,但是xlookup函数好像要到Office 2021才算是全体支持,至于升级到后期版本的2019是否支持,这个我还得进一步找一下资料。

为什么要高级版本的office呢?因为高级版本的office支持的Excel函数更多了,但是是否最高级的版本就最好呢?未必,因为据说Office 2024有不少bug。

综上所述,所以我把目标买断office版本初定为Office 2021proplus。以防万一,我也要把自己经常使用的那些Excel表格里面太高端的公式全部低端化,也不一定要低端到Office 2016也能支持,但如果真的能做到那样的话就更好了。

Microsoft 365家庭版全球一起宕机

2025年4月14日 09:31

回宿舍开始动感单车课程,一开始我觉得自己还没有回过神来,但随着运动时间的延长,我渐渐把那个很烦人的东西放一边了。运动对我来说是一个很好的减压方式,到了一定程度以后我会忘却一切。我不知道这是因为我专注其中,还是运动分泌的某些东西会让我好过一些。

运动结束一看手机,发现有人给我发微信说他回到了办公室,他电脑的office软件正常没问题。打开他的截图,原来是Office2021家庭版,那肯定没有问题。不是痴迷分子,看到office软件可以用,根本不会意识到自己是不是跟我一样的问题,但可以肯定的是,这一次抽风的是Microsoft 365,而且可能是只是家庭版家长以外的用户,但也可能个人版跟家庭版的主账号也会有一些毛病。其它机子附带的那些各种家庭版,又或者是用其它方式激活的各种批量版没有问题。给我发微信的那个同事,也是在我们那个Microsoft 365的家庭版里的其中一个小孩,他虽然知道自己是365的订阅用户,但是他却没有意识到自己办公室那台电脑用的原来是Office2021家庭版。

当他说没问题的时候,我没有电脑,所以我打开了Microsoft 365的app,发现之前说我的账号是免费用户的地方现在显示我是订阅用户,所以这是不是意味着电脑好了呢?于是我赶紧开机,发现电脑还是不好,但不知道为什么之前我的office是无论如何只读状态,这一次打开的时候就直接给了我一个Office2016家庭版的界面,不仅仅是界面,帐户那里也显示我是2016家庭版,所以微软到底什么脑洞呢?365用不了,但是这个帐号下还有一个office,那么就给他切换到那个可用的许可证。但实际上他们真的能做到吗?除了office的界面很不一样以外,功能也很不一样,我不知道这样纯粹只是换了个Office版本许可证,这个阉割版的office到底有什么bug。一个普通的升级降级都会很容易导致office那些功能无端端就不能用,更何况是这种降级了几个级别的?Office 2016、2019、2021,现在最新版本是2024,Microsoft 365对标的是2024,又或者你可以说是2024 plus,因为2024版不具备的功能,可能365也是有的。虽然我不知道这次带了多少bug,但起码office可以打开编辑了,只操作一些低级的功能完全没有问题。

接着我马上打开网页版的微软账号,发现那里依然不显示我是Microsoft 365家庭版的订阅用户,当我再次打开手机app的时候,发现我的账号又变成了免费账号。接下来我又去搜索微信,出来的结果是微软发出了官方的声明,说Microsoft 365家庭版的服务器出了一些故障。除了官方账号以外,其它公众号也说这个故障是全球性的,国内好像是从周四下午开始就陆续有人发现这个问题。可能我的运气比较好,我是晚上19点多才发现的。也不是说我下午一直没有使用。我一直都用着,但一直都没有问题。大概就是那个点,突然我的账号我的软件要跟微软交换某些数据,于是就卡住了,然后就傻掉了。理论上Microsoft 365的账号是不需要一直联网的,但要过一段段时间就服务器认证激活。可能我就是那么好彩,校验的那个时点刚好遇上了他们服务器瘫痪。服务器瘫痪是肯定,从微信公众号上的某条信息看来这是全球性的,我就没那么慌了,这就意味着这不是因为贸易战争,针对中国而出现的毛病。全球性的毛病不需要焦虑,过上一段时间就会好。

大概在周四晚上11点左右,我发现office好像终于正常了,手机app显示我是订阅用户,在网页上微软账号也显示出我是家庭版的订阅用户,电脑上的 office也可以在帐户那里重新切换回Microsoft 365。

折腾了我整整一个晚上的365风波终于告一段落。

Microsoft 365家庭版崩掉

2025年4月13日 08:24

周三下午发现Excel SQL查询的问题,周四下午算是写完一个调查报告,周四晚上跟往常一样等待的单位的作业结束,结果在某次使用Microsoft 365的时候就出了问题。突然弹出一个窗口,说我的账号上有Office2016家庭版。这意味着什么呢?一开始我并没有马上反应过来,但接下来的事情让我傻眼了。实际上这个并不是一开Office就出的状况,是我正在使用过程中,突然就弹窗。看一下右上角,我的账号是处在一个登录状态。再看我的帐号的那个地方,果然,如我所料,Microsoft 365显示出一个未授权的状态。怎么就未授权呢?无论我怎么点击,出来都是没有结果.于是我就尝试在网页上登录微软账号,第一次进去的时候显示错误代码,403禁止访问,过了一段时间之后我再去,网页上微软账号算是登进去了,但是那里显示了我只有 Office 2016家庭版以及已经过期的Microsoft 365个人版。那个人版肯定过期的啊,因为之后我加入了Microsoft 365家庭版。无论是在微软账号的首页,还是订阅页面,都没有看到Microsoft 365家庭版的订阅信息。我不确定这到底是不是正常,但从直觉看来这很不正常。与此同时,在账号首页,我还能看到我的家庭成员。家庭版的家长是我的同事,不可能把我踢出去,而且家庭的成员也都在,如果要踢就一并踢了,我就看不到那些成员了,所以这到底是什么情况呢?

遇到这种事情,我是很慌的,因为就在较早时候,准确来说大概是半个小时之前。不知道为什么,我就看到了传闻说微软要退出中国。华大基因使用的系统以及office软件也被禁止使用了,所以微软真的对普通个人用户也干这种事情吗?

首先我去微博搜索,发现还没有消息。在这期间我一直在联系家庭版的家长,但是他没有回复,结论只有一个,他去踢球了。一个小时后,当我再去搜索的时候发现微信上有人说Microsoft 365账号的订阅出现了问题。有人显示的订阅被取消,有人显示未授权。通常发生在Microsoft365 家庭版的账号订阅上。这个时候我依然是慌的,难道他们就这么迅速地要针对中国用户?在微信上搜索到这条信息之前,我有的同事已经跟我说,他的office没有问题,原来他用的是Office2021家庭版。

周四下班之前,上面有个任务让我要报某个数据,但现在我的office软件处在一个只能阅读的状态。数据出来了,但我用什么编辑呢?没办法,这下我只能把表格发给自己,然后保存下来,用手机上的Microsoft 365打开编辑保存,然后再发回给自己,电脑上,用只读方式打开核对数据无误后,再把表格发出去。丁大一点的手机,要处理这个,虽然只是填写两个数据,也足以让我觉得很崩溃。

手机上的Microsoft 365显示我是一个免费用户,实际上我应该是一个订阅用户,因为我是Microsoft 365家庭版用户,几乎可以肯定,这种订阅关系不知道为什么被取消了,或者准确来说失去了关联。手机可以打开表格,编辑表格,保存表格,为什么电脑上的版本就只能阅读呢,同样都是免费用户。

那个时候我的脑子里有无数个念头。我的所有电脑全部用的都是我微软账号登录的Microsoft 365,一旦那个玩意失效,我该怎么办?直接换到WPS是不行的,因为单位作业数据的获取是通过数据库查询获取的。开发那个查询的也就是我家庭版的家长,还没有把WPS的查询开发出来,直接把office的查询放在WPS里面,是没有任何效果的。这该怎么办呢?

在办公室里等待下去也没有用,因为这不是一时半刻就能解决的问题,而且问题不在我,所以我也就只能先回宿舍开始动感单车课程。

使用内部数据就会卡?

2025年4月12日 08:35

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

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

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

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

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

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

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

查询突然变慢

2025年4月11日 08:14

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

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

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

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

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

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

大家一起黑屏

2025年2月22日 10:59

我觉得小米Civi 1S的黑屏问题很困扰我,于是我就不断搜索到底这个是一个什么情况,希望有人跟我一样,也有类似的问题,而他们又有了现成的解决办法。

用了超过10年的小米,为什么之前就没有这种问题呢?

但我去搜索黑屏的小米手机之后,发现很多小米13Ultra出来的人有这个烦恼。当他们晚上插着充电器直到第2天,会发现黑屏开不了机,只能重启。他们这个问题的复发率非常高,很多人都遇到了,大概是在2月10日以后出现的。他们都更新到了同一个版本,HyperOS 2.0,刚好是100的那个版本。不知道那个是不是小米13Ultra从1.0升到2.0的第1个版本。看到小米13Ultra的人在小米社区哀嚎一片,却没有官方的人站出来说些什么。唯一一个帖子里面我看到了有人说把充电从智能充变成普通就没有问题了。智能跟普通有什么区别呢?我感觉是如果检测到你长期充电,智能充电充到某个程度就可能不冲了,或者使用小电流充电。但为什么这个理论上这么智能的功能反而会导致问题呢?发帖的那个人说他是把充电改成普通的方法让自己的手机不会黑屏,但是他没有说这个不会黑屏能持续多长时间,是一直都不会,还是说只是一段时间可以。可以肯定的是,小米13Ultra的人经历过黑屏,而且他们经历的黑屏感受跟我有点类似,虽然我不会把充电器插一整个晚上。有时候睡午觉可能连续插了好几个小时,但这是极少数的,通常充到100%再加个15到30分钟我就拔掉了。在我有意识的情况之下,我的充电时间不会超过一个小时,而且周一我发生黑屏的时候,前一天晚上,我没有通宵充电。我从来没有把手机放在枕头边充电的习惯。周日我从家回到单位,理论上我应该是下午充电的,这样才能保证我回单位的路上不会有电量焦虑,但万一下午我没有充电,那么有可能周日晚上睡觉之前我用18W的慢充充电了一段时间。但到底周日晚上我有没有充电呢?我已经不记得了。

小米13Ultra出来的这个问题很明确,但小米14和小米15的黑屏问题就很无厘头,他们任何时候都有可能黑屏关机,尤其是小米15。长按电源键还开不了机,你必须插上充电头或者充电宝,插上以后它又自动开机了,这个很诡异。理论如果你的机子是处于关机状态的,插上电源,屏幕点亮很正常,但屏幕点亮跟开机是两回事。小米15是非常新的机子,为什么会出现这种问题呢?小米14上线的时候,曾经出过一个更新之后屏幕会被锁定,什么都用不了,只能看到,但是却用不到的问题。为什么小米头牌的数字系列在新机推出的时候会有这种让人哭笑不得的问题呢?让我觉得很搞不懂的是,为什么小米15黑屏了以后,不插上充电头,还开不了机呢?出现这种问题以后官方好像至今都没有个说法。突然黑屏要重启,我感觉硬件软件的问题都可能有,但是新机买回来,才用了几天,电池应该不会那么快就有问题吧,如果不是电池的问题,那就有可能是CPU虚焊。这个虚焊问题,造成了一部分的机子出现同样的毛病,这个回收起来就不是一笔小数目了。一般的小米之家,一般的检测方法,怎么可能检测得到是某个元件虚焊呢?所以可能他们宁愿不承认这个问题,因为你的黑屏,没办法随时再现。

看到了那么多人跟我一起黑屏的时候,我觉得黑屏这个问题我又可以接受了,这仿佛是一个小米手机的印记,我买到的是正版。

惠普1020出状况

2025年2月20日 08:34

不知道为什么,糟糕的事情总是接连不断。

周二的晚上跟往常一样,我要打印记账凭证,结果发现,一直用得好好的惠普LaserJet 1020 plus突然罢工,发生错误无法打印。看明细好像是因为USB无法识别。USB无法识别,下午的时候我就曾经看过弹窗,但我没理会,因为当时我正在把MP3插在电脑上充电,非常有可能突然间那个USB拓展口傻掉了,然后又不知道为什么识别不出那个MP3。反正能充电就行,能不能识别那个装置不用没关系。在电脑出现那个弹窗的时候,我就没有理会因为当时我的键盘鼠标都是正常的。MP3充电的显示也是正常的,无论如何我都不会想到,那是因为打印机。

打印机折腾的一番,没发现到底是什么问题,反正不时显示出来的状况就是某一个USB设备无法识别。折腾来折腾去都不行,我甚至换了一根USB线,也依然是那个效果,所以我把1020卸载了,然后重新安装。我是想着重新安装的,但关键是,当我插上USB线以后,还是那个问题无法识别。为什么一直非常稳定的1020突然出了这个问题呢?换了一个USB线也一样就意味着不是线材的问题,不是插口的问题,因为电脑主机的插口我已经换了好几个了。电脑已经重启过,但是打印机我没有把电关掉重启。所以那个时候我把打印机电关掉,然后重启,之后1020自动安装上去了。那个时候我也已经在惠普的官网下载了1020的全套安装包,我不知道那个全套里有什么玩意。反正在我印象之中,1020不需要安装包,win10是可以自动识别安装的。

打印机装上去了,接下来就是直接打印。我没有考虑那么多,像平常那样我就开动了,结果发现打印出来的东西不对劲,打印出来的那张纸是A4大小,但实际上我打印的那个记账凭证应该是增值税发票大小的纸,那个纸,我之前已经在系统的打印机属性设置里面设置过,为什么1020就识别不出来呢?

按照往常的方法,我又把那个自定义的纸张大小设置了一圈,结果无论如何在Excel界面看到的1020可选纸张大小依然没有。为什么居然会这样呢?之前从来没有遇到过这个问题。为什么我说从来没有遇到过,因为我也帮其他人设置过好多遍,每一次都是打印机装上去了,然后系统的那个打印设置设置好了,打印机就自动能选择系统已经设置好的自定义纸张,这一次不行。于是我又把电脑重启了,通常重启就能解决90%的问题,但这一次这个问题依然存在。为什么Epson针式打印机就能自动识别出我系统里自定义添加的两个纸张大小,但是惠普的这个1020却不行呢?在我印象之中以前是没有问题的。最终无可奈何之下,我只能在1020的打印机首选项里手动添加我自定义的纸张大小。经过一番折腾以后,我终于在我期待的纸张上打印出我想要的内容。平时这就只是一个秒杀的操作,闭眼就能完成,这一次耗费了我接近一个小时,而且遇到的事情都是很奇葩的,颠覆我之前认知的,为什么会这样呢?

唯一能解释的就是,下午我擦桌子的时候,我把打印机抱起来了。然后不知道为什么触碰到了一些东西,所以打印机就有点失常了。但是擦桌子的时候把打印机抱起来,这个操作经常发生,为什么平时就没有这个问题呢?打印机打印不了,通常我觉得是不是windows进行了某个更新,驱动不太合适的原因。经过一番USB线拔插以后,问题依旧。为什么我就没想到那个时候要重启一下打印机呢?大概因为我太信任这个1020了,可以这么说,除了不能自动双面打印以外,1020是一款非常经典非常耐用非常抗折腾的打印机,万万没想到居然会出这个乱子。

人的运气衰起来的时候,什么事情都会发生。

blog搬家

2024年11月28日 08:13

11月末有好几件事让人焦虑。除了单位的工作以外,还有我自己的blog。因为我们合租的服务器到期了,11月28日到期。据说我们已经连续在那个服务器供应商那里好多年,我感觉有10年以上。那这一次我们觉得真的要离开了,因为那个供应商在我们提交了工单以后,半天都不回复,其次就服务器的性能来说,其实那家不算太好,虽然访问速度我个人觉得在广东电信之下还是可以的。服务器也比较稳定,试过宕机,但是几率不高。一直以来我都觉得在WordPress的后台没法用,自带的导出功理论能把全站的内容导出,我们可能是那个空间的设定的问题,每次当我下载不到2MB的时候就会停掉,结果打开那个xml文件实际上是不完整的,所以我根本没办法做全站的导出,我只能手动地分段导出文章,但那样的话,我就会丢失其它所有内容。

今年3月开始,包租公就告诉我要备份了。因为他忘记了服务器的密码。所以经典的那个WordPress搬家方式不可行,我得用其它方式把WordPress的东西全部备份出来,那个时候我觉得这根本是不可能完成的任务,但后来的确有牛逼的插件能做这个。一开始包租公告诉我,是10月到期,于是10月的时候我就找他,10月底的时候我继续找他,然后他告诉我11月到期,我不确定11月什么时候到期,有一天突然服务器宕机了,我以为是我们到期了,虽然前一天我已经做好备份,但是突然打不开,让人忐忑,结果被告知,我们还没到期,我们到期的日期是11月28日,所以11月25日的时候,我又找包租公。他居然把那个给忘记了,但是他很快就买了新的空间,然后开始往里面装东西。我们的速度很快,在11月26日我们就已经完成了搬家,虽然有一些奇怪的东西还是好像没有完全解决,但总的来说,基本上所有东西,能一次性挪走的都已经挪走了,至于哪些东西出了问题,我还没办法逐一检查出来,检查不出来的只能发现一个解决一个。其中一个比较明显的问题是有些页面有140多条评论,但实际上前台只显示了两条,当我在后台查询的时候,我的确能看到140多条,所以为什么会出现这种情况呢?其它文章评论看上去是正常的,我没有仔细的数过,但起码你能看到评论有很多,至于是不是显示多少条的那个数量,我没有仔细研究过,但为什么一些页面的评论展示数量是正常的,而另外一些却不行呢?这件事情很诡异。我记得当我用插件完成搬家的时候,除了完成按钮以外还有两个链接一个是永久链接的设置,另外一个是评论插件。在我印象之中,我没有使用任何评论插件。永久链接在那个,搬家插件之前那个版本,永久链接会神经病,得手动重选,但在这个新的插件里搬家完毕后,好像永久链接依然会以我自定义的形式显示,没有出现问题,但我还是按照以前的步骤走了一遍。

搬家的时候,我用的是IP地址,但搬家完毕以后,我把IP地址绑定到了我的域名,后来我又发现媒体文件那里当我从某个前台地址打开图片,图片显示的不是域名地址,显示的是IP地址。这算是一个很傻瓜的问题,肯定可以通过一波替换全部处理掉。域名也好,IP地址也好,实际上都能指向那个图片,万一我换了一个网址呢?那个图片就会变成失效。这种东西可以通过在后台数据库做替换简单解决,但这也是搬家过程之中经常会发生的事情。哪怕不是搬家,是从http变成https也会有这种毛病,所以为什么我就没有一种快捷的方式替换掉所有这些东西呢?

但总算搬家这个事情解决了,而且好长一段时间,我都不需要在这个问题上操心。

手贱惹的祸

2024年9月24日 08:45

VBA可以对普通的Excel文件用SQL查询,虽然我已经用的是超级表,理论上单元格的数据格式是一致的,但实际上这不是一个标准化的数据库,我没有办法在一开始的时候就对每个数据进行声明,所以在数据处理过程中就会出现这样那样说不准为什么的事情。

星期一的下午我跟往常一样做了些普通操作,最后当我用VBA生成一个汇总数据的时候发现弹出一个“标准表达式中数据类型不匹配”的警告。看到这个东西,我的第一反应是肯定是获取的数据里面有一些不规范的东西,比如说某一列通常是数字的,但是却出现了文字,但实际上我翻查了全部源数据都没有发现这个玩意。没办法之下,我只能做一个脚手架,一个一个的去排除,最后发现问题出在where里。where里有一个“性质某某某”的限定条件,问题就出现在那个地方,只要把这一句删掉,VBA是可以正常运行的,至于结果对不对不知道,反正能运行,然后我又回到了这一条的上一条结果,发现where里面的那个条件是没有问题的,所以这到底是什么问题呢?

然后我又想起,在进行普通操作的时候,我好像在某列数值的单元格里发现了一个汉字,说不准为什么那里会有一个汉字,但一个汉字足以影响那个单元格的类型。为什么我深有这种体会,因为如果某一列全部都是数字那么 VBA+ADO+SQL通常都会默认那是一个数值,但只要那一列里面有一个文字,所有东西都会被识别为文本。对数字进行聚合是理所当然没有问题的,但如果对文本进行这种操作,我不敢想象会出现什么东西。当然了,把文本作为分组条件,一点问题都不会有。

我感觉自己的VBA程序是健壮的,因为我已经用了他一年多了,之前从来没有出现过这种问题。有段时间经常会出现这样那样说不准什么问题的问题,但是过了一段时间之后,那些问题又自动消失了,所以我更相信那是有段时间windows更新导致某些框架不稳定导致了那段时间的意外。除非我对源数据做了更改,又或者是出现了某些意外,否则不会报这样的错误。

接着我又记起周一下午某个基本操作的时候,我好像发现在那个超级表的下面有一个“她”字。那个东西在不连续的单元格里,不是超级表的一部分,但关键是如果我用SQL获取数据,那肯定也会被纳入其中。看到那个莫名其妙的“她”字以后我已经把那删掉了,所以我看到的那个原始数据表格没有问题,但只是看上去没有问题。

折腾了好长时间未果,之后,我不得不重新翻出前一天晚上的源数据。然后手动把周一更新过的东西全部都贴回去。再去用VBA汇总,一切正常。在贴回去之前我首先用VBA测试了一下汇总没有问题,然后我才开始贴,贴了之后也没有问题。如果这个东西没有问题,也就是周一之前这个表格是没有问题的,但不知道周一进行了什么操作,导致了问题的出现。倒退以后重新贴数据没有问题,的确这个汇总也算保住了,但是我却一直放心不下,找不出问题的原因下一次依然会手忙脚乱。

吃过晚饭后我重新翻出有有问题的那个源数据。我的猜测是,因为数值列里面出现了一个文本,虽然我已经把文本删掉了,但是那个文本已经影响了那列单元格的类型,最终导致VBA弹出错误提示,虽然那个错误提示并不是出现在VBA调试发现的那一列。我的做法是在不修改VBA的前提下,把有问题源数据超级表下面的所有行全部删除,然后保存,再次运行vba,源数据通过了,可以正常运行。通过这样的操作,就能排除错误,非常有可能意味着我上面的猜测是对的。然后,我故意在数据列超级表外的单元格写一个字,然后保存,VBA汇总挂了。我把那个字删除,保存,VBA依然挂。但是当我把写过字的那一行删除,VBA汇总好了。这再一次验证了我的猜想。

这种事情该如何避免呢?首先不要手误,不要乱填。手误乱填这种事过去那么多年都从来没有发生过,为什么就发生了呢?到底是我的问题,还是另外一个人的问题?如果要避免这个事情,最好我在SQL引用源数据的时候就直接就限定为超级表范围,而不要把超级表所在的所有列都含进去。无论是哪一点,都是可以实现的。限定超级表的范围不太难,但关键是人手贱的这个行为,这一次出现在某个不知道为什么的单元格,下一次如果覆盖掉超级表的一个老数据呢?要避免这种人的失误非常难,但是人为什么会犯这种弱智到极点的失误呢?而且是犯了还毫不知情。

但总算这一次,我找出了可能的原因。

升级VBA抓取方案

2024年9月14日 19:26

无论是SQL方案还是数据透视表方案,我都是用4个类似的脚本,一款做出来了以后,调整部分的内容,生成其它三款,所以一开始的时候抓取数据我有4个宏,其实里面的内容大多相同。汇总数据,我也有4个宏,SQL有4个,数据透视表也有4个。因为SQL跟数据透视表作用是相同的,所以它们分别搭配4个抓取数据的宏各自组成两个文件。就实现功能来说,这两个文件从形成的那一刻起,已经可以起作用,但是我能不能更进一步呢?

数据抓取用的是最基本的VBA,就只是把数据区域选了一下,然后去掉表头,最后搭配我想要的表头输出。我没有在那个地方就进行筛选,因为之前已经说过,VBA自带的AutoFilter功能不太好用。一开始我没想过要用数据透视表,如果到了SQL,一句where可以把正向的反向的或的且的,想怎么加就怎么加,只是一句话的事情而已。既然在一开始数据抓取单元格层面那么难做筛选,那么我到SQL里做筛选就可以了。后来,因为我又做了数据透视表方案,数据透视表方案可以对字段进行筛选,但关键是如果我抓取了那个数据里面不含有我要排除的内容,又或者我抓取的数据全部字段都要被排除掉,无论是哪一款,都会出错,所以如果用同样的抓取方式,到了数据透视表的那个宏里面,我就需要进行复杂的循环和判断。嵌套一层又一层的公式,再加一层又一层的判断。虽然也能实现我想要的东西,但那样做很麻烦。在做出数据透视表方案的那天晚上,我就在想,在一开始的抓取的宏里面,我能不能直接把筛选这个步骤给做了呢?

要在数组里面进行数据筛选,想想都知道肯定可以实现,但是我想到需要嵌套那些数字就觉得很烦,所以我就翻出了多年以前我用来合并某些数据表的宏。在那里我发现自己用的是把全部数据都粘贴到一起,然后做一个行的删除。当时做的行删除很简单,只要匹配一个字段就行了,我现在的行删除,需要匹配的字段可能会有很多,所以我就把那些需要删除的字段都先放在一个数组里面,然后再利用之前那一天从网上抄回来的那招Application.match方案。在一句if里面就能实现查找某个元素在不在某个数组里,如果在的话就把行删掉。之前写的那个宏的确就这么简单,因为需要删掉的那个部分隔好多行才会出现一次。现在我需要处理的那些数据,说不准我需要删掉的那些行是隔一些才出现,还是下一个就又得删掉,所以在删掉之后,我又赶紧做了一个减法操作,让程序重新测试那一行到底需不需要删除。

在一开始数据抓取阶段,我就把数据范围确定了,把需要例外的数据全部删除,所以后面的SQL跟数据透视表我就可以轻松地直接进行操作,尤其是数据透视表,操作变得简单明了。

因为一开始我不是大神,我只能摸着石头过河,逐渐的磨练自己。

VBA里搞数据透视表

2024年9月13日 08:17

因为我知道我要实现的那个功能,SQL可以做,数据透视表也可以做。就写代码的熟练程度来说,SQL我肯定更熟悉,VBA的数据透视表有很多参数,我搞不懂到底是什么,反正要实现那个功能,通常是录制一个宏,然后看着办,有需要的数据保留下来,不需要的数据直接删掉。录制的宏通常都很啰嗦,里面有非常多没有必要存在的东西。在不了解数据透视表在VBA里的参数的前提下,先进行一个录制显然是比较靠谱的步骤。但有些东西靠录制是录制不出来的,比如某些字段我需要进行筛选,我只知道有些东西是不能出现的,但我没办法确定可以出现的是什么,所以那一堆不能出现的东西都是反参数。在录制宏的时候,你只能看到什么就反选什么,但关键是这个数据源跟那个数据源的那些参数是不一样的。不一样我只能设定一堆反参数,只要它们是其中一个,就不能显示,但实际上这样的反参数让VBA的数据透视默认不出现你就得兜一个大圈,套上好几层公式实现。最终,在我调试的时候发现的确那些嵌套的公式能把那些反参数都排除在外,但如果数据源里所有数据都是反参数的一部分,那么就会报错,于是我又得在外面加一层捕捉错误的判断。真的是非常折腾。为什么之前我考虑的是SQL而不是数据透视表,反参数是其中一个点,另外一个点是排序。在SQL里,使用自定义序列排序是非常简单的事情,但是数据透视表的字段该如何排序呢?兜了一大圈我发现也就只能真的在Excel里面增加自定义序列,但如果我想用即弃呢,于是还得出了一招VBA先增加自定义序列,排序完以后再把自定义序列删除掉。这个操作在ExcelHome的教程里有,他们教的是在VBA里面,对单元格或者数组排序,不是针对数据透视表的,但实际上原理一样。

这个增自定义序列和减自定义序列到底是怎么确认呢?原来Excel还会对自定义序列给一个序号,所以在增自定义序列的时候,你就得把这个序号记下来,在减的时候把那个序号写上去。我不知道为什么其他人说数据透视表的自定义序列好像怎么排都不是自己想要的效果,但就我个人的经验来说,只要你在Excel里增加了自定义序列,当你刷新数据,默认对某个已经自定义过的字段进行升序,那就是你定义的那个顺序,不需要在设置里面搞一大通。但实际上我也搞不懂,手动设置里很麻烦的东西到底是什么。为什么数据透视表里面的排序就不能像普通表格排序那样那么的直观。我要以什么字段排序、以什么标准排序是系统默认的还是自定义序列。当然,数据透视表里还得考虑一个问题,就是有可能是套叠了多个汇总条件的,如果你自定义的是最后一层条件,首先限制你的是前面的那些所有条件,所以你想最后的那个自定义序列完全按照你的想法排列,你只能把它放到最前面。数据透视表跟SQL比起来,我感觉运行速度会慢一点,可能因为我里面判断设置的东西比较多,所以需要闪那么一下才能结束,但是SQL虽然我已经有意识地关注结尾这个问题,但测试频繁以后,SQL是会出现一些莫名其妙的事故,当你把所有东西关掉再打开就正常了。相比之下,数据透视表不会这么神经。

用不同的方法实现同样的事情,得出一样的结果,这种感觉很好。在探索这个的过程中,会让我体会到二者的优劣,以后选择的时候,我就可以更有底气地数出1234。

不完整的错

2024年9月12日 08:09

上一篇说到了数据汇总的问题。这个周一我就是按照上周五设定的那个步骤去做。在做的过程中,几乎没有发现什么问题,但是当我做完所有,一个个表格验证的时候却发现不知道为什么有些表格 SQL抓取的数据不完整,VBA从原始表格筛选、抓取的数据没有问题,但关键是SQL从本地的文件里提取到的那些数据不完成。第一次发现这个问题的时候,我看到的是为什么汇总数不一致。当我把SQL回退到第1步的时候发现第1步获取的数据就已经不完整。明明有50行数据,实际上只能提取到42行,重复多次依然是那个效果,但是偶然当我把文件关掉重开以后又好了。所以这个有时发生,有时不发生,到底是什么情况呢?当我打开VBA文件,一个一个测试的时候,发现前几个还好,后面就会出状况,可能是数据不完整,也可能是弹出一些莫名其妙的错误,但只要你把所有Excel都关掉,再重新打开又没有问题了,但是在测试几个以后,又会出现这样这样那样的状况。用VBA+ADO+SQL整理输出数据我已经实施过很多遍,之前从来没有遇到过这种神奇的状况。最后当我打开VBA脚本,无意之间拉到最后,居然发现cnn没有close,也没有初始化。cnn是个非常牛逼的东西,但是那个玩意也要耗费巨大的资源,在我出现数据状况的时候,我没有观察过我电脑的性能到底如何了,会不会CPU或者内存甚至二者都有点状况了。因为一次又一次的验证数据就意味着我得一次又一次调用cnn,光是打开又不关闭,最后就会出现奇奇怪怪的事情。当我把所有脚本都加上了结尾以后。从头到尾10个表以上的数据,一次性搞完,期间不会出现状况,所以多么神经质的行为才会导致了这种弱智事情呢?以前我倒真的从未试过这样。有过这样的经历以后就让我明白到cnn打开和关闭都必须是一个闭环,在一个宏里就得实现到位。如果某个宏被卡住了,半路停在那里,估计那个cnn是不正常的,当我又再次启动其它,只会让错误不断积累,最终导致崩溃,又或者是得不到我想要的东西。

写程序可以很快,但是调试却非常耗时间。这大概是所有码农都必须面对的事情,但实际上更多的人只顾写,只顾实现,而不考虑全盘,不尽可能地用全面数据测试,最终的结果就是使用的时候出现各种各样的未知情况。我不知道其他人到底是如何调试的,反正我真觉得调试的过程比写脚本更费神,因为要考虑所有的情况,哪怕某些条件可能非常极端,几乎不会碰到,但即便那样,一个健壮的程序应该依然能捕捉到那个错误,然后给出对应的反馈。比如我抓取不到数据了,我就应该弹框告诉人家我抓不到,因为有些操作的抓取数据以后才能进行,所以既然能判断抓不到数据,后面的也就不用继续了。

调试程序是一个很磨人的过程,这个过程重复多了,人自然而然就会向完美靠拢,即便我们一定不能成为完美的那个。

VBA里奇怪的筛选与粘贴

2024年9月11日 09:05

上周五我尝试纯粹用VBA的方式对某些数据先进行筛选,然后保留在粘贴板,又或者是把那些东西输出。前提是对某些数据进行筛选复制的时候,我首先必须得有个条件。理想很完美,现实很骨感。

VBA本身就自带一个叫做autofilter的函数,那个东西可以对选定的单元格区域进行筛选,你可以正向选择,正向的时候可以多选,可以把需要选择的内容组成一个数组,实现多选。你也可以进行反选,但反选的时候你却不能把反选的条件建立成一个数组进行同样的操作。这些都只是针对一次筛选而言的,如果同一片区域多次叠加筛选,第一次你筛选的是第1列,第二次筛选的是第2列,我感觉如果第三次和第四次你反选的是第2列估计也行,但关键是我需要选择的那个数据是一个作死的不规范有两行甚至三行的标题栏,但是autofilter这个函数默认输出的东西就含有标题栏。本来我的数据范围是不规范的,如果我一开始就把前面三个标题栏给去掉。那么在我进行autofilter的时候,就会从纯粹的数据开始,显然那就不是我想要的东西了。因为哪怕最终筛选的数据是空,也会默认带入那个标题栏。所以你就搞不懂为什么步骤都对,但结果就不对。

autofilter之后要进行一个特殊粘贴,那个东西是只对可见的数据复制。就普通人的思维而言,我复制了可见的数据,那么理论上我就可以算出它有多少行,如果是0我就直接不输出了,如果大于0,那么我就可以输出,但实际上特殊粘贴又不可以用一般的技术判定到底筛选的结果是不是0。虽然也能判断有没有,但需要绕一个圈去实现这种功能,所以VBA为什么有那么神奇的思路呢?筛选可以进行,但是你不能对反向的数据批量进行处理,你也不能把特殊筛选结果直接保存为某个东西。当你觉得你大概可以把可见的部分保存到一个新的区域,然后你就可以去头去尾之类,但实际上当你再去查看那个新区域的时候发现原来是保存了个寂寞而已,那种神经性质跟那个可见区域是一样的。我不知道以前的人到底是怎么忍耐VBA这些奇怪脾性的,因为在接触这个之前我就已经接触过pandas。pandas的数据分为两个,一个是标题,另外一个是数据。输出的时候你可以都输出,你也只可以只输出其中的一部分。在使用pandas的时候,我没有解决过一些我的实际问题,我都是按照书本上的例子进行操作的,所以到底在我使用的过程中会不会也遇到一些像VBA这么神经,明明觉得可以,但实际上又不可能直接实现的事情不知道。

周五的下午,折腾了一番以后,我的目标数据最终可以复制到粘贴板,但是在VBA那个脚本结束之前,我就也得把那粘贴出来,否则当那个结束以后,剪贴板的内容就没有了。为什么会这样呢?不是说当我把数据复制到了剪贴板,而我又把Excel关掉,软件会问我要不要清空剪贴板的数据吗?但显然现在Excel都没关闭,我只是关闭了那个脚本,但我剪贴板却什么也没有了。

周五在回家的路上,我又努力地想了想这个问题。最后决定,我没有必要这么折腾自己获取剪贴板数据。反正全体数据不多,我直接对那个整体数据进行加工处理就行。加工处理的方法是首先从我的目标数据那里通过VBA获取我要的部分,然后输出到指定的位置,接着通过ADO+SQL进行数据处理。准确的来说,就是一个分组聚合、添加汇总以及排序。当然其实最后这个ADO+SQL的操作我也可以换成数据透视表,但如果那样的话,最后的排序我要让那完美的按照我想要的方式,我就只能先在Excel添加一个自定义的序列。无论是SQL还是数据透视表,分类汇总和排序都一定会比在VBA里用数组方便非常多。

思考一个问题的时候,有时可能我们有点过于钻牛角尖了,退一步,可能会有一个更清晰的思路。

WP搬家策略

2024年8月30日 19:44

现在WordPress服务器供应商的服务期限大概到今年10月就满了,所以在那之前,团长是应该带着我搬家的,今年早些时候我们已经讨论过这个问题,因为他已经忘记了账号密码,所以常规的搬家步骤不没办法实现,因为根本进不了后台,导出不了数据库,同时也不能把我挂在上面的网站拷贝出来。今年4月的时候,我已经折腾了一番,用的是一个WP的插件(All-in-One WP Migration),那个东西可以在WP后台的界面把网站所有数据全部导出。导出的那些数据被压缩成一个文件。那个文件通过他们网站上面的某些工具,可以在线浏览里面的内容,也可以下载工具安装之后把它解压出来。但即便都解压了出来,那个东西的结构跟WP网站本身还是有一定区别,所以我猜他们没想过用户会把数据导出来以后,通过手工搬家的方式,把数据库挪到其他地方。比如在新的服务器那里,首先进行一个数据库的导入,然后把网站解压的内容复制到新的服务器。为什么这么说呢?因为上面说过,文件加压后的结构跟WP网站本身是有点区别的,但我并没有研究过差异在哪里。有区别就意味着直接搬过去肯定会遭殃。所有人都知道服务器上传文件的大小是有限制的,有可能服务商对你进行了限制,也有可能是软件进行了限制。所以这个插件还卖了一个功能,他们可以把超大的压缩文件上传到你的网站上。你完全不需要考虑文件超限,做不了任何事情。这么高端的操作是付费服务。如果人人都可以轻易地自己挪动,这个付费也就毫无意义,他们也就无法靠这个东西生存下去了。如果网站的数据超限了,但又不想给钱,他们还是给出了一些调整的方案,但这些步骤对小白来说有点复杂,但是对我这种不怕折腾,只要能免费的人来说,完全是可行的。主要步骤分为两个,第一个是在我WP的文件里插入某些语句,但即便这样插入了,也不能保证上传一定不超限。因为还有服务商那边的门槛,所以必要的时候还是要跟服务商沟通一下。在测试搬家这个问题上,我用过两个方式,一个是纯粹的导出导入,第二个是在导入形成网站之后,再导出那个网站的数据库文件,接着把那个网站的网页文件复制到一个新的地方,然后把数据库文件另存为一个新的数据库文件并修改网址,最后把新的网页文件指向新的数据库。之所以做这么无聊的测试,是因为万一服务器那边无论我怎么修改,就是不让我直接导入大文件,我还可以通过这种方式搬家。我20年数据的整个文件不到600MB,而数据库文件只有70多MB。不让600多MB的文件上传,我觉得这是有点可以理解的,但是70多MB的数据库文件,我感觉还是可以成功导入的。如果能实现,我很折腾的第二个方案就意味着我可以把网站从线上搬到线下,然后进行一个普通搬家的流程。之前说过,之所以得这么折腾,是我没办法直接访问现在那个网站的后台,折腾一番以后,实际上我就是把网站线上的后台搬到了线下。

这两年来写了很多的VBA+ADO+SQL,所以我在 phpmyadmin里看到数据库和SQL的时候,我感到了默默的亲切。当我在那里测试SQL语句的时候,发现那个速度实在太感人了。70多MB的SQL文件用Notepad++打开,大概13万行。我要更新里面的某些东西,那是眨眼就能完成的事,跟用Excel处理的速度相比,专业的数据库真的太伟大了。

星期三就已经找过团长,但到星期四下班的时候,他还没回复我。通常情况下不会这么长时间都没反应的,大概他出差了吧…

office系的SQL为啥不能文本拼接?!

2024年8月24日 08:48

花了几乎一天的时间去研究什么把Access VBA里的自定义函数移植到Excel的VBA里面。大家都是VBA,大家都是 office家庭的,听上去好像没什么难度,但实际上前人已经碰壁阵亡,确定这是不可能的,我只是在做垂死的挣扎。经过这么多年office的发展,在数据格结构上,会不会只有那么一点改进呢?毕竟即便是在Excel里,如果我用的是VBA+ADO+SQL,实际上我是把数据以数据库形态进行SQL的加工。于是我就想,万一他们的数据格式是一样的,万一Excel已经进化了那么一点点呢。但现实告诉我,虽然都是VBA,虽然都是自定义函数,但是因为他们操作的是SQL,所以出来的效果完全不一样。

SQL的语法结构非常类似,无论你用的是什么类型的数据库,但在一些细节上,大家的处理是有区别的,我觉得Excel里面和Access里SQL最大区别在于因为我在Excel里面SQL用的是ADO的方式,所以这就意味着虽然我写的是SQL的语法,但实际上那是以字符串的名义存在的东西。在Excel VBA的数据格式里,我写的结构化语言全部都是字符串,但是在Access里,在SQL的查询界面里,那个东西不是字符串。我没有认真看某些单词有没有高亮,因为那是特殊字段又或者是保留字段。当我直接把Access VBA里的那个自定义模块挪到Excel VBA里,发现打开记录集的方式根本不一样,语法不一样。因为在Access里本来就是一个数据库,但在Excel VBA的ADO里是通过一些特殊的语句打开那个记录集的。

回到一开始,为什么我得这么折腾呢?因为一直以来我都发现,从来没有一个人能在Excel VBA+ADO+SQL的模式之下在分组聚合的时候把文本以某些字符去重连接成字符串。要实现这个功能,只能最后把结果输出,然后在VBA里通过字典的处理,再把那些合并好的东西与其它东西结合在一起形成一个新的数组,最后往单元格里面输出,而不能像其它SQL查询结果那样直接就在单元格里全部输出。先输出到字典,然后再用字典合数组合并的难易程度跟那个数据最终的查询结果复杂程度有关。在高端的数据库里,文本聚合连接有直接的函数可以做到,比如在MySQL里面直接group_concat就可以做到,在其它专业数据库里,那个函数的名字各有不同,但都能实现同一个效果,就是把字符聚合拼接。在Power Query里,他们没办法在窗口界面让你实现这个,但可以在高级编辑器里面通过text.combine的方式实现这种功能。在Power Pivot里,concatenatex也能实现这种文本的拼接。让人觉得非常无语的是,都到了Microsoft 365时代,Access这个东西依然是office大家族的一部分,但这种肯定有需求的东西居然没有一个官方函数实现,但你又可以通过在模块里用自定义函数的方式达成。Excel的VBA里不能秒生成这种东西,但在函数层面textjoin+unique+filter可以。为什么就不能在Excel VBA支持的SQL里面出现这个文本拼接的官方函数呢?如果他们真觉得没有必要的话,为什么Power Bi的软件就可以实现呢?我不知道Power Bi软件是一开始就能实现,还是后面慢慢进化出来实现的,反正我第1次看到Power Bi相关软件的时候,他们已经能实现了。

一整天的挣扎下来好像没什么进展,但我在这些问题上又仔细思考了一番。

我还是比较喜欢VBA+ADO+SQL

2024年8月23日 08:39

我觉得编程会让人上瘾,尤其是当你实现了自己的目标以后,你就会有很多想法,比如之前我已经做过,而且已经实现了东西,能不能更进一步,再改进一些,让程序跑得更快一点?一开始的时候,只要能实现某个功能就可以了,无论用的是什么方法。在这个初级阶段,我是不会考虑别人到底行不行的,反正我行就可以,但是当自己包里面的工具越来越多以后。到底要选择什么工具,也会变成我一个纠结的地方,虽然有些工具已经很成熟了,肯定能实现我的效果,但是我还会想有没有更快捷的方式呢?

我已经不记得我是什么时候开始认识Power Query了,大概是在office2016的时候吧。那个时候我觉得那个东西可以做文本拼接太厉害了,而且厉害之处就像是跟数据透视表一样,当你的原数据发生了变动,刷新一下结果就出来了,但实际上那只是教程的效果,你完全按照教程这么干,的确能出结果。还记得几年前当我要算某些库存的时候,我用了一些很笨的方法。为了要实现区间日期里面的累计库存我用了一些非常耗费电脑的步骤。本来数据的量就不小,又外加要实现这样的效果,所以真的得算上很长时间才终于得到结果。那个很长时间意味着可能要等5分钟以上,在等待的过程中,我都怀疑自己的电脑是不是死机了。后来我也有算累计库存,但大概我已经不用一开始的那些方法了。我也有试过在VBA里计算累计库存。如果是在其它软件下的SQL里,计算累计数可以有很直接的方法,因为他们有现成的函数可以套用,但是在VBA里面的SQL,貌似至今为止,我尝试成功的也就只能硬着头皮做一个笛卡尔积。如果数据量比较大,那将是一个噩梦。噩梦归噩梦,数据还是能算出来的,如果我只是算一个月的库存,顶多就是几秒钟的事,通常情况下如果业务量不大,一秒就差不多了,但是如果要算一年的数据,那就要跑上几十秒。在VBA层面需要跑几十秒,而如果在PQ里我简直不敢想象得多久。

试过VBA,试过PQ,在PQ里我知道我要什么,它的透视和逆透视功能让我省掉很多麻烦,但这两个便捷功能也会默认带出一些意想不到的反效果,比如默认透视的是来源去向,万一筛选区间只有入没有出,但后续处理又默认有出入,这就会卡住。Excel 的SQL里,透视就是最后一步,所以如果中途要实现这种功能只能通过添加条件字段,手动添加字段的好处是不会有PQ透视法的那种透视不出来后面没法干。就可控程度来说,VBA更容易,能把多个操作在一步里秒杀实现,比如修改某个字段的数据和增加某个字段,我就可以把它们在一步里实现,外加同时搞个什么排序。这些步骤在PQ里面,如果不是高级玩家用嵌套的方式,也就只能一步一步慢慢来。我不知道,PQ里面嵌套一步到位跟一步一步慢慢来到底效率差了多少。估计这会有运行时间的差别,但到底差别了多少,这个我没有研究过,因为我还没到的那种可以混搭在一起,一步到位的水平。处理同样的数据,使用类似的步骤,PQ就是比VBA要慢,我也不知道到底慢在哪里,为什么会那么慢?其实数据量不大,但关键是PQ载入的时候很容易出错,但那个出错到底是什么,没人说得清,因为上一次刷新不行,下一次刷新可能又可以了。在VBA里,除了去年年末的某段时间,我经常出现这样那样的奇怪现象,其它时候基本上行就行,不行就是不行。不会出现同一个数据,同一个宏,前一次可以,后一次不行。在PQ里可能得转上半分钟以上的事情,在VBA里非常有可能0.5秒以内就解决了。以前做字幕的时候,我就知道人的反应时间通常是0.3秒,如果一个VBA脚本只需0.3秒就能结束战斗,对普通人来说,那就是眨眼的事而已。

以前我没想过要这么干,以前想着怎么方便怎么来,但是当VBA有点上瘾了以后,我逐渐的把之前用PQ处理的东西全部都用VBA的方式再整了一遍。出来的效果非常好,干净利落快如闪电。让我觉得舒服的是VBE界面是被我调整过的,调整过VBE的布局和颜色,但是在PQ里,那个小得要死的高级编辑器字体实在让我看得很不舒服,但通常某些高端的功能只能在那里敲代码,所以这就很痛苦。

不把某些事完成,心里总会一直念惦记着,把这些事情都干完了,我就可以好好睡觉。

进一步优化和debug

2024年8月22日 08:17

又花了整整一天的时间去改进之前的两个转换程序,一个是用PQ写的,另外一个是用VBA写的。之前以现有的数据进行测试,没有发现问题,但实际上今天再去纠结,还是有个问题,就是当业务类别为轮换,出库的时候损耗的计算方式。损耗应该放在商品粮的账本,这个没有问题,之前也是这么处理的,但是商品粮的账本还有一个。储备粮油转入,这个东西就应该包含损耗和销售两方面的数据。之前只包含了销售的数据,忽略了损耗的那一部分。同样,在储备粮的账本,在转作商品粮油的数据那里也应该包含商品粮账本里面的损耗数据。这个东西平时做的时候一定会记得,因为单仓数据如果处理不到位无法清零,但是当要考虑的事情有很多的时候,就忘记了。在做这个程序的时候,我就已经考虑到这种损耗是一个很特殊的情况,但是我却没有进一步的考虑到这个东西特殊到要一变成三,通常情况下,一变二就可以了。

除了这个问题,以我现有的数据,基本上那两个程序都能运行出我想要的效果,但实际上,今年到现在为止,单位产生的那些数据还有一些业务类型没有包含进去,那些业务类型有些我可能会用到的,有些我是几乎用不到,但我用不到,不代表其他人也一定不会用到,所以从大的层面考虑,我还要把那些东西都考虑进去。

之前无论是在PQ还是VBA,某些字段的生成实际上是条件筛选,有可能是一个条件,也有可能是多个条件,那些条件里面会有很多个情况。在PQ里做条件筛选,还有个填写界面,但是在VBA里就纯粹靠iif的不断套叠。首先你得知道怎么套叠,然后当你套到一定程度的时候,自己也会被套进去,比如数着数着括号就对不上了,什么逗号双引号之类的偶尔也会制造幺蛾子。使用这种套叠可以实现我想要的效果,但是真的非常虐,而且一旦要进行数据维护,那简直就是个深渊,所以首先我想到的是要不要做另外一个索引的表,通过左外连接的方式指定某些字段必须匹配,然后就能获得我想要的新增字段。从可维护性来说,这样非常好,从代码的实现来说,这也很方便,但是后来我还是决定不在VBA里面实现这种左外的索引和直接在原始的表格里面就索引数据得出一个大表,然后再用大表进行后续的整理,因为要处理的大表其实数据不多,一年肯定不超2000条。之所以要这么干,首先是因为我考虑到可能使用这套方案的人会更容易接受这种直观生成的大表,他们可以直接核对数据,如果觉得不对,可以进行手动更改,但如果我把那个东西做在了VBA层面,程序运行不出来,或者运行出来的效果不是大家想要的,那么需要结果的那个人肯定不知道该怎么办。这种直接通过Excel的索引,先得出一个大表的方式,同样也会让PQ的程序不那么复杂,不需要搞那么多条件筛选。虽然PQ的条件筛选有界面,可以下拉选择,但需要选择的东西多了,很容易就会选错。

最后,事实证明我的这个做法是合理的,我把需要考虑的因素全部都考虑进去用全面的测试数据都模拟过以后,发现两个程序都能满足我的要求。当然了,在最终成功之前,我经历了不知道多少debug。你永远都不知道你会被什么卡住,又或者在什么地方被卡住,但被卡的次数多了,你就会觉得这很正常,继续死磕就行。

Excel文件减肥

2024年8月21日 08:18

对office越是爱,就越是恶心WPS干出来的事。昨天早上把上星期还没整理完的那些账本格式调整了一下,把所有账本模板都调整到符合我的要求以后,我就把那保存下来。在我看到的范围之内,那个账本里没有任何的图片,能看到的都已经被我删掉了,而且那些工作簿里面也就几个工作表而已,数据很简单。我感觉那就大概几十KB而已,但是当我把改好的工作簿复制到我的同步文件夹的时候,发现那个东西大得恐怖。只有4个工作,工作簿居然有接近8MB大小,我赶紧把那个工作簿撤回。打开那个玩意,我的确没有看到奇怪的数据,然后F5定位,也没有找到任何对象,到底是什么原因导致那个工作簿那么大呢?是不是一些工作表被隐藏了?于是我选择了其中一个工作表,复制到一个新的工作簿里面,结果发现,虽然仅仅只有一个工作表,可视范围也很小,但是一个工作表也居然有接近1.6MB,这到底是怎么回事呢?文件的后缀是xlsx。之前看过好几回给Excel文件减肥的教程,通常第1步就是把对象全部找出来,该删掉的删掉,显然我找不到对象,所以我的终极大招就是把文件降级保存为97~2003的xls。降级保存之后,那个工作簿马上变成了不到30KB,是一个正常的大小,然后我又把那个东西重新另存为xlsx,文件大小终于正常了。所以这到底是什么情况呢?

WPS到底干了什么好事?可以肯定的是WPS至今没有64位的版本,实际上他们默认保存的那个文件格式相当于office低级版的xls,如果做这个账本模板的人只是直接的把后缀改了,没有通过另存为的方式,会不会就导致了这种莫名其妙的问题呢?之所以我会那么自信选择降级保存是因为工作表里没什么高端的东西,低端的Excel也能完美应付。

WPS吹了那么多年,至今我都觉得无法接受那个东西。当我还是个高中生的时候,我的同学就有人在用WPS。那个时候,我家的电脑是win95,好像对应的office版本也是95。我读高中的时候,上电脑课学校用的那个office是2000的,这就意味着某些功能我没办法在家里那台电脑上练习。好像我家那台电脑的office无论如何调不出文本框功能,所以当某个电脑作业要用文本框设计一份海报的时候,我就只能把所有素材都交给同学,然后把整个版面该如何放置告诉她,让她在她的电脑上帮我完成。那个东西回到我的电脑可以打开,但却没办法进行修改。我觉得office95的界面挺漂亮,比office2000的漂亮。office2000跟office2003相比,我感觉2003又更进一步。我觉得office2003是整个office系列低版本的一个顶级之作,非常完美,很流畅,基本不会出现任何问题。之所以得出这个评价,是因为office2003后一个版本office2007简直是灾难性的,office2010好那么一点点,但还是有bug。office2013在数据透视表方面简直让人无语到了极点,到office2016的时候,基本上数据透视表方面算是好了,但是在新加入的power query和power pivot方面,office2016又是一个bug乱飞的存在。

那个莫名其妙的账本工作簿,我通过每个都降级再升级的方式成功减肥。不是每个人都是我这种有点痴迷属性的 office狂热分子,所以当大家用那个东西的时候,估计会半天想不明白为什么自己的文件会那么大?默认只能用WPS的某些单位,美其名曰为了安全,实际上是主动降低自己的工作效率。当然,这有个好处,当某件事做不好的时候,就可以赖在软件的头上,是软件不好,不是我能力有问题。

❌
❌