2020-06
3

默认理解为数组公式

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

昨天我才发现,我把Excel文件升级完以后,我的搭档没有用过。因为连续好长一段时间,单位的作业时间都超长,每天都在正常办公室下班时间之前,还没结束。通常会折腾到晚上11点多,运气好的话,可能晚上七八点就结束了,反正总的来说,在我升级完我自己的文件以后,一直都只是我一个人使用。我在三台电脑上用过那个文件。我用的是同一个软件打开,用的是Microsoft 365。其中两台电脑是台式机,搭配的是64位的Win7系统,而另外一个是笔记本电脑,搭配的是64位Win10。二者是有区别的,因为某些功能只有在Win10系统才有更新,但到底具体是些什么,至今我还没搞清楚。自从用了Microsoft 365以后,我也说不准那个软件会什么时候给我更新,比如说晚上回到宿舍,单位的作业很晚才结束,我赶着要把数据搞完然后睡觉,但偏偏在那个时候,打开电脑,打开Microsoft 365,却告诉我他正在升级。这种状况很让人抓狂,因为晚上10-11点的时候,单位宿舍的网速可能非常慢。如果Office在那个时候进行升级,而那个安装包又非常大,这将是毁灭性的。所以下次大概我要给软件设置提醒我升级,但不能为我自动升级,应该由我去选择升级时间,这比开电脑就被吓一跳好多了。理论上说Win7系统上的Microsoft 365对应的是2016的功能,Win上的365对应的是2019的功能,但无论是Win7还是Win10,我的365还是会比传统的Office 2016高级那么一点点,至于高级在哪里,我不知道。

Microsoft是个神奇的存在。office软件不知道从什么版本开始都有32跟64位的版本,365貌似给我的安装包都是32位的版本,但是365在不同的Windows系统下面又有其他分支。

大体上我觉得,Win7下的Microsoft 365,应该跟Office 2016差不多吧。但昨天的实际遭遇告诉我,不是那回事。昨天我才发现,在我三台电脑上都开得好好的公式,在我的搭档的电脑上几乎所有地方都显示错误。这不可能吧!一开始,我怀疑是SUMIFS不能在2016上使用,但搜索过后发现那个函数已经在Office 2016上通行了,那到底是什么呢?结果发现原来是我搭档Excel的选项设置里面勾选了引用空单元格时显示错误,为什么居然有这种脑残设定呢?我用了这么多年的office,从来没遇到过这种事,昨天之前我甚至不知道原来还有个这样的设置。把那个勾去掉以后,还有不少公式的地方显示错误,点击那些公式后发现,在我的电脑上没有表示数组公式的地方,在她的电脑上居然默认成了数组公式,那些东西根本不是数组变成了数组,当然会出状况。所以解决办法也很简单,重新把那个公式确定变回普通公式,所有数据都回来了。为什么在不同的电脑上普通公式会自动变成数组公式呢?这个问题之前我也曾经遇到过,但没有让我的公式全部失效,所以我也就没有理会了,但我发现在某些函数前会多了个@的标志,至于那个东西是干什么的,我不知道。

带着这个问题,我立马去搜索。先是去百度,接着是去必应,最后我还是在Google找到了答案12。原来在Microsoft 365里,默认把所有公式都认为是数组公式,虽然没有很明确地标注出来。不是所有函数都会被误解,但一些包含相对变量的函数就会出现这种毛病,比如说公式里大量使用的indirect。这些公式在数组与非数组里理解是不一样的。当我的搭档在她电脑上把数组公式转为普通公式以后,在我的电脑上,发现数组公式前面多了个@,而这个东西。就是为了让老office兼容,在365里面有没有@,效果完全一致,但在老office里面,多了个@,就说明这个不是数组公式。

我不知道为什么office的进化经常会在一些相对引用与绝对引用里纠缠不清,之前有数据透视表的数据源变成绝对引用,搞死所有人。现在又有偷偷地把公式默认为数组公式。让老版本的软件看到一大片数据错误。他们在这个默默改变的的时候,其实完全可以推荐用户另存为别的Excel格式,通过转换格式把公式修正为老版本可以理解。

这个默认数组公式的问题我没见过中文解释,是不是因为谁用Microsoft 365中文版的人还不够多呢?

2020-04
29

半桶水的烦恼

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

要实现某个功能,有非常多的做法,到底要怎么做才能避免出错呢?Excel的函数非常牛逼,把那些公式弄好了,简直就是天下无敌的节奏。公司的原理很简单,但是套用起来做着做着就傻瓜了。有可能是手贱,标点符号按错了,更大的可能性是单元格引用出错。我已经不记得用Office 2003的时候是个什么状态了。反正在Office 365下面,如果在一个工作簿里面应用了别的工作表,把带公式的工作表复制到另外一个工作簿里的时候,那些引用的单元格会以绝对地址的形式继续指向原来工作簿的某个表。显然,如果只是指向本工作簿的话,找不到地址,顶多显示错误,但是如果那东西继续指向原表,会引发很多问题。因为那是一个绝对地址,即便你把工作放在同一个文件夹下面,还是不能解决问题。恐怖的绝对地址会导致云同步、在多人协作的时候,发生状况。为什么Office 2003下就没有绝对地址和相对地址这个烦恼呢?在Office 365下,数据透视表的绝对地址算是终于改正过来了,但我想不到公式居然也这样。这是一个令人非常崩溃的事情!如果工作表里面的公式是大量的,这将是一个灭门灾难。如果某一个工作表里面的公式是大量的,而另外一个工作表里面的源数据也是大量的,外加还有一个数据透视表指向了源数据。无论是动哪一个,都会导致另外的那个上的工作推倒重来。为什么就不能设置某个工作簿里面的链接采用相对工作簿内的连接,而不使用外联呢?停止了外联,就意味着那个单元格的数据从一个动态的东西变成了静态的。绝对地址这个问题,在云同步、在多设备协作的情况之下,根本是无法操作的,为什么微软会犯如此低级的错误呢?数据透视表的傻逼是发生在Office 2010版之后的。公式上的傻逼,之前貌似我还没遇到过。可能并不是因为不存在,而纯粹是因为我没有用到这种功能。

但Excel不能一次性满足我所有想要的东西的时候,我就会想到要不要自己写个脚本解决一切难题。人想得到的逻辑,用脚本都能实现,前提是必须考虑出一种能够包容所有例外的规则。如果不能包含特殊情况,脚本写出来是毫无意义的,因为最终还是得人手去加工,这非常不科学。所以一定程度上,我更喜欢用数据透视表,自动处理那些东西,而不是手动设置公式。设置公式理论上是一个一劳永逸的过程,但实际上只要你手动在上面修改了一些东西以后,就像蝴蝶效应一样,后果不堪设想。某一次的修改,会导致往后半天都找不出原因。如果用数据透视表的话,双击单元格就会到达最基础的那个数据。查错是非常简单的,但是,用了公式以后,然后你又因为某次犯傻在某个你以为设置了公式的单元格里面输入了常数,那将导致一次令人绝望的debug。不要问我为什么会知道……

与其让我查找错误,还不如让我总结特点制定规则,让他们不犯错误。当然,不犯错误,是根本不可能的。

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-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 - 2020 我的天 | Theme by xrspook | Power by WordPress