• [从产品角度学excel 04]-单元格的“衣服”


    忘记发这里了。。补发一下

    这是《从产品角度学EXCEL》系列——单元格篇。

    前言请看:

    0 为什么要关注EXCEL的本质

    1 excel是怎样运作的

    2 EXCEL里的树形结构

    3 单元格的秘密(文本/数字篇)

    或者你可以去微信公众号@尾巴说数 获得连载目录。

    本文仅由尾巴本人发布于特定网站。不接受任何无授权转载,如需转载,请先联系我,非常感谢。


    抱歉之前因为有各种事情,一个多月没更新了,从今天开始恢复更新。

    在前一章节里,我们通过对excel xml代码的阅读,发现在excel单元格里,文本和数字并不是一回事,而数值模式却仅仅是excel 数字的一种表现模式。

    接 下来,我们继续研究excel单元格的外在表现,如字体、颜色、边框、合并单元格等。基本上,每一个单元格的格式都是可以自定义定制的。我们可以随心所欲 对单元格进行合并、调色、设置大小,就像在一个画布上自由作画一般。而这种高度可定制性,也即是excel的魅力所在。

    我们接下来要做的,就是透过现象看本质,通过对单元格外观的研究,来串联起我们对单元格的理解。

    1、由“style”控制的单元格外观

    在上一章节里,我们在excel里输入了一个日期2009/7/7和一个百分数0.55%。

    在阅读excel xml源文件里,我们发现它们还是以数值的形式储存在单元格里,只是“s”引用的数字不对。

    <c r="F2" s="12"><v>40002</v></c>
    <c r="I2" s="13"><v>5.4999999999999997E-3</v></c>

    事实上,我们可以把这个s理解为单元格的样式(style)。这个单元格里引用的12/13,其实就是代指styles.xml文件里,第12/13个xf元素。

    第十二个xf--日期
    <xf numFmtId="14" fontId="0" fillId="0" borderId="0" xfId="0" applyNumberFormat="1"/>
    第十三个xf-日期
    <xf numFmtId="10" fontId="0" fillId="0" borderId="0" xfId="0" applyNumberFormat="1" applyAlignment="1">

    我们可以看到,在这个xf元素里,规定了字体fontID、数值格式numFmtId、边框borderId、对齐方式applyAlignment等等的属性。而正是这些元素,构成了我们看到的单元格的外观。

    同时有趣的是,在这个xf元素里,fontID、numFmtId、borderId等等,也是用数字去引用各个相应元素的顺序。我们可以在同一个styles.xml文件里,找到如:

    <font><sz val="9"/><name val="宋体"/><family val="3"/><charset val="134"/><scheme val="minor"/></font>
    <fill><patternFill patternType="solid"><fgColor rgb="FFFFFF00"/><bgColor indexed="64"/></patternFill></fill>

    等等的元素。xf里的font=’0’, font=’1’,其实也就是在引用这些元素的顺序而已。

    形象一点来说,对于单元格的代码关系,我们可以画出这样的一个关系图来:

    01.png

    如果单独解读styles.xml的结构,我们又可以画出这样的一个关系图来:

    02.jpg

    事实上,excel就是靠着这种引用的关系,把各个独立的元素串通在了一起,形成一个松散又有联系的产品整体。

    2、从“style”到实际应用

    在过了一下excel单元格的xml原理以后,我们回到excel的基本界面,来看看工程师是怎样布局与分布这些功能块的。

    我们在excel的“开始”菜单里,可以看到关于单元格格式的大部分功能:

    03.png

    这些功能,大体上是与excel styles.xml里,所展示的单元格样式组合相吻合。

    对于刚接触excel界面的小白来说,去尝试给单元格变个颜色、居中对齐、合并单元格、换行等等,都是非常容易的一件事情。这些东西,完完整整得都列在了excel的开始界面里,我们只要耐得下心来去与这些功能块沟通,就能轻松做出像下图这样,有多种样式的单元格。

    04.png

    这种通过“阅读”excel的产品界面,从而理解这个产品的设计,是从结果导向理解产品设计原理的最佳渠道。

    一般做网页设计、软件开发等等,都是从最终结果出发,在设计出原型后,再逐个逐个模块进行开发组装的。软件的操作模型,往往凝聚了最多的设计精华。因此,在学习excel时,学会“阅读”excel的产品界面,可以达到事半功倍的效率。

    但是需要注意的是,在读熟excel表面的功能布局以后,适当了解一下它底层的原理,能够更好的理解日常操作中会遇到的问题

    1)为什么我们可以选择性粘贴单元格的数值or带格式粘贴?

    05.png

    06.png

    在我们复制单元格的值到另一个单元格时,我们可以选择要粘贴的方式,如只粘贴数值,只粘贴公式,或者数值公式一起粘贴。

    在这里,它是把单元格拆分为了:值、公式、格式、批注等基本部分。这就类似于我们通过xml看到的, value, formula, styles等。就如上文所说,这些部件在excel文件的xml代码层是分开储存,它们共同构成了单元格。

    选择性粘贴,其实就是在告诉电脑,在这一次复制与粘贴过程中,我们是否需要把单元格格式引用的数值也复制过来,是否需要引用特定序列的批注,以及是否只复制里面特定格式的特定部件(如只复制边框,或者只复制合并条件等等)

    理解了单元格是”装配“而成的,我们就能比较好的理解“选择性粘贴”了。

    2)什么是“格式刷”?

    07.png

    当我们理解选择性粘贴是让我们选择复制一个单元格的哪个组件后,我们也能比较容易理解什么是单元格的“格式刷”。

    本质上,格式刷就是把一个单元格引用的styles数字,原封不动得赋予另一个单元格。通过修改s=’0’,实现格式的变动,而不影响单元格的值。

    3)在同一个窗口打开的excel,共同分享了一套样式

    对于excel2010/2013的用户,通过开始菜单打开新的excel窗口,可以实现各个excel之间是互相独立,即使一个excel死机了,另外一个也能保持正常的状态。 (细节请见微软的文章,方法二: https://support.microsoft.com/zh-cn/kb/2227598

    00.png

    然而我们会发现,通过这种方式打开的独立的excel窗口,当我们在其中一个excel里复制若干单元格到另一个excel时,我们往往只能复制单元格的“值”,而无法把格式/公式一起复制过去。

    事 实上,当我们在同一个窗口打开若干个excel时,我们实际上是在计算机的某一个部分,把若干个excel的样式组合在一起阅读与排序。然而对于不同的窗 口打开的excel,因为它们之间彼此独立,样式并没有随着复制与粘贴而过去,当我们进行不同窗口之间的复制与操作时,我们其实只进行了单元格值的转变。

    4)网页复制数据时,不同的粘贴速度

    同理,这个可以解释如:

    从word、html等等复制表格到excel时,往往要花费比较长的时间,或者只能复制值到excel里。因为excel要进行一个格式的转化,有时候由于兼容问题还失败了。

    当 我们要从网页复制一个有各种javascript、脚本超链接的文本到excel单元格时,稍不注意就要花费很长时间(格式转换)。但是若我们直接在单元 格文本框里键入文字内容,excel就默认只复制单元格的文本,不进行任何转换。速度会很快,而且不会把各种脚本都复制进来

    譬如我们从京东商品描述页复制一整块信息:

    08.png

    左侧为在单元格里直接粘贴,它反映比较慢,进行了很多格式的转换。
    而右侧为在文本框里直接复制网页文字,最后所有内容都集中在了一个单元格里,以纯文本的形式,速度极快。

    09.png

    10.png

    往往当我们不想复制太多格式时,直接转为文本复制,或者直接在文本框里键入文字,是一个比较快的方法。

    综上,在理解了“格式”仅仅是单元格的一个组成部分后,我们就能比较深刻地解释一些excel疑难问题。可以从产品角度学习excel了。


    欢迎各位在评论里补充你们看完本章后,想到的相关问题,定期补充上去:)

    接下来探讨:合并单元格、行与列等等话题。

    欢迎扫码关注我的微信公众号

    logo.png

  • 相关阅读:
    XHTML基础问答-给初学者
    动态改变表格的行数列数(添加表格)
    记录的添加,修改,删除等操作,??
    数据绑定
    优秀ASP.NET程序员修炼之路
    关于Command的ExecuteNonQuery(),ExecuteScalar(),ExecuteReader方法的区别
    MyEclipse7.5注册
    实用JavaScript代码库
    解决数据库录入中文数据乱码问题
    Oracle占用8080端口问题的解决
  • 原文地址:https://www.cnblogs.com/weibaar/p/5628592.html
Copyright © 2020-2023  润新知