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

前言请看:

0 为什么要关注EXCEL的本质

1 EXCEL是怎样运作的

2 EXCEL里的树形结构

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

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


在讲了excel的树形结构之后,我们终于要进入正题,研究单元格的秘密了。

当我们打开excel的时候,首先映入眼帘的就是一大片格子,这就是单元格。

在excel里,单元格承担了几乎所有的存储信息的功能。你可以往一个单元格里填写你的名字电话,也可以把若干个单元格合并起来,就放一块信息。它还可以根据你的需要改变颜色,调整字体,甚至于可以输入各种计算函数,求和求匹配求重复,包罗万象。

正因为单元格是excel的基础,我们对excel产品的研究,也是从单元格开始。这一块的内容主要涉及到以下几块知识:

1 文本与数字不是一码事
2 数值的“模板”——论数字格式
3 单元格的“外套”——更广度的谈单元格格式
4 合并只是一种“假象”
5 单元格里最小的运算单位——函数

1 文本与数字不是一码事

我们先来讨论一个问题,那就是excel里的数据格式。

对于初学excel的人,最常遇到的一个困扰是,为什么我往单元格里填入一长串数字,譬如我的身份证号码,结果出来的却是科学计数法,更过分的是,这一串数字excel还给我四舍五入了,害得我数据丢失。

也有些人会有疑问说,我明明把很多个数字用sum来求和,怎么结果会跟实际的不一样?结果最后算错了数,被老板追着好一顿狠骂,偏偏我还不知道哪里错了。


些问题我们在一些教程,或者搜索引擎里随便搜搜,都能得到解答——因为你该用文本的时候excel用了数字,该用数字的时候excel帮你选了文本。文本
是不能加减乘除的,数字大到了一定程度就自动变成科学计数法了。如果你查的深入一些,你还会知道,我们可以通过列转换或者text()函数,实现文本与数
字之间的互相转换。

而在这个解答的背后,却藏着excel的一个产品逻辑:文本与数值并不是一码事。

还记得我们上一章节详细介绍的xml树形结构吗?在excel里,单元格里的数字是藏在worksheet文件夹里的每一个sheet1 sheet2 xml文件里的,而文本信息,却是统一藏在xl文件夹里的Sharestring文件夹里,在sheet1 xml里再通过引用编码的形式读取和展现。

譬如说,如果我们往单元格A1里键入一串数字110002,那么我们把这个excel解压缩以后,可以在worksheet文件夹sheet1.xml里找到这样一行代码:

<c r='A1' s='1'><v>110002</v></c>

但是如果我们通过改变其格式的方法,把这个单元格改为文本格式,那么我们只会在sheet1里找到这样的一串数字:

<c r='A1' t='s'><v>0</v></c>

在这里,110002的字样不见了,取而代之的是一个编号,以及一个t=’s’的样式。而我们再回到Sharestring.xml里,就会发现110002被储存在了里面,刚刚提到的那个编号,正是这个编号的一部分。

从excel对数字和文本的不同储存方式,我们就要意识到说,在excel里这两个东西真的不是一回事情。这是从底层的逻辑就决定了的功能和性质的不一样

2 数值的“模板”——论数字格式

文本与数字不是一回事情,那么我们常常看到的日期、科学计数法、货币、百分比等等,又是怎么一回事情呢?

要调这些格式,excel2007以后的版本,是从开始->数字->格式下滑框里选中的,就如下图一样。

当然,我们也可以在右键->设置单元格格式->数字里面,自由地选择我们的定义。

我们很容易会发现,里面的几种格式之间是可以互相转换的。譬如数字40001,你把它改为日期后,就变成了2009/7/7,再改为百分比的话,就成了4000100.00%。不管你怎么改,它的值都是40001,并不会改变。

事实上,在这些格式里,文本是唯一一个不能与其他格式自由转换的东西。它储存方式天然就与数字不一样,在处理起来,自然也格格不入。

