2020-09
8

PQ终于重新可用

By xrspook @ 17:29:50 归类于: 烂日记

昨天晚上,在不断的折腾之后,我的Excel里的Power Query终于可以用了。但实际上,这不是一个晚上的功劳,上周回家之后我发现,家里那台Win7上的Microsoft 365用得好好的,无论是Power Query还是Power Pivot。这到底是哪里出了问题?我实在搞不懂。家里那台电脑Microsoft 365的版本也是20988,版本号跟单位那台电脑没有重装Office之前完全是一样的,但是家里那台电脑Office更新的那个位置没有一个黄色的标记。为什么会有这种问题,我也搞不懂。在单位访问github和npm大多时间是眨眼间的事,但是在家里访问npm非常慢,慢到简直下载不了。进行pip类别的python插件安装得靠运气,运气好的时候可以做到,运气不好的时候,只能用镜像。但貌似在家里,我从来没有遇到过访问微软出状况。而单位访问微软的时候出状况太正常了,比如我续费Ofice 365,需要把那串序列号填入到我的账号。我试过一个晚上不断尝试,还是失败,最终我让台式机用我手机的热点,然后再访问,一次就成功了。这到底是什么原因导致单位的网络访问微软这么糟糕呢?但是这种糟糕又不是一直都那样,而是偶尔抽风,但说不准抽风到底会在什么时候发生。

让Power系列重新可用的关键是上周五回家的时候,当我在电脑里打开Power Query,发现Excel右下角显示正在加载net framework。这就意味着,Power Query是一个需要框架支持的东西。之前我从来没有发现过这种事,大概是因为PQ打开得太快了,我的眼睛主要放在屏幕的左上方,没有看右下角。在加载Power Pivot的时候,右下角会写着正在加载数据模型。单位的Excel,一开始打开Power Query的时候,右下角也会显示正在加载net framework,但是过不了一阵,中间就会弹出错误提示。如果我不把错误提示按掉,右下角会一直显示正在加载net framework。这让我觉得大概就是,net framework不对劲,导致单位的Excel用不了PQ功能。第1次加载PQ,弹出错误代码按掉以后,当我第2次再按,右下角就不会显示加载net framework了,而会直接弹出错误代码。

家里的net framewor用的是4.7.2,单位用的是4.8,理论上4.8更高级,但我说不准会不会跟Win7有什么冲突,虽然4.8理论上是支持win7 SP1的。一开始我的想法是把4.8卸载了,但无论如何都卸载不了,卸载不了高版本的,就没办法装低版本。昨天晚上我做的是下载了一个net framework的修复软件,修复软件里面有两个选项,1个是修复,另外1个是直接卸掉。之所以我确定一定跟4.8有关,是因为在无意之中我打开MeGUI,发现也出错了,根本运行不了。错误代码写的是签名错误,那一堆东西里拿第1个错误提示去搜索,别人说这就意味着这个软件不支持高版本的net framework。所以,让我选卸载掉4.8还是修复4.8的时候,我毫不犹豫,但是在卸载4.8之前,我又重新下载了个4.7.2的脱机版本回来,因为把那东西成功卸载后,电脑不装net framework是不行的,很多软件都会运行不了。其实在卸载4.8之前,我已经已经试过运行过脱机版本的4.7.2,发现是无论如何装不上。当我毫不犹豫地卸载4.8,装上了4.7.2以后,我的MeGUI可以用了,Excel里面的PP也可以用了。而这个net framework 4.8大概是之前我想升级PowerShell,但无论如何都做不到。PowerShell升级的其中一个要求好象是net framework的版本必须4.8,但是,又有点状况。理论上这些事情我应该很早就发现,但显然,近段时间我根本就没有纠结那个东西,所以就有了之前的折腾。

感觉从前的软件没有现在这么神经质啊!

2020-08
21

懒精自动化

By xrspook @ 8:24:58 归类于: 烂日记

