1. 程式人生 > >[從產品角度學EXCEL 03]-單元格的祕密

[從產品角度學EXCEL 03]-單元格的祕密

這是《從產品角度學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裡找到這樣一行程式碼:

<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裡這兩個東西真的不是一回事情。這是從底層的邏輯就決定了的功能和性質的不一樣

2 數值的“模板”——論數字格式

文字與數字不是一回事情,那麼我們常常看到的日期、科學計數法、貨幣、百分比等等,又是怎麼一回事情呢?

要調這些格式,excel2007以後的版本,是從開始->數字->格式下滑框裡選中的,就如下圖一樣。

1462460060216.png

當然,我們也可以在右鍵->設定單元格格式->數字裡面,自由地選擇我們的定義。

1462460406632.png

我們很容易會發現,裡面的幾種格式之間是可以互相轉換的。譬如數字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的單元格里,只儲存文字和數字兩種型別。而對於數字,卻有不同的展現方法。這些展現方法被統一叫做數字格式。
由於數字格式與數字的儲存在兩個地方,所以我們對單元格數字的操作,與其樣式沒有關係。
由此我們可以說,數字格式是數字的“模板”和“衣服”,它不影響數字的值

補充知識:

1、在眾多程式語言裡,也是需要嚴格區分數值和字元的區別的。甚至有些程式語言,在一開始就要界定清楚,變數是整數型的int,還是字元型的string。
excel既然是程式設計出來的,它也維持了這個一貫的比例。

2、對於數值,計算機可以直接用二進位制十進位制十六進位制去記錄它和表達它,但是對於字串,我們需要用額外的編碼進行記錄。
常用的編碼如UTF-8,ANSI等等。
像xml檔案的表頭,總會有這麼一段指明編碼:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
字串的編碼問題,尤其是涉及中文的部分,是我們日常處理文字、網頁爬蟲、資料清洗中,最頭疼的一點。稍稍不留意,就會出現報錯。

3、excel在匯入外部資料時,我們可以選擇不同的編碼型別,如下截圖:

1462461693477.png 
這個編碼型別基本針對的是文字。如果選錯,就是亂碼亂碼亂碼

本章節excel常問問題:

歡迎各位在評論裡補充你們看完本章後,想到的相關問題,定期補充上去:)

歡迎掃碼關注我的微信公眾號

logo.png

相關推薦

[產品角度EXCEL 03]-單元祕密

這是《從產品角度學EXCEL》系列——單元格的祕密。 前言請看: 或者你可以去微信公眾號@尾巴說數 獲得連載目錄。 本文僅由尾巴本人釋出於特定網站。不接受任何無授權轉載,如需轉載,請先聯絡我,非常感謝。 在講了excel的樹形結構之後,我們終於要進入正題,研究單元格的祕密了。 當我們

[產品角度excel 04]-單元的“衣服”

忘記發這裡了。。補發一下 這是《從產品角度學EXCEL》系列——單元格篇。 前言請看: 或者你可以去微信公眾號@尾巴說數 獲得連載目錄。 本文僅由尾巴本人釋出於特定網站。不接受任何無授權轉載,如需轉載,請先聯絡我,非常感謝。 抱歉之前因為有各種事情,一個多月沒更新了,從今天開

[產品角度EXCEL 01]-EXCEL是怎樣運作的

這是《從產品角度學EXCEL》系列第二篇。 本文不接受無授權轉載,如需轉載,請先聯絡我,非常感謝。 1、EXCEL是怎麼工作的 在序言裡,我們大致講了一下為什麼要寫這篇文章,以及其整體架構。而從這章開始,我們將簡單看一下EXCEL是什麼,以及它是怎麼工作的。 從EXCEL的定義來說,它是一款用於處

[產品角度EXCEL 00]-為什麼要關注EXCEL的本質

前言 Hello 大家好,我是尾巴,從今天開始,在這裡連載《從產品角度學EXCEL》的系列文章。本文不接受無授權轉載,如需轉載,請先聯絡我,非常感謝。 與世面上的大部分EXCEL教程不同的是,我們並不會太多關注於介紹EXCEL各個功能的細節,譬如表格怎麼搭建、EXCEL有什麼函式等等。這些知識點在各個教程

[產品角度EXCEL 02]-EXCEL裡的樹形結構

這是《從產品角度學EXCEL》系列第三篇。 前言請看: 或者你可以去微信公眾號@尾巴說數 獲得連載目錄。 本文僅由尾巴本人釋出於特定網站。不接受任何無授權轉載,如需轉載,請先聯絡我,非常感謝。 2 EXCEL裡的樹形結構 這段時間,上海街邊的樹上陸陸續續長出了嫩芽,放眼望去有各種層次的綠色,

