2023-07
28

跨表查询python版搞定

By xrspook @ 22:30:18 归类于: 烂日记

花了一整天的时间去做python版本的发跨表查询,最终还真的被我做到了,唯一有点小瑕疵的就是出入进度里我还没有实现批次小计。我基本已经想好需要一个什么样的数据处理,但是怎么把那些东西结合起来我还没有一个成熟的思路,估计会有一些类似的案例,我可以参考一下。

之所以这个脚本居然用了一整天,是因为最后我算了一下字数,居然有4000多字。因为我用的是VSCode,所以实际上敲代码已经很高效了,因为几乎所有符号都会配对出现,一旦有手误的地方基本上都会提醒,但是有些东西是VSCode不会提醒我的,比如我要用到pandas各种格式的数据,有些事不能直接用print打印出来的,必须要用个循环才能把那些东西展示出来。如果我用python处理Excel,我会用xlwings进去,然后用pandas。之所以用xlwings,因为这个东西支持Excel的版本比较多,老一点的插件有的只支持xlsx有些不支持xlsb,有些仅仅支持xls,而我选择的这个xlwings基本上我用的Excel格式都支持了。现在我主要用xlsx和xlsb。因为做这个python查询之前,我已经在PQ和PP上做了两遍,所以我完全知道自己要做些什么,但具体那些东西该如何实现,应该用什么样的表达式去实现,是我花时间的地方。

昨天之前我对pandas里面的dataframe并不太熟悉。我知道那个结构很类似于Excel的表格,但实际上用起来又跟表格不太一样。我觉得那个东西最好的地方就是不像PQ那样,经常被高手套叠起来,于是你想半天都搞不懂那到底是什么。作为一个不是python新手的人,我还是喜欢用短语句完成,然后再连接起来。自学python让我觉得最成功的地方在于我喜欢用for循环,而且还非常习惯使用套叠循环。如果在我大二学C语言的时候,我也能把循环玩得这么溜。估计我就不会为冒泡法这种东西发愁了。

虽然花了一整天时间,才终于把这个东西整出来,但我个人感觉还是比较愉快的,尤其是敲代码的过程,因为相对于在Microsoft 365的PQ或PP的编辑器里面敲代码,VSCode里敲代码实在太爽了。PP会经常提醒我公式错误,因为PP那个你看不到的循环实在会把你整得很惨。PQ里我不过是删了个文字,不知道为什么它会自动给我加半边括号,所以搞了半天,我都搞不懂自己到底哪里错了,最后发现不知道为什么,多了个括号,又或者在调整某些语句的时候多了或少了个逗号。英文和中文逗号在编程的世界里是有区别的,在VSCode里可以看得很清楚,但在PQ的高级编辑器里。因为字体太小,你还没办法快捷变大,非常折磨我这种眼睛不太好的老人家。

高中的时候我的数学老师经常一节课就只讲一道题,他会用很多方法把那道题解出来。现在,我也喜欢上了这种别人可能非常难理解的行为。

2018-11
20

xlsx与xlsb

By xrspook @ 9:26:05 归类于: 烂日记

