2024-05
18

完成修正方案

By xrspook @ 9:50:33 归类于: 烂日记

周四下午,在接近下班之前打了个电话,知道了某个表格要怎么填写以后,我就开始修正自己的VBA方案。与其说是修正VBA方案,不如说是把VBA的方案更进一步,在那个方案上面增加内容。其实最需要增加的就只是一个仓号的拼接。要获取那个数据我有非常成熟的方案,因为去年夏天已经研究得足够透彻。虽然这样,但实际上实施起来的时候还是花了一点时间,尤其是要在VBA里把SQL的数据输出到数组,然后经过几番折腾以后,再输出到单元格。如果要我用Power Query实现这个功能,根本不用费脑子,马上就能实现,但是既然我那个 Excel用的是VBA,我也就懒得混合使用了。原来的内容没有改变,增加了两个数据项目,一个是仓号合并,另外的一个是单仓变化的的二维展示。二维展示实际上也是有一套成熟方案的,也是去年夏天,我已经把最困难的部分全部都研究透了,所以现在只是把那套方案里面的东西有选择性地挑选使用。

VBA方案实现了以后,我又在另外一个Power Query方案增加输出我需要的数据,然后我就没有继续干下去了,因为我不知道如果我要更进一步大范围改动之前的PQ方案的时候,我得花多少时间。当我觉得我必须得暂停结束的时候,已经是晚上接近9点。需要大改动的PQ方案,我需要实现一个累加计算。那个东西我是用来计算库存的。首先我会获得一个期初库存,然后得到一些每日的变化数,然后按照日期排序的方式,把它们累加起来。这是最关键的步骤。在VBA里面,如果要通过SQL的方式实现这个比较麻烦,但实际上在经典的SQL里有比较直接的解决方案,但是VBA的SQL没办法做到。PQ肯定有自己的方法实现这种累加,但是也没有非常直接的方案,也是通过多层套叠的方式试实现。就逻辑来说,实际上操作的步骤跟在VBA里的实现没差多少。回到宿舍以后,当我运动完毕,在洗澡之前,我稍微在微信上搜索了一下PQ的累加计算解决方案,结果发现是有的。看了一下代码以后,我觉得那是完全可行的,所以基本上我就确定这肯定没问题。打通了最后一个累加计算的问题,我确定只要我把需要的数据都准备到位,我就能得到我最终想要的表达效果。对一般人来说,在每天都有多个变化数的前前提下,每天都计算采购成本,简直是无尽的噩梦,但是其实只要理清思路,搞清楚到底是怎么个来龙去脉以后把这些步骤固化下来。只要把每天的数据都整理清楚,自然而然就能自动得到每天的采购成本。数据是出来了,花了九牛二虎之力,但我依然要问,为什么要逼着我们提供这些数据呢?因为实际上对绝大多数人而言,没办法纠结到这个程度,但即便我纠结到了这个程度,得出来的数据还是会有那么一点误差,虽然那些误差可能你根本看不到。

花了不到一天的时间,就重新整理出VBA跟PQ,我感觉成就感满满。

2024-05
12

不得不修改套件脚本

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

之前说到,级联下拉菜单的select2插件当它觉得下面的空间不足的时候,就会把下拉菜单变成上拉菜单。我不知道设计者到底是怎么想的,我也不知道为什么使用的人为什么不觉得这个操作不太对,可能是我比较古板吧。我没有限定那个网页的最大高度,所以实际上这个网页的高度是无限的,不存在空间不足的问题。以我的水平也没办法去了解这个select2插件到底是如何判断空间到底是不是不足。

一开始我用的是mini版本,就是所有代码都挤在一起,之前我觉得标准版本跟mini版的区别在于mini版里面没有了注释、回车、缩进,仅此而已,但是当我在mini版里面找不到网友提到的某个东西的时候,我就怀疑是不是除了上面我提到的以外,min版跟标准版还有其它的区别。要在min版密集的字符里面找到某些东西非常的困难,哪怕你已经不是用肉眼去找,而是使用搜索功能,所以我又下载了一个标准版,结果发现原来二者真的有区别,区别还不少。在搜索标准版的时候,我找到了判断是否空间不足需要转换上拉下拉的各种操作,但是在mini版里面完全没说清楚,而且所有的变量都非常简洁,只有一个字母,你根本猜不出那到底是什么。