对别人来说,做某件事就是从系统上读取某些数字,抄在纸上,然后不断地敲计算器,得出某些数据,然后再按照某些格式整理成别人要的样子。之前我也是这么干的,但是我觉得,这实在是太累人了。我要做的不仅仅是读取系统上的数据,我做的是读取我自己的数据,然后跟系统上的做比对。做的东西必须是最小单位。明细对好了,后面的汇总是水到渠成的事。我觉得,汇总数据这种事,规则我定下来,结果应该是自动生成的,管好我的明细数据,汇总数据就不会出乱子。汇总数据出来了以后,还得按照某些格式整出来,这其实是一个填坑的过程,但是应该怎么填呢?逻辑的思路就是,如果有数据就展示出去,如果没有数据,就为空。这是主要思路,但某些细节问题其实也是需要考虑的,比如说数据与数据之间的标点符号:逗号,分号,句号,冒号等等。没有数据的时候,那个地方是空,但是在连接两个数据之间,有些人默认带入了标点符号,于是就会出现一个神经质的状态。数据与数据之间有一大堆莫名其妙的标点符号,正常情况下,那些东西都不应该存在。按照人的思路,那些东西根本不可能存在,但为什么有那些东西呢?显然是那个做判定的人没有把标点符号写到判定里。什么时候应该逗号,什么时候应该句号,当没办法判定哪个才是最后一个的时候,标点符号怎么办?其实真的不能判定吗?肯定是可以的,当某个元素的序号等于这个数组的最后一位,显然那个东西就是最后一个了。在Excel的世界里。尤其是不考虑VBA,只考虑前台的公式,这个逗号的判定在我现在的能力范围之内,的确有点难,所以遇到这种情况,我干脆每个数据给它一行,每行数据的末尾,不加任何标点符号。

昨天我突然意识到,Excel的公式编写是可以插入空格和回车的,当然,空格和回车要加在恰当的地方。比如加在数据连接的地方,不要加在某个函数里。又或者其实加在某个函数里面也是可以的,但是如果你在表达字符串的地方加入了很多空格,最终的结果肯定会哭。也正是因为回车的加入,让我的公式看上去更整洁了,我不用纠结不断地眼睛急转弯。复制粘贴也变得相当的容易。的确复制粘贴很简单,但是粘贴得多了,每一行的数据框架都是一样,只是修改了里面的部分内容就会让我自然而然想到使用循环。如果Excel的公式里有for或者while这种循环该多爽。换句话说,为什么就不能有循环呢?之所以这样,大概是因为Excel,没想过你要么在某个单元格里面展示一堆合并起来的字符串。这种字符串的合并,理论上更应该出现在Word或者普通的txt里面。

我首先写了个索引,然后写了个数据,接着对数据进行数据透视表,最后写了个很长的公式。根据数据透视表和数据透视表以外的一组数据,生成了两段字符串。字符串里面所有数字的格式全部都严格按照我需要的模样输出。这样做的确实现了我想要的功能,但我感觉还是有点麻烦,如果写个VBA,加入数组,这些东西很容易就能表达出来。从前前台看来,也会干净利落很多,但问题是,加入VBA的话。Excel的保存格式就得改变。对小白来说,VBA是个洪水猛兽。他们不知道该不该允许宏这个东西。如果我是他们,我不了解这个东西。这个东西的确有安全隐患,我肯定不会主动打开,即便我知道这个东西可能很强大。

开源的东西用起来得花一些步骤。组装好的东西用起来的确用很爽,但问题是,万一里面有猫腻呢?归根到底,还是自给自足、自娱自乐比较好。

2020-08
1

真的是软件在欺负你吗

By xrspook @ 17:10:03 归类于: 烂日记

前几天,我的一个同事跟我说她现在用的是WPS,在筛选数据的时候,一个数据源每一次筛选出来的东西都不一样,今天是一个总数,明天又是另外一个总数,问我会不会遇到这种事情。首先我跟她说,我根本不用WPS,因为它不能满足我的要求。其次,我用Excel时候,从来不会发生这种事。她跟我说,筛选少量数据的时候,没有这种问题,但是数据量一大,就会出现状况。我没遇到过这种问题,我信任我正在使用的软件,同时,我的软件,也没有背叛过我。然后就没有然后了。她没有叫我去她那里实地给我演示一下WPS是怎么把她整死的,我也没有主动要求去看一下,到底WPS在搞什么鬼。我觉得,不是WPS搞什么鬼,是她的数据格式有问题。最大的可能性是不够规范。非常有可能出现了合并单元格之类的东西,也有可能数据粘贴过去,某些单元格里出现空格之类的玩意。各种各样奇怪的现象都有可能发生。之所以有这种感觉,是因为几乎每次她给我看一个新表,里面都有一些奇怪的东西。

