1. 程式人生 > >[從產品角度學excel 04]-單元格的“衣服”

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

忘記發這裡了。。補發一下

這是《從產品角度學EXCEL》系列——單元格篇。

前言請看:

或者你可以去微信公眾號@尾巴說數 獲得連載目錄。

本文僅由尾巴本人釋出於特定網站。不接受任何無授權轉載,如需轉載,請先聯絡我,非常感謝。

抱歉之前因為有各種事情,一個多月沒更新了,從今天開始恢復更新。

在前一章節裡,我們通過對excel xml程式碼的閱讀,發現在excel單元格里,文字和數字並不是一回事,而數值模式卻僅僅是excel 數字的一種表現模式。

接 下來,我們繼續研究excel單元格的外在表現,如字型、顏色、邊框、合併單元格等。基本上,每一個單元格的格式都是可以自定義定製的。我們可以隨心所欲 對單元格進行合併、調色、設定大小,就像在一個畫布上自由作畫一般。而這種高度可定製性,也即是excel的魅力所在。

我們接下來要做的,就是透過現象看本質,通過對單元格外觀的研究,來串聯起我們對單元格的理解。

1、由“style”控制的單元格外觀

在上一章節裡,我們在excel裡輸入了一個日期2009/7/7和一個百分數0.55%。

在閱讀excel xml原始檔裡,我們發現它們還是以數值的形式儲存在單元格里,只是“s”引用的數字不對。

<c r="F2" s="12"><v>40002</v></c>
<c r="I2" s="13"><v>5.4999999999999997E-3</v></c>

事實上,我們可以把這個s理解為單元格的樣式(style)。這個單元格里引用的12/13,其實就是代指styles.xml檔案裡,第12/13個xf元素。

第十二個xf--日期
<xf numFmtId="14" fontId="0" fillId="0" borderId="0" xfId="0" applyNumberFormat="1"/>
第十三個xf-日期
<xf numFmtId="10" fontId="0" fillId="0" borderId="0" xfId="0" applyNumberFormat="1" applyAlignment="1">

我們可以看到,在這個xf元素裡,規定了字型fontID、數值格式numFmtId、邊框borderId、對齊方式applyAlignment等等的屬性。而正是這些元素,構成了我們看到的單元格的外觀。

同時有趣的是,在這個xf元素裡,fontID、numFmtId、borderId等等,也是用數字去引用各個相應元素的順序。我們可以在同一個styles.xml檔案裡,找到如:

<font><sz val="9"/><name val="宋體"/><family val="3"/><charset val="134"/><scheme val="minor"/></font>
<fill><patternFill patternType="solid"><fgColor rgb="FFFFFF00"/><bgColor indexed="64"/></patternFill></fill>

等等的元素。xf裡的font=’0’, font=’1’,其實也就是在引用這些元素的順序而已。

形象一點來說,對於單元格的程式碼關係,我們可以畫出這樣的一個關係圖來:

01.png

如果單獨解讀styles.xml的結構,我們又可以畫出這樣的一個關係圖來:

02.jpg

事實上,excel就是靠著這種引用的關係,把各個獨立的元素串通在了一起,形成一個鬆散又有聯絡的產品整體。

2、從“style”到實際應用

在過了一下excel單元格的xml原理以後,我們回到excel的基本介面,來看看工程師是怎樣佈局與分佈這些功能塊的。

我們在excel的“開始”選單裡,可以看到關於單元格格式的大部分功能:

03.png

這些功能,大體上是與excel styles.xml裡,所展示的單元格樣式組合相吻合。

對於剛接觸excel介面的小白來說,去嘗試給單元格變個顏色、居中對齊、合併單元格、換行等等,都是非常容易的一件事情。這些東西,完完整整得都列在了excel的開始介面裡,我們只要耐得下心來去與這些功能塊溝通,就能輕鬆做出像下圖這樣,有多種樣式的單元格。

04.png

這種通過“閱讀”excel的產品介面,從而理解這個產品的設計,是從結果導向理解產品設計原理的最佳渠道。