所以我首先是在标准版里进行我想要的修改,结果发现可以了,但是我却没办法在mini版里找到完全一致对应的部分。标准版跟mini版体积差了一倍,但实际上标准版也不过是150KB而已,很小。我尝试过直接把标准版拿去压缩,结果出来的东西好像vscode不太承认,虽然在mini版里还没有找到修改的方法,但起码我有标准版的修改方案。

除了下拉菜单以外,还有第三层选项搜索栏的自动对焦的问题。只要打开第三层菜单,光标就会自动的对焦到搜索栏,这就意味着手机的虚拟键盘会马上弹出。这会大大降低了手机屏幕的高度。如果虚拟键盘不弹出,你直接可以从下拉菜单里面选择的那些东西你不得不麻烦地把虚拟键盘最小化掉。这个操作跟聚焦搜索框会扩大屏幕字体一样,让人烦恼。所以我要做的是当我点击第三层菜单的时候,下拉列表有搜索框,但是光标不聚焦在那里,这就意味着,如果第三层菜单只有几个选项,用户可以直接点击选项,不会有虚拟键盘的弹出。在我们现在整理的数据当中,第三层菜单绝大多数选项都只有几个,可以直接一目了然展示完毕,极少需要调用到滚动下拉菜单。之所以要在第三级菜单里面做一个搜索框,是因为有那么极少数的选项数量很多的,会在10个以上,会让那个地方出现滚动的下拉菜单。因为选项很多,如果可以有对选项进行搜索的功能,显然会方便很多,所以我的目标是第三层选项有搜索框,但弹出的时候搜索框不聚焦,但你可以手动点击搜索框,然后在里面输入获取你想要的结果。这个东西说起来好像挺简单,但实际上要真的做到,还真不只是输入框自动聚焦的问题。后来,我在毫无办法之下,又去研究select2标准版的时候才发现,让我无论如何设置输入框都不能解决的原因是让输入框那么顽固的东西不在输入框本身那里。最后我替换了一些写着focus的东西,终于,第三层带有输入框的下拉菜单在打开的时候焦点不再自动固定在输入框那里了。

我也不想修改select2脚本本身,我尝试过很多方法实现我想要的效果,但最终宣告失败,所以我也就只能手动修改标准版。套件使用起来的确很舒服,但未必跟你的项目完全匹配,当你要做微调的时候,可能会碰壁很多次才最终能实现你的效果。

2024-05
11

手机浏览器的种种烦恼

By xrspook @ 9:00:23 归类于: 烂日记

说了两天的Power Query方案不完美,大概就那些了。今天来说一下级联下拉菜单网站的不完美。

就功能来说,实际上都已经能实现了,但关键是有些部分好像,我无论如何控制不了,就电脑的展示效果来说,没什么好纠结的,但是手机的展示效果,却让人觉得好像总差那么一点点。

首先让我烦恼是在不同浏览器之下,搜索输入框会自动对焦。在小米自带的浏览器之下,不知道为什么那个下拉的选择框会变窄。firefox手机浏览器之下,整个页面变大,无论我怎么调节网页的字体大小都没办法阻止 firefox手机浏览器的这个自动变大。最后发现,原来这是手机浏览器的臭毛病,他们觉得输入时字体太小,你看不清,所以要自动变大,但自动变大会让网页的展示效果发生扭曲,变大了以后,当我不再聚焦在那个输入框,不会自动把网页缩小,这就让人很头痛。小米自带浏览器之下,当你的焦点不在那个搜索框的时候,下拉菜单的宽度又正常了。虽然这两个测试的浏览器实际上都不会影响最终的结果,你要查找的东西最终还是能看到,但关键是非常影响用户的使用体验。如果是小米自带的浏览器,感觉虽然丑一些,但还是能够做到,但如果是遇到firefox手机浏览器,你必须用双指把网页缩小,这就让人觉得很麻烦,而且缩小了以后,当我再次点击搜索框,还是会变大,简直可以把这个东西称之为恶心。