Excel單元設置下拉選項並填充顏色

bcd 同時 photos spf sel 菜單 完成 d3d -o 如何在Excel的單元格中加入下拉選項 方法/步驟 第一步:打開excel文檔,選中需加入下拉選項的單元格。 第二步:點擊菜單中的“數據”-&g

VBS讀取txt文檔數據查找Excel單元數據符合條件的剪切到工作表2中

msg readline style 新建 font cti pre creat ins Dim fso,f,a set oExcel = CreateObject( "Excel.Application" ) oExcel.Visible = false ‘

如何把excel同一個單元內的文字和數字分別提取出來?

平臺 提取 pre ont 文字 best pan 數字 -1 平臺:excel 2010 目的:把excel同一個單元格內的文字和數字分別提取出來 操作: 假設數據在A1單元格:如果文字在前,B1=left(A1,lenb(A1)-len(A1))可得文字,C1=righ

POI向Excel單元中寫入圖片

final system type imageio drawing use 測試 awt buffer HSSF是POI工程對Excel 97(-2007)文件操作的純Java實現 XSSF是POI工程對Excel 2007 OOXML (.xlsx)文件操作的純Java實

[Excel VBA]單元區域引用方式的小結

定義 遍歷 進行 exc 表單元 orm 一個 off count 在使用ExcelVBA進行編程時,我們通常需要頻繁地引用單元格區域,然後再使用相應的屬性和方法對區域進行操作。所謂單元格區域,指的是單個的單元格、或者是由多個單元格組成的區域、或者是整行、整列等。下面,我們

excel單元區域套用表格樣式以及取消表格樣式

教程 lec 簡單 water 粘貼 自定義 http 51cto 表格樣式 直接套用表格樣式是最簡單快捷的表格美化手段,而且制作出來的表格外觀看起來也很專業。(常見問題)Excel表格樣式的套用與創建如何把內容粘貼到excel單元格時自動套用excel的單元格格式exce

excel套用單元樣式進行美化

怎樣 問題 分享 分享圖片 圖片 log 粘貼 ces 創建 與表格樣式的內容相似,單元格樣式中也包含字體、邊框、填充和數字格式等效果,直接使用能實現快速美化單元格的目的。(常見問題)Excel表格樣式的套用與創建如何把內容粘貼到excel單元格時自動套用excel的單元格

POI操作Excel---給單元新增超連結(HSSF & XSSF & SXSSF)

1、xls格式---(HSSF) HSSFWorkbook workbook = new HSSFWorkbook(); HSSFSheet sheet = workbook.createSheet("新增超連結"); HSSFRow row = sheet.createRow(

python 讀取excel單元的內容

                              python 讀取excel中單元格的內容    excel檔

Java-poi匯入excel合併單元

要匯入的excel示例 一、Action @Action("/import-excel") public void toimport() { String root = ServletActionContext.getSer

JAVA使用POI3.5讀取EXCEL[多單元資料型別處理,支援公式]

本文以2003XLS讀取方式程式碼塊舉例,可以解決單元格CELL資料型別及公式問題。 全過程比較繁瑣恕不例舉。 //獲取公式執行結果處理cell值[以XLS舉例] import org.apache.poi.hssf.usermodel.HSSFCell; im

laravel-excel設定單元格式及ignoreEmpty的用法

laravel匯入匯出excel的外掛:mattwebsite/excel 安裝: composer require mattwebsite/excel  注意:3.0沒有匯入模組只有匯出功能

讓我頭疼一下午的Excel合併單元

Excel匯出常見問題 excel匯出其實不算什麼難事 在網上copy下模板程式碼,填充自己的業務資料,提供一個http介面基本就可以得到你要匯出的資料了。 但是,凡事都有例外,截止今天,excel匯出我遇到的主要是兩大類問題 1、大資料量的excel資料,比如幾十萬條甚至更多的資料匯出 2、因為excel中

模仿Excel設定單元 -- table單個TD的邊框顏色效果

最近有這麼個需求,滑鼠點選td時需要變化td的顏色,由於一般都是適用了·border-collapse: collapse;這個屬性,故相鄰的兩個td共用一個邊框,先看一看設定不同值的效果: 解決思路:直接設定行不通,設定2px又顯得太寬了,不過看了WPS的表

Java poi匯出設定 Excel某些單元不可編輯

 小白的總結,大神勿噴;需要轉載請說明出處,如果有什麼問題,歡迎留言 一、需求: 1、某一列 、某一行或某些單元格不可編輯,其他列可以編輯 二、期間遇到的問題 1、無法設定成不可編輯 2、設定為不可編輯,匯出後發現所有單元格均不可編輯; 原因:createCell();建立單元格後,單元