一般做網頁設計、軟體開發等等,都是從最終結果出發,在設計出原型後,再逐個逐個模組進行開發組裝的。軟體的操作模型,往往凝聚了最多的設計精華。因此,在學習excel時,學會“閱讀”excel的產品介面,可以達到事半功倍的效率。

但是需要注意的是,在讀熟excel表面的功能佈局以後,適當瞭解一下它底層的原理,能夠更好的理解日常操作中會遇到的問題

1)為什麼我們可以選擇性貼上單元格的數值or帶格式貼上?

05.png

06.png

在我們複製單元格的值到另一個單元格時,我們可以選擇要貼上的方式,如只貼上數值,只貼上公式,或者數值公式一起貼上。

在這裡,它是把單元格拆分為了:值、公式、格式、批註等基本部分。這就類似於我們通過xml看到的, value, formula, styles等。就如上文所說,這些部件在excel檔案的xml程式碼層是分開儲存,它們共同構成了單元格。

選擇性貼上,其實就是在告訴電腦,在這一次複製與貼上過程中,我們是否需要把單元格格式引用的數值也複製過來,是否需要引用特定序列的批註,以及是否只複製裡面特定格式的特定部件(如只複製邊框,或者只複製合併條件等等)

理解了單元格是”裝配“而成的,我們就能比較好的理解“選擇性貼上”了。

2)什麼是“格式刷”?

07.png

當我們理解選擇性貼上是讓我們選擇複製一個單元格的哪個元件後,我們也能比較容易理解什麼是單元格的“格式刷”。

本質上,格式刷就是把一個單元格引用的styles數字,原封不動得賦予另一個單元格。通過修改s=’0’,實現格式的變動,而不影響單元格的值。

3)在同一個視窗開啟的excel,共同分享了一套樣式

對於excel2010/2013的使用者,通過開始選單開啟新的excel視窗,可以實現各個excel之間是互相獨立,即使一個excel宕機了,另外一個也能保持正常的狀態。 (細節請見微軟的文章,方法二: https://support.microsoft.com/zh-cn/kb/2227598

00.png

然而我們會發現,通過這種方式開啟的獨立的excel視窗,當我們在其中一個excel裡複製若干單元格到另一個excel時,我們往往只能複製單元格的“值”,而無法把格式/公式一起復制過去。

事 實上,當我們在同一個視窗開啟若干個excel時,我們實際上是在計算機的某一個部分,把若干個excel的樣式組合在一起閱讀與排序。然而對於不同的窗 口開啟的excel,因為它們之間彼此獨立,樣式並沒有隨著複製與貼上而過去,當我們進行不同視窗之間的複製與操作時,我們其實只進行了單元格值的轉變。

4)網頁複製資料時,不同的貼上速度

同理,這個可以解釋如:

從word、html等等複製表格到excel時,往往要花費比較長的時間,或者只能複製值到excel裡。因為excel要進行一個格式的轉化,有時候由於相容問題還失敗了。

當 我們要從網頁複製一個有各種javascript、指令碼超連結的文字到excel單元格時,稍不注意就要花費很長時間(格式轉換)。但是若我們直接在單元 格文字框裡鍵入文字內容,excel就預設只複製單元格的文字,不進行任何轉換。速度會很快,而且不會把各種指令碼都複製進來

譬如我們從京東商品描述頁複製一整塊資訊:

08.png

左側為在單元格里直接貼上,它反映比較慢,進行了很多格式的轉換。
而右側為在文字框裡直接複製網頁文字,最後所有內容都集中在了一個單元格里,以純文字的形式,速度極快。

09.png

10.png

往往當我們不想複製太多格式時,直接轉為文字複製,或者直接在文字框裡鍵入文字,是一個比較快的方法。

綜上,在理解了“格式”僅僅是單元格的一個組成部分後,我們就能比較深刻地解釋一些excel疑難問題。可以從產品角度學習excel了。

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

接下來探討:合併單元格、行與列等等話題。

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

logo.png

相關推薦

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

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

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

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

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

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

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

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

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

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

面試角度完 Kafka