在我发现这个是手机浏览器的臭毛病以后,我就直接在meta那里加入了禁止缩放的命令。搜索框聚焦会让网页放大缩小的问题彻底解决了,但这里只能说在安卓手机之下彻底解决了,至于苹果会不会有这种臭毛病,不知道。因为我手边没有可以用来测试的苹果设备。根据单位会计的反映,使用苹果手机的人比例不算太多。虽然我不知道她说的这个比例是怎么算出来的。因为单位的人用苹果手机的比例跟经常报销的人用苹果手机的比例可能是两个完全不一样的数字。但也可以换个角度考虑,那些用苹果手机的人如果手机体验感真的很差,那么就请他们在电脑上完成这个查询的步骤。毕竟需要经常报销的人通常不可能长期不接触办公室的电脑。

解决网页放大缩小的问题后,另外一个烦恼又涌出来了,理论上那是一个下拉菜单,但实际上不知道为什么,有时手机会弹出一个上拉菜单。如果上拉菜单完全没有问题也可以说得过去,关键是上拉菜单有时会出现一些格式上的异常,为什么明明是下拉菜单就变成了上拉菜单呢?据说这是select2插件的一个自动判断,当它觉得下面空间不足的时候,就会采用上拉菜单。这种情况通常发生在我要下拉一个菜单,那个菜单刚好是有搜索功能的,当那个菜单打开以后,手机会自动弹出输入法,所以这就意味着手机屏幕的高度突然间没有了1/3或以上,于是不知道为什么,网页就判断下面的空间不足,把那个东西变成上拉。有些时候,你明明知道下面的空间足够,但因为之前几回都是上拉,所以这一次有空间,也不下拉,要展示为上拉。我个人觉得挺反人类。电脑上没有发生过这种问题,但在手机浏览器上,却说不准什么时候会出现这种状况。理论上我要做的就是强制把菜单限定为只能下拉,但实际上好像插件又没有一个明确的控制方法让我轻易做到这个。

目标是明确的,道路是曲折的。

2024-05
10

进一步加权平均

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

之前说到了Power Query方案不完美,第2天我又更进了一步,真的老老实实做了两层加权平均。效果挺稳定,比之前那个还稳定,因为之前那个方案查询数据是跨表的方式获取,PQ可以跨表查询数据,但在数据转换的时候,可能会遇到一些问题,导致刷新通过不了,于是你得重新刷新,如果你的表格很多,会让你非常的烦恼。我这一次,我采用的方案是用VBA跨表抓取数据,相对于PQ的跨表来说,VBA的跨表更稳定。在不进行文本拼接的前提下,我对VBA里的SQL操作感觉是要比PQ熟练一些。 VBA抓取的数据很快,不会有卡顿的烦恼,除非VBA直接卡死了。VBA卡死的解决方案就是重新拿出之前备份好的那个重新刷。又或者是卡死了之后再弹出Excel,然后你选择把那个东西恢复,这两种通常都能解决问题。如果依然卡死,那么估计你就得重启电脑了,如果重启电脑还是不行,那就换一台电脑吧。前几个月基本上我每天又或者是每隔几天就会遇到VBA卡死,但近段时间又好像没有再遇到,我严重怀疑这跟win10的系统更新有关,尤其是框架的更新。

用VBA抓取数据,然后把那复制到要进行PQ处理的工作簿里,把需要手工填写的东西补上去,然后PQ就可以很快乐地在工作簿内弯曲折叠生成我想要的样式。如果说有什么事让我觉得我非得在PQ里而不想用VBA解决的,大概就只有文本拼接。在PQ、Python又或者真正的SQL里进行文本拼接都是很大路的货色,但是在Excel的SQL里,你就是没有一个很方便的方式实现,你只能把它输出到数组,然后再折腾半天。老领导要求的表格里,总少不了文本拼接。有可能是拼仓号的,有可能是拼品种的,有可能是拼客户的,也有可能是拼各种组合的。如果要拼这么多的东西,我首先想到的就是在PQ里做一个分组。PQ也是一个很神奇的存在,分组的时候就没有办法给我选择文本聚合,其实文本的聚合的方式就是文本拼接。所以每次你都是得随便选一个求和,然后在高级编辑器里面把求和改成文本拼接。

PQ经常让我绕来绕去绕不出去的还有if的使用。在其它编程语言下,括号逗号解决问题,但是M语言里if这些东西都没有。所以当我用常规的思路去进行我的条件设定的时候怎么都不对,最后我不得不使用自动生成的方式,接着才发现原来自己语法错误。