昨天我把平时都要更新的大型数据文件都从xls转变为xlsb。之前的那个文件没有删掉,而是把它记下最后的日期,放到某个地方,今天开始在新的文件里更新数据。到昨天为止,这个月坚果云的使用量是899MB。经过这样的数据转换以后,理论上,单位每天更新的数据应该不会超过5MB,除非有特殊情况,比如说要写一个比较大型的报告之类的,而里面又有很多图。如果Excel表格里面有很多图,估计就没办法缩小体积了吧。Excel可以在后面加个b缩小体积,那么Word可不可以也这么干呢?真的能把图片压缩吗?估计今天我得研究一下。格式转换的操作我是在Office 2003上面完成的,当然这必须得装一个转换插件才能正常运行,我顺便在WPS 2019上测试,打开xlsb文件没问题。我也把那个东西发给了在用WPS 2016的同事,她打开也没有问题。最后我在我的新笔记本电脑上也试着打开一下,同样没有问题,当我把xls文件转变为xlsx文件,在新的笔记本电脑上进行各种复制,结果发现数据透视表没有绝对相对引用的问题。也不知道是前天还是昨天我看到这么一条消息说Office 2016推荐的系统版本是Win10,几乎可以说,那个东西是Win10的定制版本,而Win7和Win8推荐的Office系统是2007或2010。于是这也就容易理解为什么我新笔记本电脑上的Office 2016没有数据透视表绝对引用的问题,但是在Win7上面哪一台机都有问题。不只是2016,2013也存在同样的问题。所以得出这么一个结论,如果要顺畅地使用2016,我的系统最好用Win10。估计这不是Office补丁补丁的问题,它们是配套使用的,虽然Win7和Win10都有32位和64位两种系统,但鬼知道Win10在Win7的基础上又改动了些什么。Office 2016之所以出现绝对引用地址的问题,是Windows的office模板那里有毛病。我不知道笔记本上的预装Windows以及office系统是怎么装上去的,估计不是人手一台一台来,但显然他们装上去的步骤是一个整套的流程,是一体的。现在卖的笔记本电脑基本上都是正版的家庭版Win10外加家庭版的Office2016。虽然现在最新的office应该是2019,但是微软最推荐你使用的是Office365。显然,买笔记本电脑的人估计不会愿意每年都给一笔费用使用Office365,所以2016就算是个比较稳定靠谱的选择。之前我已经听同学说过她的一些同事有些人用Office 2016没问题,但有些人有问题,我觉得估计不是软件版本的差异,而是他们Windows系统的差异,因为有些人用的Win7,而有些人用的Win10。

今天我之所以选择xlsb,而不选择更通用的xlsx是因为我知道xlsx文件在2016上用数据透视表,有可能出现绝对引用的问题,但现在显然在我唯一一台装了2016的电脑上没有问题。我需要把它换回来吗?其实没这个必要,因为xlsb文件的体积大概只有xlsx的一半。b和x的区别在于,b是二进制的工作簿,在一些软件上打不开,在没有安装office的前提下,x文件你还可以改它的后缀,改成zip文件,然后解压浏览里面的东西。x文件的通用性显然更强。但对我来说,我是不装office会死星人,所以这根本不成问题。b结尾的文件一般软件打不开,所以一定程度上是不是二进制的工作簿安全性更好呢?而之所以一个体积比另外一个大,是因为x文件里除了数据本身还有各种各样的xml格式。

微软这个博大精深的东西,即便我愿意花钱买2016,但只要我的Windows系统还是win7结果还是会死得很惨,所以想花钱也不能随便花。

2018-11
19

xls变xlsb

By xrspook @ 10:24:57 归类于: 烂日记

这个月我突然发现一个很惊恐的现象,我的坚果云的1GB免费上传流量几乎爆掉了,为什么会这样呢?这一个月下来,米叔的东西是有点多,但是我整个文件夹都只有不到300MB,不可能会发生这种情况,而我每天都进行更新的就只有单位的统计数据的东西了。理论上坚果云是增量同步的,所以如果是同一个文件,我在里面新增了东西就同步那些,旧的东西不会再给我同步,但实际上,周末经过两天的观察,我发现情况不是这样的。每天我都会增加十几MB的上传数据,但显然我每天都加进去的东西不可能那么多,每天我加进去的东西顶多几MB而已。为什么会有几倍甚至十几倍的差别呢?昨天晚上我终于发现了原因!因为实际上它并没有传说中的那么神奇,坚果云直接把我更新过的文件重新上传覆盖上去了,不管那个文件里面之前有没有我已经存储过的内容。于是呢,这就让我比较惊恐了,因为我每天都要更新的文件里面有几个文件是MB级的,最大的那个甚至接近9MB,如果每天我都要更新数据,更新的文件达到15MB也就没什么奇怪的了。以每天15MB计算,一个月30天,即便我什么东西都不往里面添,450MB是跑走不掉。我该怎么解决这个问题呢?

