[從產品角度學EXCEL03]——單元格的秘密
這是《從產品角度學EXCEL》系列——單元格的秘密。
前言請看:
0 為什麼要關注EXCEL的本質
1 excel是怎樣運作的
2 EXCEL里的樹形結構
或者你可以去微信公眾號@尾巴說數 獲得連載目錄。
本文僅由尾巴本人發佈於特定網站。不接受任何無授權轉載,如需轉載,請先聯繫我,非常感謝。
在講了excel的樹形結構之後,我們終於要進入正題,研究單元格的秘密了。
當我們打開excel的時候,首先映入眼帘的就是一大片格子,這就是單元格。
在excel里,單元格承擔了幾乎所有的存儲信息的功能。你可以往一個單元格里填寫你的名字電話,也可以把若干個單元格合併起來,就放一塊信息。它還可以根據你的需要改變顏色,調整字體,甚至於可以輸入各種計算函數,求和求匹配求重複,包羅萬象。
正因為單元格是excel的基礎,我們對excel產品的研究,也是從單元格開始。這一塊的內容主要涉及到以下幾塊知識:
1 文本與數字不是一碼事
2 數值的「模板」——論數字格式 3 單元格的「外套」——更廣度的談單元格格式 4 合併只是一種「假象」5 單元格里最小的運算單位——函數
1 文本與數字不是一碼事
我們先來討論一個問題,那就是excel里的數據格式。
對於初學excel的人,最常遇到的一個困擾是,為什麼我往單元格里填入一長串數字,譬如我的身份證號碼,結果出來的卻是科學計數法,更過分的是,這一串數字excel還給我四捨五入了,害得我數據丟失。
也有些人會有疑問說,我明明把很多個數字用sum來求和,怎麼結果會跟實際的不一樣?結果最後算錯了數,被老闆追著好一頓狠罵,偏偏我還不知道哪裡錯了。
這n些問題我們在一些教程,或者搜索引擎里隨便搜搜,都能得到解答——因為你該用文本的時候excel用了數字,該用數字的時候excel幫你選了文本。文本n是不能加減乘除的,數字大到了一定程度就自動變成科學計數法了。如果你查的深入一些,你還會知道,我們可以通過列轉換或者text()函數,實現文本與數n字之間的互相轉換。
而在這個解答的背後,卻藏著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>n
但是如果我們通過改變其格式的方法,把這個單元格改為文本格式,那麼我們只會在sheet1里找到這樣的一串數字:
<c r=A1 t=s><v>0</v></c>n
在這裡,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> n<c r="I2" s="13"><v>5.4999999999999997E-3</v></c> n
跟很多人想像的不一樣,在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中快速實現文本和數值的相互轉換
歡迎各位在評論里補充你們看完本章後,想到的相關問題,定期補充上去:)
歡迎掃碼關注我的微信公眾號
推薦閱讀:
※2017知乎看山杯 從入門到第二
※大型RPG遊戲的巨量文本是如何寫作並整合的?
TAG:MicrosoftExcel | 文本 | 数据分析 |