[從產品角度學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 | 文本 | 数据分析 |