热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

[从产品角度学EXCEL03]单元格的秘密

这是《从产品角度学EXCEL》系列——单元格的秘密。前言请看:0为什么要关注EXCEL的本质1EXCEL是怎样运作的2EXCEL里的树形结构或者你可以去微信公众号@尾巴说数获得连载

这是《从产品角度学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里找到这样一行代码:

110002

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

0

在这里,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文件,你会看到以下两行代码:

40002
5.4999999999999997E-3

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

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

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

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


补充知识:

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

2、对于数值,计算机可以直接用二进制十进制十六进制去记录它和表达它,但是对于字符串,我们需要用额外的编码进行记录。
常用的编码如UTF-8,ANSI等等。
像xml文件的表头,总会有这么一段指明编码:

字符串的编码问题,尤其是涉及中文的部分,是我们日常处理文本、网页爬虫、数据清洗中,最头疼的一点。稍稍不留意,就会出现报错。

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

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


本章节excel常问问题:

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

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

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

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

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

技术分享

[从产品角度学EXCEL 03]-单元格的秘密


推荐阅读
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 后台获取视图对应的字符串
    1.帮助类后台获取视图对应的字符串publicclassViewHelper{将View输出为字符串(注:不会执行对应的ac ... [详细]
  • 动态规划算法的基本步骤及最长递增子序列问题详解
    本文详细介绍了动态规划算法的基本步骤,包括划分阶段、选择状态、决策和状态转移方程,并以最长递增子序列问题为例进行了详细解析。动态规划算法的有效性依赖于问题本身所具有的最优子结构性质和子问题重叠性质。通过将子问题的解保存在一个表中,在以后尽可能多地利用这些子问题的解,从而提高算法的效率。 ... [详细]
  • 猜字母游戏
    猜字母游戏猜字母游戏——设计数据结构猜字母游戏——设计程序结构猜字母游戏——实现字母生成方法猜字母游戏——实现字母检测方法猜字母游戏——实现主方法1猜字母游戏——设计数据结构1.1 ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
author-avatar
Cindere丷lla_茹满
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有