那除了文本以外的那些数字格式,又是什么东西呢?

我们继续回归到xml文件。

假设我们在F2单元格键入了2009/7/7,即为日期格式;再在I2单元格键入0.55%,即为百分比格式。

回归到worksheet文件夹里的xml文件,你会看到以下两行代码:

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

跟很多人想象的不一样,在xml文件里我们并不会直接去存储一个“2009/7/7”和“0.55%”的数字,取而代之的是一个40002,和一个浮点数。

excel会通过“s”(style)来控制这个单元格的样式,而这个样式控制了我们在单元格里,是看到日期,还是百分比,还是其他数字格式。

这个样式我们后面还会继续展开讲的,不过我们可以先得出一个总结是:

excel的单元格里,只存储文本和数字两种类型。而对于数字,却有不同的展现方法。这些展现方法被统一叫做数字格式。
由于数字格式与数字的存储在两个地方,所以我们对单元格数字的操作,与其样式没有关系。
由此我们可以说,数字格式是数字的“模板”和“衣服”,它不影响数字的值


补充知识:

1、在众多编程语言里,也是需要严格区分数值和字符的区别的。甚至有些编程语言,在一开始就要界定清楚,变量是整数型的int,还是字符型的string。
excel既然是编程出来的,它也维持了这个一贯的比例。

2、对于数值,计算机可以直接用二进制十进制十六进制去记录它和表达它,但是对于字符串,我们需要用额外的编码进行记录。
常用的编码如UTF-8,ANSI等等。
像xml文件的表头,总会有这么一段指明编码:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
字符串的编码问题,尤其是涉及中文的部分,是我们日常处理文本、网页爬虫、数据清洗中,最头疼的一点。稍稍不留意,就会出现报错。

3、excel在导入外部数据时,我们可以选择不同的编码类型,如下截图:

 
这个编码类型基本针对的是文本。如果选错,就是乱码乱码乱码


本章节excel常问问题:

Excel教程身份证问题一次全搞定

Excel文件打开时所有的单元格格式都变成了日期格式

如何在EXCEL中快速实现文本和数值的相互转换

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

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

[从产品角度学EXCEL 03]-单元格的秘密的更多相关文章

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

    忘记发这里了..补发一下 这是<从产品角度学EXCEL>系列——单元格篇. 前言请看: 0 为什么要关注EXCEL的本质 1 excel是怎样运作的 2 EXCEL里的树形结构 3 单元格 ...

  2. [从产品角度学EXCEL 02]-EXCEL里的树形结构

    这是<从产品角度学EXCEL>系列第三篇. 前言请看: 0 为什么要关注EXCEL的本质 1 excel是怎样运作的 或者你可以去微信公众号@尾巴说数 获得连载目录. 本文仅由尾巴本人发布 ...

  3. [从产品角度学EXCEL 01]-EXCEL是怎样运作的

    这是<从产品角度学EXCEL>系列第二篇. 前言请看:从产品角度学EXCEL-系列0-为什么要关注EXCEL的本质 本文不接受无授权转载,如需转载,请先联系我,非常感谢. 1.EXCEL是 ...

  4. [从产品角度学EXCEL 00]-为什么要关注EXCEL的本质

    前言 Hello 大家好,我是尾巴,从今天开始,在这里连载<从产品角度学EXCEL>的系列文章.本文不接受无授权转载,如需转载,请先联系我,非常感谢. 与世面上的大部分EXCEL教程不同的 ...

  5. Html Table用JS导出excel格式问题 导出EXCEL后单元格里的000412341234会变成412341234 7-14 会变成 2018-7-14(7月14) 自定义格式 web利用table表格生成excel格式问题 js导出excel增加表头、mso-number-format定义数据格式 数字输出格式转换 mso-number-format:"\@"

    Html Table用JS导出excel格式问题 我在网上找的JS把HTML Tabel导出成EXCEL.但是如果Table里的数字内容为0开的的导成Excel后会自动删除0,我想以text的格式写入 ...

  6. EXCEL表格单元格中包含数字英文和汉字,如何自动去掉汉字,保留英文和数字

    EXCEL表格单元格中包含数字英文和汉字,如何自动去掉汉字,保留英文和数字 Function 求数字和字母(对象 As String) '在文本与数字混杂中提取数字和字母   Dim myReg    ...

  7. python读取excel中单元格的内容返回的5种类型

    (1) 读取单个sheetname的内容. 此部分转自:https://www.cnblogs.com/xxiong1031/p/7069006.html python读取excel中单元格的内容返回 ...

  8. asp.net C#取Excel 合并单元格内容

    asp教程.net c#取excel 合并单元格内容读取excel数据,填充dataset// 连接字符串 string xlspath = server.mappath("~/www.11 ...

  9. excel 截取单元格部分内容(从指定位置截取)

      excel 截取单元格部分内容(从指定位置截取) CreateTime--2018年5月28日08:28:46 Author:Marydon 1.情景展示 截取手机号后6位 2.实现 语法说明:r ...

