[从产品角度学EXCEL 01]-EXCEL是怎样运作的
这是《从产品角度学EXCEL》系列第二篇。
前言请看:从产品角度学EXCEL-系列0-为什么要关注EXCEL的本质
本文不接受无授权转载,如需转载,请先联系我,非常感谢。
1、EXCEL是怎么工作的
在序言里,我们大致讲了一下为什么要写这篇文章,以及其整体架构。而从这章开始,我们将简单看一下EXCEL是什么,以及它是怎么工作的。
从EXCEL的定义来说,它是一款用于处理数据的电子表格软件。当我们打开EXCEL时,看到的一大片方格子,就是excel所处理的主要对象——表格(spreadsheet)
基本上EXCEL的所有功能都是围绕着表格进行的。有用于存放数据的一个个单元格,有用来统计和计算单元格数据的excel内置函数,有对表格的一列或一行做的筛选与排序,还有各种数据统计与可视化的功能。
那么,在了解了excel处理的对象是表格及其里面的数据时,你有没有想过,当我们把大批量的数据导入到excel表格时,excel是怎样存储和调用这些数据的呢?它也会是以表格的形式,存储在计算机里,以便我们调用吗?难道开发excel软件的程序员们,在设计时就是在后台画了一个又一个方格子,等着我们按格子填数?
对上述的猜想,答案是否定的。
对于开发excel的人来说,计算机并没有那么五彩缤纷。
那 一个又一个的方格子,是程序员写了很多行代码,把各种功能组合出来以后形成的最终效果。当你回过头来再深入计算机的底层,你会发现每当你操作一个个方格 子,背后有一行行特定的代码解释了你的操作,转换成一串串01010101001给计算机,让它控制各微小电路的开关,最终回馈给你想要的内容。而这些代 码也好,0000111100010101也好,都是纯文本的。
于是我们可以这样说,excel在运作的过程中,在计算机的后台,是各式纯文本的信息在传输与运作。正因如此,当我们想要了解EXCEL是怎么运作的时候,我们可以从解读这些纯文本信息如何存放、解析里,一窥这程序的运作并了解EXCEL的本质。
那么回到我们刚刚的问题,数据在excel里是怎样被存储和调用的,这个自然也可以从纯文本的角度来解释。
我们来看看这个网页里的信息吧:
《微软Office Open XML文件格式介绍》:
https://msdn.microsoft.com/zh-cn/library/ms406049%28v=office.12%29.aspx
简单概括一下上面网页的内容,就是:
office系列的产品,都是用Office Open XML文件格式压缩存储的。
我们日常所用的一个个独立的xlsx文件,其实是一个个压缩文件。它们把若干个XML格式的纯文本文件压缩在一起,而EXCEL就是读取这些压缩文件的信息,最后给我们展现一个完全图形化的电子表格。
譬如说,当我们有一个EXCEL的文件,我们可以把它的后缀名从.xlsx改为.zip,右键解压缩后,就会出现一个文件夹。
文件夹里有_rels, docProps及xl三个文件夹。
在
xl文件夹里存放着这个excel文件的大部分主体内容。如theme文件夹里存放着这个excel的主题设置,sharedStrings里存放着各个
单元格里的信息,而worksheets文件夹里则记录着各个sheet之间如何互相调用。这些,都是以XML的文本格式存放在磁盘里的。
举个例子来说,假如我们在一个工作表里输入以下的字符串:
我们在excel里看到的是一个整齐的表格,但是在xl\sharedStrings.xml里,这些字符是以这样的文本形式被存储的:
excel会在后期用各种代码去读取这些xml里的纯文本文件,最后在图形化界面里以一个整齐的电子表格形式,把这些文本展示出来。
所以实际上,EXCEL对信息的储存,就是把各种各样的信息打上标签以后,以纯文本的形式存储在XML文件里。而当我们需要读取信息时,它通过调取这些文本的关系,把纯文本解码为我们看到的电子表格里的信息。
我们去理解EXCEL怎么工作,其实就是理解这些纯文本信息是什么,它怎么被编译。这样,我们可以更轻松得接触EXCEL的本质,理解它是怎么被设计出来,会有什么功能。
于是,我们终于带出了这一系列教程的重点:从EXCEL的设计本质出发,去学习EXCEL。
我们将沿着这些纯文本代表的信息,以及其分类,逐个去讲述包括:单元格的信息存储、EXCEL功能的应用、图表的特殊存在。敬请期待。
扩展阅读:
1、EXCEL是用C++语言开发的: https://www.zhihu.com/question/20378143
2、计算机是用0、1来存储数据的相关阅读:
一个博客上的解释: http://c.biancheng.net/cpp/html/2839.html
《计算机科学概论》11版 第1章
3、wiki上对EXCEL的定义:https://en.wikipedia.org/wiki/Microsoft_Excel
4、微软Office Open XML文件格式介绍:
https://msdn.microsoft.com/zh-cn/library/ms406049%28v=office.12%29.aspx
另外,正如上面文章所讲的,office open xml文件格式,给开发excel的人带来了太多便利。我们还可以搜一下用其他语言操作excel的人,是怎么利用这个文件格式的。有兴趣的可以先扩展阅读一下
还有什么不能做?——细谈在C#中读写Excel系列文章之一:
http://www.cnblogs.com/jaxu/archive/2012/05/09/2491096.html用 XmlReader 读取 Excel 2007 文件
http://www.cnblogs.com/skyivben/archive/2007/09/23/903582.html
微信公众号:
[从产品角度学EXCEL 01]-EXCEL是怎样运作的的更多相关文章
- [从产品角度学EXCEL 00]-为什么要关注EXCEL的本质
前言 Hello 大家好,我是尾巴,从今天开始,在这里连载<从产品角度学EXCEL>的系列文章.本文不接受无授权转载,如需转载,请先联系我,非常感谢. 与世面上的大部分EXCEL教程不同的 ...
- [从产品角度学excel 04]-单元格的“衣服”
忘记发这里了..补发一下 这是<从产品角度学EXCEL>系列——单元格篇. 前言请看: 0 为什么要关注EXCEL的本质 1 excel是怎样运作的 2 EXCEL里的树形结构 3 单元格 ...
- [从产品角度学EXCEL 03]-单元格的秘密
这是<从产品角度学EXCEL>系列——单元格的秘密. 前言请看: 0 为什么要关注EXCEL的本质 1 EXCEL是怎样运作的 2 EXCEL里的树形结构 或者你可以去微信公众号@尾巴说数 ...
- [从产品角度学EXCEL 02]-EXCEL里的树形结构
这是<从产品角度学EXCEL>系列第三篇. 前言请看: 0 为什么要关注EXCEL的本质 1 excel是怎样运作的 或者你可以去微信公众号@尾巴说数 获得连载目录. 本文仅由尾巴本人发布 ...
- 办公软件-Excel:Excel百科
ylbtech-办公软件-Excel:Excel百科 Microsoft Excel是Microsoft为使用Windows和Apple Macintosh操作系统的电脑编写的一款电子表格软件.直观的 ...
- java的poi技术下载Excel模板上传Excel读取Excel中内容(SSM框架)
使用到的jar包 JSP: client.jsp <%@ page language="java" contentType="text/html; charset= ...
- [Asp.net]常见数据导入Excel,Excel数据导入数据库解决方案,总有一款适合你!
引言 项目中常用到将数据导入Excel,将Excel中的数据导入数据库的功能,曾经也查找过相关的内容,将曾经用过的方案总结一下. 方案一 NPOI NPOI 是 POI 项目的 .NET 版本.POI ...
- c#导出Excel 使用EXCEL进程
private void exportExcel(string filename, string path,string title, List<ArchivedWcsTask> wcst ...
- gridview数据导出到word和excel以及excel的导入
using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI ...
随机推荐
- 使用httpclient发送get或post请求
HttpClient 是 Apache Jakarta Common 下的子项目,可以用来提供高效的.最新的.功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建 ...
- QString::arg的用法
1.用法示例1 String str = QString("%1 %2 %3 %4 %5 %6 %7 %8 %9 %10 %11").arg("1"," ...
- Win10全屏看视频时任务栏不隐藏
解决办法: 1.对任务栏鼠标右键点击,选择"任务管理器" 2.在进程选项下找到Windows进程中的Windows资源管理器 3.对Windows资源管理器鼠标右键,选择重新启动
- 从一道面试题来认识java类加载时机与过程
说明:本文的内容是看了<深入理解Java虚拟机:JVM高级特性与最佳实践>后为加印象和理解,便记录了重要的内容. 1 开门见山 以前曾经看到过一个java的面试题,当时觉得此题很简单,可 ...
- Jmeter添加硬件监控
首先非常感谢介绍jmeter的博主,多谢您. 看了之后受益匪浅啊~~ 根据这篇博文的说法,首先进入网站 点击Jmeter-plugins.org 点击downloads 这两个都可以下载,反正都一样. ...
- LDR、STR指令
LDR(load register)指令将内存内容加载入通用寄存器 STR(store register)指令将寄存器内容存入内存空间中 #define GPJ0CON 0xE0200240 _sta ...
- salt源码安装软件和yum安装软件
上面简单列出了源码安装的sls文件书写思路. 涉及到一些固定的思路:如, 1,拷贝 解压安装时候需要依赖tar.gz存在 如果已安装则无需再次安装. 2,启动脚本 加入chk时候需要文件存在,如果已添 ...
- [翻译] Android是怎样绘制视图的
原文:How Android Draws Views 当一个Activity获取到焦点的时候,它的布局就开始被绘制. 绘制的过程由Android framework处理.但布局层级的根节点必须由Act ...
- canvas钟表
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- UICollectionView中使用 UICollectionViewFlowLayout进行布局(模仿苹果相册)
现在都知道,在初始化UICollectionView的时候,必须要传入一Layout对象,进行布局管理.这也是collectionview和tableview的明显区别,通过collectionvie ...