在PQ里使用加权平均,思路来说很简单,就是数量乘以单价求和后再除以数量之和。如果要分步操作,在分组之前要算出一个总价,分组以后在高级编辑器里面修改公式,用总价除以总数量,但实际上也有不需要分两步的方式,但是需要用到list.zip。其实我对PQ并不算太熟悉,在没有查找加权平均的方案之前,我试过用公式套叠,结果发现不行,在list.sum里面选择两个列,然后相乘实际上是不可以的。list.zip那种方式,让我想起了Python里面的元组操作。要完全搞懂PQ,学习成本非常高,他们的各种玩法套叠简直是到了那种让人眼花缭乱的程度,当然,其实Power Pivot,也就是DAX语言要玩得高深,同样很烧脑。对我这种初级玩家,主要是用来拼接文本的人来说,基本功能能顺利实现也就可以了。最终生成的数据,有一些地方肯定用了加权平均,我手动校核了一下,发现很OK,没有问题,但是我还没有测试过一种先单仓做平均,然后再多仓做平均的数据。这种数据肯定会有,但是今年的前几个月未必一定发生过。

手上的工具多了,用的时候得想想用那个最合适,又或者,联合使用也是个妙招。

2024-05
1

越来越舒服

By xrspook @ 10:36:48 归类于: 烂日记

以前写网页,都是在记事本里,一个一个字敲。缩进什么的,通常都是用tab完成,因为如果要敲4个空格键,实在太难了,而且那时我也不知道标准做法是4个空格键。我不可能每次都那么准确敲4个空格,如果敲漏了可能就会对不准,会逼死强迫症。我已经不记得以前我是怎么保证那些需要成对出现的东西配对的,所有东西对我来说都像是白纸黑字,所以在记事本里敲跟我在白纸上面写没什么区别。

很多年以后,我开始用Notepad++,那个东西的好处是会根据不同编程语言把标识符都给高亮出来。很智能的地方还有显示到底我配对的是哪一层,这样就让我在查找问题的时候简便了很多。但到这里为止,我做的所有事情也都只是在靠着自己的眼力去完成。

再到后来,当我已经不再设计自己blog网站之后,准确来说,是当我下定决心,要用python去解决blog导出数据转换的时候,我用上了vscode。我使用vscode的时间跟我系统学习python的时间是一致的。一边学习python,一边在vscode里实践。那是我第一次用上那么智能的编辑器。有了那个东西以后,如果我犯了一些低级的错误,马上会有红色波浪线给我标出来,如果有一些可能错,但未必一定是错的东西,就会给我标黄。所以如果我遇到的那些东西,基本上我就不用测试程序了,肯定不会通过的,但即便没有被波浪线,也没有被标黄,测试的时候可能依然得不到我想要的效果,但有时会给我提醒到底是哪一行、运行到什么情况的时候不对劲了。

学习过C,研究过html,也玩过php,去年也着用了office里面的VBA。我觉得就思路呈现而言,python是让我觉得最自由的。因为没有那么多条条框框的格式限制,甚至连配对的括号都不需要,只需要要恰当的缩进就能解决问题。在vscode里,标准的缩进使用4个空格,但你也可以用tab。同时你也可以设定把tab自动转化为4个空格。有了这么方便的缩进。python那些必须用缩进说明层次的问题,完全不是问题。

这一次,当我要做级联下拉网站的时候,我在vscode里写html。在标签配对方面,感觉实在太爽了,标签会自动给我匹配,缩进也会给我自动实现。在写ID、写class的时候,可能会空格乱写,但只要全选之后,Shift+Alt+F就可以做一个格式化。格式化以后,所有东西都是完美的。有时我要引用某个js或者css。引用的不是一个网站链接,而是某层文件夹里面的东西,那个时候vscode把理论上我应该全部敲出来的东西给我变成了下拉的选择题。这些选择题,在我敲打标识符的时候也通常很自然地带出来。标识符这个玩意,在编辑器里,有些会自动带出来,有些不会。不会的时候,非常有可能你脑子里想到的是某个东西,但你手上敲出来却是另外一个玩意,于是就会导致最后完蛋了。让我觉得爽的还有vscode的高亮是我喜欢的那种颜色。以至于习惯了vscode的暗黑配色以后,我把Notepad++的主题颜色也变成了高仿vscode的样式。

以前写网页是因为我要写,现在有了vscode的加持,我觉得我可以写得很舒服。

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