Kafka 是一個優秀的分散式訊息中介軟體,許多系統中都會使用到 Kafka 來做訊息通訊。對分散式訊息系統的瞭解和使用幾乎成為一個後臺開發人員必備的技能。今天`碼哥位元組`就從常見的 Kafka 面試題入手,和大家聊聊 Kafka 的那些事兒。 ![思維導圖](https://magebyte.oss-c

NPOI之Excel——合並單元、設置樣式、輸入公式

images post nbsp size 字體 進行 分享 blog code NPOI之Excel——合並單元格、設置樣式、輸入公式 首先建立一個空白的工作簿用作測試,並在其中建立空白工作表,在表中建立空白行,在行中建立單元格,並填入內容:   //建立空白工

poi導出excel合並單元(包括列合並、行合並)

== location sca and class output posit size etc 1 工程所需jar包如下:commons-codec-1.5.jarcommons-logging-1.1.jarlog4j-1.2.13.jarjunit-3.8.1.jarp

NPOI之Excel——設置單元背景色

背景顏色 workbook contain href excel highlight width height nbsp NPOI Excel 單元格顏色對照表,在引用了 NPOI.dll 後可通過 ICellStyle 接口的 FillForegroundColor

laravel匯出excel並設定單元格式

$list = $this->recommend($request); $data = array(); foreach($list as $k=>$v){ $data[] = array_values($v); $len = count($v); } $header =

Excel如何限制單元只能輸入數字?

日常工作中,excel是最常用來處理資料的工具,有時候在某一列或行中,只能輸入數字,如何進行資料編輯上的限制呢? 方法/步驟 開啟要編輯的excel工作表,圖中表格作為例子,我們要在單價列中輸入價格,這一列只能填入數字。 選定需要輸入單價的所有單元格。在工作欄中,選

PHPExcel讀取excel表格時間單元(轉載)

error_reporting(E_ALL); date_default_timezone_set('Asia/shanghai'); /** PHPExcel_IOFactory */ require_once '../Classes/PHPExcel/IOFactory.php'; $inp

C#實戰017:Excel操作-計算單元時出現的型別轉換問題解決

     今天遇到個問題,在A表中提取值a,在B表提取值b,然後再將a、b的值計算到C表中,由於要牽涉到計算,所以要把獲取的資料進行型別轉換,這裡我們本來是想用 Convert.ToInt32進行強制轉換的,結果在運算的時候出現問題,迴圈一次之後就報錯了,而第

C#實戰016:Excel操作-設定單元屬性

 獲取單元格之後我們需要對單元格進行操作,比如過單元格寬、單元格高、單元格背景色、單元格邊框等等。 App = new Application(); //建立 Excel物件 object missing = Missing.Value; //獲取缺少

java獲得Excel中的單元內容,比直接用excel內部內部公式方便多

public class GetExcelInfo { public static void main(String args[]){ File f=new File("c:/test/00.xls"); try { Workboo

Excel解決"單元不能自動適應大小"問題

正常 正常情況下我們在一個單元格內輸入了幾行內容之後,只要退出編輯狀態,它都會自動變高來適應我們的內容,讓所有的內容都可以被看到。這是我們最想要的效果。 異常 但是如果你手動拉高單元格試一試,這時無論你怎麼編輯,它的高度都是死的,只能手動調,不能自適應。【單元格內換行Alt

thinkphp設定excel表格的單元邊框顏色樣式

thinkphp設定excel表格單元格邊框 //設定單元格邊框 $styleThinBlackBorderOutline = array( 'borders' => array ( 'allborders' => array

poi excel設定合併單元邊框格式

版本3.17 //設定合併單元格的邊框 public static void setBorderForMergeCell(BorderStyle style,int color, CellRangeAddress cra,Sheet sheet){  RegionUtil.se

EXCEL中統計單元內容出現次數

參考網站: https://jingyan.baidu.com/article/7c6fb428dfcc9580642c90ae.html     統計單元格內容出現次數是工作中經常會涉及到的問題。 那麼

java poi 匯入excel時 讀取單元內容的方法 ,其中包含excel中有函式的讀法

public static String getExcelCellValue(Cell cell) { String ret = ""; try { if (cell == null) { ret = ""; } else if (cell.get