這是《從產品角度學EXCEL》系列——單元格的祕密。html
前言請看:編程
0 爲何要關注EXCEL的本質網頁爬蟲
1 EXCEL是怎樣運做的微信
2 EXCEL裏的樹形結構編程語言
或者你能夠去微信公衆號@尾巴說數 得到連載目錄。函數
本文僅由尾巴本人發佈於特定網站。不接受任何無受權轉載,如需轉載,請先聯繫我,很是感謝。post
在講了excel的樹形結構以後,咱們終於要進入正題,研究單元格的祕密了。字體
當咱們打開excel的時候,首先映入眼簾的就是一大片格子,這就是單元格。網站
在excel裏,單元格承擔了幾乎全部的存儲信息的功能。你能夠往一個單元格里填寫你的名字電話,也能夠把若干個單元格合併起來,就放一塊信息。它還能夠根據你的須要改變顏色,調整字體,甚至於能夠輸入各類計算函數,求和求匹配求重複,一應俱全。搜索引擎
正由於單元格是excel的基礎,咱們對excel產品的研究,也是從單元格開始。這一塊的內容主要涉及到如下幾塊知識:
1 文本與數字不是一碼事
2 數值的「模板」——論數字格式
3 單元格的「外套」——更廣度的談單元格格式
4 合併只是一種「假象」
5 單元格里最小的運算單位——函數
咱們先來討論一個問題,那就是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裏這兩個東西真的不是一回事情。這是從底層的邏輯就決定了的功能和性質的不同。
文本與數字不是一回事情,那麼咱們經常看到的日期、科學計數法、貨幣、百分比等等,又是怎麼一回事情呢?
要調這些格式,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的單元格里,只存儲文本和數字兩種類型。而對於數字,卻有不一樣的展示方法。這些展示方法被統一叫作數字格式。
因爲數字格式與數字的存儲在兩個地方,因此咱們對單元格數字的操做,與其樣式沒有關係。
由此咱們能夠說,數字格式是數字的「模板」和「衣服」,它不影響數字的值
補充知識:
一、在衆多編程語言裏,也是須要嚴格區分數值和字符的區別的。甚至有些編程語言,在一開始就要界定清楚,變量是整數型的int,仍是字符型的string。
excel既然是編程出來的,它也維持了這個一向的比例。
二、對於數值,計算機能夠直接用二進制十進制十六進制去記錄它和表達它,可是對於字符串,咱們須要用額外的編碼進行記錄。
經常使用的編碼如UTF-8,ANSI等等。
像xml文件的表頭,總會有這麼一段指明編碼: <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
字符串的編碼問題,尤爲是涉及中文的部分,是咱們平常處理文本、網頁爬蟲、數據清洗中,最頭疼的一點。稍稍不留意,就會出現報錯。
三、excel在導入外部數據時,咱們能夠選擇不一樣的編碼類型,以下截圖:
這個編碼類型基本針對的是文本。若是選錯,就是亂碼亂碼亂碼
本章節excel常問問題:
歡迎各位在評論裏補充大家看完本章後,想到的相關問題,按期補充上去:)
歡迎掃碼關注個人微信公衆號