对我这个Excel控来说,那些瑕疵是完全不能存在的,比如说我最讨厌的类型——明细表格里有合并单元格;也比如表格的标题模棱两可,让你不知道那到底是什么;第三次是逻辑思路混乱,根本搞不懂一个表格里勾稽关系到底是怎么样的。于是这也难怪为什么领导布置下来的东西,她不得不一次又一次交上去,因为领导要觉得不满意,叫她一再返工。别说领导不满意,我这个路人甲也看不过去。领导为她好的话,怎么会不让她返工呢?一方面我觉得,其实领导的这个做法挺好,因为他没有给你设定好你到底要怎么干,你按照我思路去干就可以了。他给了你一个思考的空间让你琢磨,这是个让你进步的好机会。但你交上去的东西老是不合他的要求,谁都会上火。

之所以会发生这种事,其中一个原因我觉得是在她自己设计那些表格之前,见过的表格太少了,尤其是非常复杂的。什么东西应该放在一起,什么东西不能放在一起,她没有一个很明确的思路。自己的知识库容量不够,当然不可能折腾出知识库范围以外的东西。其他人是怎么处理这些数据的呢?他们用的是什么工具?什么表格?什么方法?领导是这么要求的,但是我觉得我的这套方法比领导要求的更清晰,更不会出错,我可以跟领导解释我的用法,如果合理的话,我觉得领导不会有意见。情况就像我们做毕业答辩的时候,就应该有这么一个底气,在这个课题上,我花的时间和精力都很多。比台下评分老师了解的还要透彻,虽然他们的经验比我丰富。所以,在我的这个课题上,我应该很有信心。但是,绝大多数人都不会这样,于是就会出现毕业答辩的时候被下面的老师批得一塌糊涂却哑口无言。有可能是他们对自己的课题根本不清楚,也有可能纯粹是因为太紧张了,脑子转不过来。

规则在你手,数据由你去整理。如果你都没有一个靠谱的处理方法,别人怎么会放心。不觉得自己不靠谱的方式有问题就是最大的不靠谱。

2020-07
30

VBA批量打印凭证

By xrspook @ 9:44:34 归类于: 烂日记

昨天我打印了一大堆记账凭证面单。理论上我可以用邮件合并的那套表格去的,但实际上,我依然用的是单独一个Excel文件带控件的打印方式。需要打印的凭证面单有很多。估计超过10张。如果只是一两张,用控件的方式挺好,控件我设置为可以利用上下键,选上一张和下一张。也可以在输入函数的地方直接手动填写数字。只打印某一张或者某几张的情况下,这样做很方便。但当我要打印的东西是一大堆的时候显然这就不靠谱了,万一我手抖一抖,按两下,跳跃了呢?万一我按完,选择以后快速打印按钮按偏了呢?我根本不知道自己打印了多少张,中间有没有漏掉。邮件合并可以有选择范围,我可以选择某个范围内的记录,生成一个新的文件,然后直接打那个。如果我生成一堆工作表,我还得把它们删掉,新建一个文件,我还得删文件。与其这样,不如让机器去执行,我一边数据递增一边答应。人肉会按漏,但对机器来说太简单了。虽然这样不断提交打印,会比全部一起打印慢一点,但实际上,对我来说,一点影响都没有,因为我配套使用的是打印速度非常慢的针式打印机。如果我用的是激光打印机,而且还是非常快的那种,打印内容非常少的话。我这样的操作会影响打印速度,但现在,我做的做法非常简单且完美。之前我想不通,在Excel里要如何实现批量邮件合并的功。昨天,几乎可以说不费吹灰之力我就实现了,而我做的仅仅是写了一个几行字的宏而已,而具体某些步骤要怎么写代码可以先录制一个宏,看看参考一下。我最需要参考的是快速打印要怎么表达。因为VBA批量打印太方便,所以我通常都忘记先选择针式打印机。针式打印机不是我的默认打印机,所以按下批量打印以后,当我的激光打印机开始轰鸣,我才记起自己搞错了,所以我得迅雷不及掩耳地关掉激光打印机的电源,然后重新选择针式打印机。我觉得应该完善一下这个脚本,我应该把打印机也设置好,默认为针式打印机,这样我就不会有用错打印机的烦恼了。

