2020-08
21

懒精自动化

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

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

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

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

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

2020-08
13

喜欢VS Code

By xrspook @ 11:30:56 归类于: 烂日记

我感觉自己越发喜欢VS Code了,这个东西的确就是我想要的写码工具,如果早点认识它,从前我就不需要走那么多的网路了。用VS Code写过代码以后,我对它是一发不可收拾的喜欢,但我始终不习惯在暗黑界面码中文,毕竟写代码和码中文不一样,写代码的时候思路是自己的,但积木的类型是固定的,这就意味着写码的时候如果有Emmet会相当便捷快速不出错,但如果在写blog的时候,尤其不是写代码技术类的时候,Emmet会变得毫无用处。同样我不需要额外纠结的还有中文语法。写blog是很自由的事,试想一下满屏的各种颜色波浪线,侧面和下面还有各种数字圈圈那将多么的恼人,当然了,貌似VS Code还没有厉害到可以有中文语法自动检测这种功能,我估计英文可能已经有了,Office几百万年前就已经有的功能VS Code可能天生就内置了,即便没有,让你绝对想不到的插件也肯定能实现。Offcie有中文语法检查的功能,但那个东西,笑而不语就好,别当真。

写码为啥要VS Code呢?不仅仅是Emmet功能,写过的函数,设定过的变量往后再用的时候,敲几个字就能有提示,就更不用说,使用默认的系统函数时能马上显示出详细的函数说明。自己写的变量一个颜色,系统函数一个颜色,保存以后还能自动语法检查,妈妈再也不怕我会犯格式上的错误。但话说回来,格式不错,不代表代码就一定可以运行出你想要的效果。毕竟代码的核心仍然应该是你的思路。

我不知道为什么大家都说暗黑模式写码护眼,护不护眼我不知道,但我知道白色界面看五颜六色的高亮会刺眼,相对来说,背景主色调是深色就没有这种不和谐。是不是因为这样,所以一开始的电脑都是黑屏白字而不是反过来呢?因为他们完全可以把那个东西做成计算器那样白屏黑字。现在我的习惯挺奇怪,写码的时候我用黑屏,写blog或者写其它文章的时候用白屏。我感觉自己用白屏的时候字体大小得设定到起码是黑屏的1.5倍。

去年我第一次接触R语言,觉得那个东西实在太伟大了!今年年初我的计划是学习R语言,但结果Python捷足先登了。VS Code搭配Python那是爽得一逼的节奏,因为Python是很大路的程序语言,所以很多东西已经非常完备了,相对来说R语言小众一点。无论是官方自带适配的还是第三方插件都比较弱。我用过R语言写码,那个东西简直是太难写了!一大串东西写好,要修改其中的一些,还不能鼠标快速插入,只能用键盘光标移过去,实在太逆天!当时我用的不过是系统函数,很多参数的位置和写法都是固定的,无数次我运行失败都是因为我手贱敲错了。试想如果这放在VS Code,有自动的语法提醒纠正,这种烦恼根本不存在。同样比较烦人的写码还有Excel VBA。运行的时候他们会弹出一个代码告诉你出错了,代码到底什么意思呢?到底是哪里卡死了呢?他们明明都得出代码了,却不直接告诉你到底是什么意思,很多时候,运行卡住是因为我手贱把一些系统参数的名字写错了…… 又是参数名字写错!如果在VS Code,这种事情根本不会发生啊!

写代码的方法千万条,但能边写边提醒你不犯低级错误的通常都不是某个程序语言自带的编辑器……

2020-07
30

VBA批量打印凭证

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

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

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

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

2020-07
15

改进

By xrspook @ 10:06:49 归类于: 烂日记

我觉得哪一天自己不看一下脚本,尤其是在工作日的时候,就觉得日子好像缺了点什么。脚本可以是VS Code里的那些,也可以是Excel VBA,同样也可以是各种的网页源代码,又或者是XML文件。反正就是一些不是给人看的东西,又或者说,不是给人直接看的东西。那些东西经过软件的处理以后,结果是给人看的,但是我看那些东西的时候,却是给机器看的。我还没有神经病到要看二进制代码的地步。

一个没有完美倾向的码农,绝对不是一个好码农。所以当我看到,单位的那个所谓智能系统出来东西每一页都有错的时候,我怎么可能不吐槽。他们测试过了吗?他们真的测试过了吗?他们不只是没有测试过,而且做那个表的人根本没用心,连抄都可以抄错。因为我自己是一个码农,所以我知道那些步骤到底应该是怎样的。我不知道专业的码农日子是怎么过的,反正只要我开始任务。任何时候我脑子里可能都在想,有可能是吃饭的时候,也有可能是跑步的时候,经常发生在我洗澡的时候。

写出来的东西的确能实现一些功能,但是那个东西真的能兼容所有情况吗?如果有一些突发的呢?突发的时候,我们可以手动使用B计划,也就是非智能秒杀计划,但是能不能在秒杀计划里加一些判断分分支适应特殊情况呢?这完全是可以做到的,但是一开始的时候,那并不是核心功能所在,所以没有被考虑进去。到达一定程度以后,我就要把那个功能泛化出来。不仅仅做到一些核心的东西,连一些正常的例外也得考虑进去。之所以这么说,是因为昨天走回宿舍的路上,在洗澡之前,我又想起前天写的两个脚本我还可以加一些条件判断进去,使之适应一些后续增加的例外事件。虽然说那些是例外事件,但是在某些情况下,有可能变成常态。之前我不知道该如何处理,但昨天,写了两个数据透视表的脚本以后,我明白到数据透视表我可以固定用某个表名。如果之前已经存在那样的表名,第一步需要把那个表删掉,然后开始后面的操作。又或者,我并不需要删掉那个东西,我只需要改变数据的引用范围。在我的知识范围内,直接删掉比调整引用范围简单。但实际上调整应用范围也必定是一个可控的东西,所以大概接下来我要了解一下怎么在VBA里改变数据透视表的应用范围。另外一个脚本更简单一些,直接是判断某个单元格那时是不是某个固定的东西,是的话就无需进行插入操作,直接开始排序,不是的话就要先进行插入,然后排序。

如果之前我没有学过python,没有努力地写过各种脚本,大概我会觉得泛化有点麻烦,但是当我经历过那些东西以后,我觉得这一切都理所当然了,我甚至想写一个自定义函数把主流程丢到里面去,那么,核心部分的判断就会非常明了,理论上VBA也肯定能做到。之所能具备了这种思路,我必须得感谢Think Python这本书。这种思路是我大学时学习程序语言的时候所不知道的。虽然那时我通过了计算机二级C语言的考试,但那考试对我来说只是一张纸。是后续我接触到、我自学回来的东西,成就了现在的我。

变得更好的路永无尽头。

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