这些数据文件绝大多数都是Excel数据表,我用的系统是Office 2003,所以文件是xls。以前我就发现用2007以上的xlsx更大大能节省空间,至于为什么我不知道。之所以仍然选择老版本,一定程度是因为我觉得用的习惯,而另一方面是因为我也曾经试过用Office 2013或者2016,结果发现他们的数据透视表有严重的绝对引用问题。我不知道那个东西在经过一轮又一轮的升级以后有没有得到改善,但显然我今年早几个月做测试的时候,那还相当糟糕,出来的东西完全不是我想要的。幸好那是年头,我只是改了几个数据表而已。据说这是因为xlsx看上去是一个Excel文件,但实际上是一个压缩文件,核心是xml所以它的体积要比传统的xls小起码一半,尤其是但文件里有缓存数据库的时候。xml不是微软自己的东西,有人曾经调侃,在2007版本以上出现的那个xml的绝对引用问题是临时工搞出来的,微软还没有完全吃透那个东西,就把它用在数据里面了。但是,据说如果用的是xlsb,就没有那个烦恼,虽然那个跟xlsx是同一代的产品,但是xlsb是微软自创的二进制的数据表,所以没那么多毛病。用xls保存文件大小是8.5MB,如果用x1sx,大小是二点多,如果用xlsb。文件就只需要一点多。这就意味着,那个东西能做到接近八倍的压缩,所以,如果平时我每天有15MB的数据量,经过这么一压缩,就会只剩下几个MB而已,一个月下来,那些东西顶多200MB就包住了。之前我一直觉得没什么问题是因为单位的数据量远远没有现在这么多,而另外一个情况是我一直很相信坚果云,我觉得xls是很普通的文件,增量同步应该没什么问题的,但显然,他们只是检测了文件有没有变化,如果有变化就整个换掉。到底什么文件上他们才可以做到增量同步呢?难道只能是txt文件吗?如果那样的话就实在太恐怖了。我还要测试一下在新版本的Office 2016环境下,是不是真的用xlsb就没有绝对引用的问题。xlsb对使用office软件的人一点问题都没有,但是如果对方使用的是WPS,非常有可能他们就打不开文件了。之所以这样是因为之前已经说过,那是微软自创的二进制模式,WPS没办法攻克这个也很正常。如果真的这样,我也就只能把只是我自己使用的文件转格式,而发给别人的文件还是用原来的样子。

之前我从来没试过坚果云单月超上传流量,但现在单位的数据真的把我逼上绝路了。

2018-04
20

Office 2016的烦心事

By xrspook @ 9:04:36 归类于: 烂日记

前天下午开始,我就在旧电脑上测试使用Office 2016。之前我已经在那台机上试过用2013,但是因为2013那个明显的漏洞我无法接受,所以即便我在办公的电脑以及家里的电脑装上了,还是把那果断删掉。现在回想起来,当时是有点太紧张,因为测试的时间还很短,对我来说,电脑能不能装2013是最重要的,但我却没有料想到,2013装上去以后,某些对我来说非常重要的功能存在严重缺陷。2013数据透视表的问题依然传递给了2016,但这次之所以我敢去测试,是因为我大概已经知道了解决方法。所以在旧机子上装上2016以后,我赶紧试试一下那些方法可不可行。那个严重缺陷是当你从旧版本2003的xls文件另存为2007开始用的新格式xlsx以后。数据透视表引用的源数据地址会默认乱套。从新建的那个新文件开始,默认数据透视表引用的地址会变成了一个绝对地址。这样,会让人非常崩溃,因为这就意味着当你把文件复制,所有透视表都失效,你无法在上面更新数据刷新效果。在桌面复制的文件存在问题,云同步的也存在问题,但如果你打开软件之后用里面的另存为就没有问题。这个问题在2013之前的版本2010上没有发生过。据说明年就会出2019了,我觉得即便到了2019,问题依然会存在,因为一定程度上他们的工程师已经放弃了对旧版本xls文件的支持,当然不会掏心掏肺地在那里花时间。经过那一次以后,我认真查找了有什么解决办法。首先第一步是开始使用之前就把2016的模板文件替换掉。也说不准是不是模板文件的问题。反正我就真的是一装完以后就马上替换掉。替换掉以后,可能在新软件下生成的数据透视表没问题,但是从旧文件另存为的文件还是有问题。所以解决办法是新建一个文件,然后从旧文件里全选所有工作表,复制到新的文件里。这样操作新文件里面的数据透视表指向的地址肯定是错的,你得把全部改一遍。改完以后,这个文件就算是适应了2016,往后无论是另存为还是桌面复制都不会存在任何问题。为什么要进行这种傻瓜操作呢?这跟另存为有什么不一样吗?作为一个纯粹的软件使用者,我搞不懂。我也试过把旧文件另存为以后在新文件里把数据源全部改一遍,但这样依然不行。虽然麻烦,但总算找到了解决这个很让我头痛的问题的方案。