这个脚本非常简单,前面的部分我已经写过了,用的是指定行打印的思路。首先输入两个数字,如果第2个数字留空,就默认等于第1个数字。如果第1个数字也空的话,打印不会执行。当第1个数字和第2个数字都靠谱了,会进入一个循环,步长为1。里面的语句超简单。说白了就是一个让某个单元格里的数字自增,然后快速打印该页面,因为这个页面我已经设置了打印区域,所以一切都很简单。之前我还在想,要做个控件,在Excel里面输入起始和结束页码,但实际上这根本没必要,直接弹窗挺方便。当然,就严谨性来说,我的脚本是有缺陷的,比如万一我输入的东西不是数字还是其他字符呢?万一我输入的数字不是整数,不是Excel表格里行数范围内的东西,而是一个浮点小数呢?我当然可以对输入进行严格的限制,限制它的范围,也限制它的数据类型,但这样显然就有点过了,毕竟这种打印完全是用来方便我自己的,没必要做到这么完美无缺。

现在,妈妈再也不用担心我会漏掉打印某些凭证面单了。

2020-07
14

脚本相关

By xrspook @ 9:09:56 归类于: 烂日记

昨天GitHub不知道发生什么状况,下午我发现服务器上不去,晚上貌似又好了。但问题是,下午我push上去的东西,代码页面已经修正过来了,但是网页显示还是老版本,至于为什么,我实在没搞懂。无论,我把仓库检查多少遍,线上跟线下都是一致的,为什么展示页面却不行呢?实在让我很迷惑,如果仍然是这种状况,估计我得把整个仓库里的内容全部删掉,然后重来。这样做肯定是最彻底的,但我真的需要如此变态吗?好像有人说过,如果修改了某些东西,那个会导致网页崩溃的话,GitHub Pages就会一直保留在最后那个靠谱的版本,我觉得新生成的网页没什么问题,因为我在单机上也测试过了,所以接下来可能我要把本地仓库里面的东西全部删掉,然后重新生成网站,再去校验。昨天我试图用一下git bash,但我发现自己根本不知道那个五颜六色的东西要干嘛。尤其是到达某个叫我注释的页面,我完全不知道该如何处理那个东西,不知道该用键盘还是鼠标,不知道应该在哪里操作。那个界面没有任何提示,真的让人非常抓狂。Dos界面很多东西都是默认的快捷键,但显然那个五颜六色的版面的快捷键我一窍不通。而他们默认的处理方式是你懂的。用CMD处理git不是老手做法,但我觉得CMD反而让我心安理得一点,因为CMD要输入的东西永远在最后,不会五颜六色蹦出来一个界面,或许能用鼠标,但实际上又好像实现不了某个功能。VS Code貌似原生是支持GitHub的功能,但我好像找不到登录界面。我明明已经把某个仓库的本地文件夹加入到VS Code的工作区,但是软件还是没感知出来。

下午的GitHub一直显示服务器500错误。没办法搞那个,所以我就研究Excel VBA去了,去实现一个我一直以来都很想做,但是却一直没有动手的东西。最终我写出来了两个脚本,一个用来整理数据,另外一个用来一键生成数据透视表。这两个东西,基本不需要再理清思路,首先用录制宏走一遍,然后参考一下里面的代码。录制的宏里面,总有很多废话,很多无厘头的各种操作。如果那个代码完全是写的,而不是录制的,就没有这么多多余的东西。录制的宏里面默认会带入非常多的默认设置,但实际上,那是不需要写出来的。录制的宏里面也有非常多确定某个选区的命令,但实际上,那也是没必要的。在Excel的可视化界面,鼠标点在某个单元格,录制的宏里面就会确定一个选区。实际上很多时候,鼠标点在哪个单元格其实都是无所谓的,那是很随意的,但是其实我们可以确定某些不随意的单元格。把定位写死就不用经常切换选区,选区选来选去,选了以后又没取消,我不确定会不会整出什么幺蛾子。数据整理的脚本我写的内容还多一点。数据透视表的一键生成跟我录制出来的那个东西差别不大,因为的确那些语句都得表达出来。耗费我最长时间的是数据透视表新表格的建立。我一直以为是数据选区我的表达有问题,但实际上原来是我新增数据表的某些语句写错了。VBE与VS Code比起来,我觉得最不人性化的就是,明明那都是明摆的语法,是你拼写错误了,运行的时候,居然不提醒你。如果能像VS Code那样,固定搭配写对了,显示某个颜色,如果你乱写一个东西就不是那个颜色,语法错误就给你下滑波浪线,debug的时候,我就不需要浪费那么多时间。昨天我的状态也不太行,因为一些理所当然的单词我几乎每次都会拼写错误。看来看去找不到原因,最后发现单词写错了。大概如果我要玩Excel VBA,我必须得找一个靠谱的VS Code插件。

在经历过好几个星期才能解决一个脚本问题以后,一天解决了两个,让人有莫名的成就感。

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