随机推荐

  1. android 利用Handler触发另一个activity方法

    如activityA代码: activityB = new ActivtyB(mHandler,CLOSE_SEARCH_MSG);//新建对像B传递,一个handler和Message,然后在act ...

  2. Quartz框架

    Quartz框架 Quartz 是个开源的作业调度框架,为在 Java 应用程序中进行作业调度提供了简单却强大的机制.Quartz 允许开发人员根据时间间隔(或天)来调度作业.它实现了作业和触发器的多 ...

  3. SpringMVC入门案例及请求流程图(关于处理器或视图解析器或处理器映射器等的初步配置)

    SpringMVC简介:SpringMVC也叫Spring Web mvc,属于表现层的框架.Spring MVC是Spring框架的一部分,是在Spring3.0后发布的 Spring结构图 Spr ...

  4. 4种解决json日期格式问题的办法

    4种解决json日期格式问题的办法   开发中有时候需要从服务器端返回json格式的数据,在后台代码中如果有DateTime类型的数据使用系统自带的工具类序列化后将得到一个很长的数字表示日期数据,如下 ...

  5. 1366分辨率其实是1368分辨率,firefox a标签点击有虚线

    1,通过intel 集成显卡的软件自定义一个1366分辨率,发现是1368的分辨率,@media screen and (max-deivce-width:1368px)才有效果,并且在同事电脑默认分 ...

  6. 【原】Learning Spark (Python版) 学习笔记(一)----RDD 基本概念与命令

    <Learning Spark>这本书算是Spark入门的必读书了,中文版是<Spark快速大数据分析>,不过豆瓣书评很有意思的是,英文原版评分7.4,评论都说入门而已深入不足 ...

  7. JavaScript模板引擎artTemplate.js——是否编码输出html字符

    template.config(name, value)方法用于更改引擎的默认配置. 其中字段escape,类型为boolean,默认为true. 首先,我们不修改配置信息输出一段带有html标签的字 ...

  8. c++设计模式之单例模式下的实例自动销毁(垃圾自动回收器)

    关于C++单例模式下m_pinstance指向空间销毁问题,m_pInstance的手动销毁经常是一个头痛的问题,内存和资源泄露也是屡见不鲜,能否有一个方法,让实例自动释放. 解决方法就是定义一个内部 ...

  9. ABP模块化

    基于Abp模块化.插件化的设计,开发人员可以将自定义的功能以模块的形式集成到项目中. 模块的加载 模块: 插件: 模块及插件的加载路线: 1. 扩展的HttpApplication对象(在Abp.We ...

  10. Smallest Common Multiple

    FCC题目:找出能被两个给定参数和它们之间的连续数字整除的最小公倍数. 范围是两个数字构成的数组,两个数字不一定按数字顺序排序. 例如对 1 和 3 -- 找出能被 1 和 3 和它们之间所有数字整除 ...