之所以用2016,而不是2013,其中一个很重要的原因是2016里新增了几个数据图,比如树状图、旭日图、直方图以及箱式图,还有就是Power系列已经是2016的一部分,不需要额外加载。2016能插入地图。虽然能插入,但是可能在功能选择上会比用Office 365更新出来的2016功能少。同样叫做Office 2016,但是Office 365的2016就要比买断版的2016的内容要丰富。我既然已经买下了2016这个版本的使用权,为什么升级的时候我不能使用那些功能呢?!除非你又出了一个2019,然后Office 365更新的是2019,那么2016用不了那些功能我认。

2013的破解虽然有些可以有些不可以,但总体来说还比较顺利,但2016的破解,貌似我没找到一个可以永久的方法,如果用KMS软件,每180天还要重新激活一遍,显然这很烦。因为说不准那个软件哪一天就不小心被杀毒软件干掉了。其实,就个人而言,入手家庭版的2016价位是可以接受的,但问题是我要在家里也要在单位办公室的电脑上操作,总不可能叫我买两台电脑的使用权吧。我付家里那台电脑的钱是理所当然的,但是如果单位这台电脑的也要我付,我就觉得心理很不平衡了。就个人用户而言,不开票也不用其它什么手续,价格只要149,但是如果什么手续都要办全以后,可能价格就要到599。价格相差了一大截。但是如果没有那些手续,单位的软件根本没办法报销。所以最终,如果硬要用这个软件的话,可能单位的人会让我用那个180天要重新激活一遍的破解版。以前破解出来的Office软件没有180天这个限制,但现在2016都这样了,我不觉得2019还会有什么新进展。而且如果2019出了,大家破解的力度就不会在2016上,所以更加不可能突破这个180天的限制。说真的,如果这个软件是好用的话,我愿意去掏那一百多块钱。

32位的2016在32位的Win7 2GB内存的系统下运行比较卡,文件打开的时候比较卡,操作的时候也有可能会卡。我觉得如果装内存8GB的Win7 64位系统上应该没问题,但如果装在内存4GB的32位Win7上很难说。如果我用上了2016以后,我那XP的上网本,就不可能编辑到新文件的新增功能了。不过话说回来,对我来说那些新增功能的使用几率其实不算很高。所以既然使用几率不高,为什么我非得换一个版本呢?如果我只是喜欢2016的图,我完全可以在我有需要的时候用某台电脑去做图,虽然这样挺麻烦。2016有一些新增的公式,虽然我很想用那些功能,但不嫌麻烦用以前通用的公式各种迂回还是能做到同样的效果。

以前电脑上换某个软件的时候根本没有这么多烦恼,只管用就是了,但现在要照顾的东西太多。

2018-02
12

Office 2013的严重bug

By xrspook @ 20:30:30 归类于: 烂日记

昨天我才非常不容易的地通过远程控制往家里的电脑安装了Office2013,但用了不到24小时,现在我又不得不把它卸载掉。熟悉上手2013需要一定的时间,而有些功能在过去的一天里我的确也已经喜欢上了,比如选择性粘贴的方式以及表格隔行不同的颜色格式,可是这种东西可以设置比较简单。选择性粘贴在2003里藏得比较深。让我决心要换2013的原因是数据透视表动态引用比2003简单,但同样,让我彻底摒弃2013的原因也是数据透视表。在没用过之前,你完全没想到居然会这样,但用过以后,你就觉得非常无语,即便2013再强大,这也不适合我,因为它的某些潜规则非常反人类。

昨天开始,我就发现Excel某些完全没有引用外部数据的表格里也给我弹出安全警示,说那个文档用了外部数据,不安全。按照我的思路,如果你有警示,理论上点开是不是应该说明外部数据所存在的页面,但没有,那只有一个启用按钮,你只能按下去,或者让黄色的警示长期存在,这简直折磨死强迫症患者啊啊啊。至于外部数据在哪里,你得自己找。第一次发生这种事是我把原来的xls文件另存为了xlsx,在打开文件的时候,我发现数据透视表虽然引用的是同一个文件簿里的数据,但仔细看那个引用源,前面居然加了一大串的绝对地址。那是我另存为之前的文件所在地址。昨天发现这个问题的时候,我以为这只是新旧格式转换的时候出现的毛病,但今天当我做完所有操作,用远程监控在家里打开这些表的时候,我傻眼了。今天新上传的文件也是这样,我完全没有对他们做奇怪的操作,在单位这台电脑打开,查看数据源是很正常,但是在家里打开,显示的数据源居然用的是单位这部电脑文件的绝对地址。发生这种事,我的第一反应是是不是自己在操作上有什么问题呢?但是当我把所有操作都重复一遍以后,还是没有发现问题。家里那台电脑同步更新数据的方式是坚果云。以前我一直都是这么干的,任何文件都没发生过这种问题。如果Excel数据表里引用的是其它数据表的内容,发生这种事还可以理解,但是,那明明就是同一个文件里的不同工作表而已。

为了这个我跟同学纠缠了一个上午,未果。她用2013已经好长时间了,一直觉得没有问题,当然也从来没有遇到我这种事情。单位的数据如果是有数据库,任何地方都能连上的,当然没有这个烦恼,但是显然我没有,我只能以我个人的方式,用云端的办法在不同电脑上同步数据。偶然的机会,我发现这不只是不同电脑的问题,即便同一个电脑,只要是2013生成的xlsx文件,用复制的方法建立副本,副本的数据透视表也是引用原文件的。也就是说,如果不是用剪切的方式,而是用复制的方式把一个文件放在电脑的不同位置,这几个文件,一样会存在引用错误。但是,如果打开源文件,使用另存为命令生成新文件就没有这个问题。如果同一个电脑复制有问题,任何云端同同步肯定都会不行。

之前我一直没找到跟我相似案例的搜索结果,但是当我搜索2013,以及复制文件以后数据透视表引用错误,结果一大堆,Office 2013是这样,2016继续是这样,只要xlsx,保存下来的文件都存在这个问题。想想都觉得很疯狂,这不过是非常基础的操作而已,但居然也会有这种问题。唯一能解决这个的大概是用微软自己的同步软件云端同步(不确定是否真行),用其他任何的备份软件,肯定都会导致非常恐怖的效果。如果数据透视表里面有很多引用关系而且很复杂,复制之后就存在这个问题,要重新把数据源都调一遍,那真的会把人搞疯。我觉得之所以这样大概是他们觉得从2013年开始,数据就不应该存在单机电脑上,我应该存在一个永远不挂的服务器上。如果是存在一个外部服务器上,用绝对引用当然很靠谱,但如果是存在外部服务器上,我做数据透视表的时候步骤就不是这样。数据透视表建立的时候,默认用的是同一个工作簿里面的东西,但现在这个最最最最最基础的功能,反而歇菜了。有点瑕疵,还能忍,但是这种关乎到我每天工作而且非常重要的事情,绝对忍不了。所以24小时之内,我在单位和家里的电脑里装了2013,但是又卸载掉了。

天知道2013存在这种致命的缺陷为什么居然还有人在用,而且还把严重bug继承给了2016!微软干这个项目的都是临时工吗?

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