1. 程式人生 > >[從產品角度學EXCEL 02]-EXCEL裡的樹形結構

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

這是《從產品角度學EXCEL》系列第三篇。

前言請看:

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

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

2 EXCEL裡的樹形結構

這段時間,上海街邊的樹上陸陸續續長出了嫩芽,放眼望去有各種層次的綠色,格外好看。我們今天的話題,恰好也與樹有關。只不過,樹都是往天空伸展枝葉的,而我們這裡討論的‘樹’,卻是由根部出發,逐行逐行往下延展、伸展。

還記得上一個章節裡,我們對一個excel檔案解壓縮後,發現了若干個xml檔案嗎?

xml本質上是一種使用樹形結構儲存資訊的文件。它由一個根節點root

開始,逐層逐層長枝節,並給每一層都打了個標籤,讓xml解析器可以快速定位資訊的內容。而每一層以及每一個底部的節點,都是這些資訊的一個分類屬性。我們瞭解了它們的屬性和層級,也就瞭解這顆結構樹長成什麼樣子。

正因為xml的結構與層級是如此重要,在進一步講單元格之前,我們很有必要先剖析看看excel xml樹的結構,從大體上再來理解一下excel儲存檔案的方式。

需要注意的是,這一章節大概是整個系列裡涉及最多程式設計的章節了。如果各位對程式設計不是特別感興趣,可以先跳過這一節,去看後面的內容。不過按照我個人的經驗來說,不管你是用excel做一些簡單的資料處理,還是想要在資料分析行業裡走得穩妥一些,瞭解瞭解程式設計,只會有好處而沒有壞處。

尤其是程式設計的一些思想,如妥善地設計介面,分隔各個功能塊等,即使你用excel處理資料,這些也對你十分有好處。

言歸正傳吧。我們回過頭來再看看excel解壓縮以後的xml檔案。

讓我們隨意開啟一個xml檔案,一串串密密麻麻的字元就這樣跳了出來。

2-01.png

對於不熟悉xml架構的人來說,我們只會看到眼花繚亂的括號,等號,引號。但是如果你對xml有點理解,你就會知道,這一系列的標點符號框起了一個個xml的資料結構。

對於xml來說,每一個層級都是由<標籤 屬性=ABC>內容資訊</標籤>構成的。有的內容資訊裡又會再次巢狀一層標籤層級,重重相疊,從根部開始向下延展出了無數枝葉,構成了一棵看似錯綜複雜,卻是層次分明的xml樹。人們只要定位到某一個枝葉,就可以迅速把這個枝葉下的特定資訊取出來。

而要搞懂這棵xml樹長什麼樣子,首先就要搞懂說這棵樹是有哪些層級,各個層級叫什麼,有什麼內容。

但是各位再回顧看看上面的截圖,一長串一長串的程式碼,你當然可以一個個去判斷說,啊,根標籤從worksheet開始,下面有selection層級,有f層級等等,但是這樣子做,不僅低效,而且會有遺漏。

請各位在學習excel時,隨時記住一個原則,那就是可以不要手工去做的事情,就不要手工去做。寧願自己腦子廢點腦力構思最優方法,也不要直接就開始機械的作業。

那麼,在這裡,面臨這個要人工一個個看標籤的艱鉅任務時,我們該如何是好呢?

在這裡跟大家再普及一個概念的是,xml嘛,除了微軟在用於office系列文件儲存格式以外,它還廣泛應用於各種網頁設計領域。而在網頁獲取資訊這一塊,我們天然有很多工具可以通過讀取html或者xml原始碼,解析它們的結構,進行資料提取工作(高階點叫法即網路爬蟲

所以對於這裡的excel xml原始檔,我們自然可以應用各種爬蟲工具,把xml的框架給找出來。

我 用的比較熟的應該是R語言的rvest包爬蟲了,查了一下它的文件,有一個叫xml_structure的,可以直接把xml檔案的標籤層次給讀出來,而 xml_nodes/xml_attr等,又可以把裡面特定的標籤內容給分層讀出來。那麼寫一段程式碼,幫我把excel的xml原始檔裡的層級與內容弄出 來,那就省了我很大的心力啦^^

因為R語言程式碼並不是我們的重點,所以我把原始碼放在文章末尾的擴充套件閱讀裡了,有需要的可以去看看,也可以用其他語言寫寫。有的時候只要學會一點點的程式設計,就能大大的改善各位的工作效率。要用好工具而不是被工具玩,是我希望在這系列excel教程裡告訴大家的一個點。

那麼言歸正傳。請各位看看下面這個用R語言跑出來的csv檔案截圖。

2-02.png

左列是我們的標籤名,右列是我們標籤裡面包含的文字。通過這個檔案,我們就可以很容易知道各個標籤裡存放了什麼文字資訊。我們會發現row下面是一串串的c/v/f。而c與v的資訊幾乎完全一樣。

另外,在r裡,我們可以通過xml_structure輸出xml檔案的結構。這兩個結合起來,我為各位繪製了一張sheet1.xml的樹形結構圖:

2-03.png

各 位可以看到,在worksheet資料夾裡的sheet1.xml,是在sheetdata裡按照row為標籤層級,存放了若干行的資料。而行又以 c(cell)為導向,存放了單元格的v (value)和f(函式)。有多少行,在sheet1.xml裡就有多少row,一個row有若干個有效單元格,就會有若干個c。

從這個角度看excel,會不會對excel的產品設計層次有了進一步的理解呢?

另外,上面的截圖沒有出示的一點是,在worksheet這個資料夾裡,數字是直接存在各個sheetxxx.xml裡的,而字元類文字,卻是單獨存放在外面的SharedString.xml裡。

嘿嘿,數字和文字的存放格式不一樣,各位想到了什麼?有沒有虎軀一震,想到了excel裡因為數字和文字的不同,帶來的各種不便?

在前面囉嗦完為什麼要寫這個系列,以及excel是怎麼工作以後,我們終於把拼圖最重要的一塊——解讀xml補上了。那麼接下來,我們終於要進入從產品角度看excel的正題。

下一章節:單元格背後的祕密,敬請期待:)

以及順手打個小廣告,本系列預計每週更新一章,工作很忙或者沒有靈感的時候可能會兩週更新一章。每次都會在我的微信公眾號上推送所有章節,歡迎關注我的公眾號。

當然,如果各位等不及更新,想更早了解後續內容的話,歡迎私下聯絡我。上海地區提供有償私教:)

擴充套件閱讀

R語言解析XML原始碼:

setwd("~/excel/")
library(rvest)
#程式碼用於《從產品角度學EXCEL》系列文章,XML解析
# read xml in zip files
get_xmllist<-function(access){
        list<-list.files(access,full.names=TRUE,pattern = "xml$",recursive = TRUE)
        list_name<-gsub(as.character(access),"",list)
        list_name<-gsub("\\/|\\.|\\[|\\]","-",list_name)
        list_name<-gsub("\\-\\-","-",list_name)
        list<-data.frame(list,list_name,stringsAsFactors = FALSE)
        list
}
# read xml structure
get_structure<-function(xmlfile){
        data<-xml(xmlfile,encoding="UTF-8")
        data<-data %>% html_nodes("*")
        output<-cbind(node_names=data %>% html_tag(),
                   node_text=data %>% html_text())
        output<-data.frame(output)
        output
        
}
write_result<-function(dataframe,name){
        write.csv(dataframe,paste0("./Output/",name,".csv"),row.names=FALSE)
}
#use these three function
xml_list<-get_xmllist("./sample u.xlsx/")
for (i in 1:nrow(xml_list)){
        data<-get_structure(xml_list$list[i])
        write_result(data,xml_list$list_name[i])
        
}

#write the structure
xml_structure(html(xml_list$list[8]))

微信公眾號:

logo.png

相關推薦

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

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

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

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

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

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

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

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

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

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

面試角度完 Kafka

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

零開始HTTP (二) HTTP結構與基礎

現象 encode 伸縮 協議 for 服務端 例如 lis 格式 HTTP結構與基礎 這篇文章中,我們主要針對HTTP\1.1版本進行介紹 請求報文和響應報文 請求報文 請求報文由客戶端發出,其格式為: 請求方法 請求URI 協議版本 可選的請求首部字段和內容實體,

零開始視覺化資料分析師就業課程(Excel、 MySQL、Power BI、Tableau、python、R)

課程目錄: 第1章: 資料分析師先導篇 任務1: 資料分析的概念 任務2: 資料分析的作用 任務3: 資料分析六部曲 任務4: 資料分析六部曲2 任務5: 資料分析的三大誤區 任務6: 資料分析師的發展和職業要求 任務7: 資料分析師的基本素質 第2章: Ex

產品經理的角度幸運快三源碼開發,看手機端語音助手

理解 以及 體驗 意圖 參考 自然語言理解 入門 意思 文章 本文從PM的角度對手機端語音助手進行了思考,包括當前市場情況、PM在設計產品時的思路等。 從產品經理的角度,看手機端語音助手 一、手機端語音助手的現狀 蘋果siri的出現,帶動了手機端智能助手的發展,如今,蘋果s

零開始產品第七篇:常用的功能模組有哪些

一個系統中都有哪些模組組成,對於初學者來說,可能還不能夠區分的很清楚。 但是仔細回想一下,是不是幾乎所有的功能都有登入和註冊的功能?   啟動頁,Banner,輪播,個人中心,關於我們,意見反饋,設定,忘記密碼,支付,地圖,等等等等。 這些都是屬於一個系統裡很常見的功能

零開始產品第六篇:更強大的測試,自動化測試和效能測試

本篇為【從零開始學產品】系列課第1章第5節 歡迎到公眾號選單欄,獲取產品經理課程更多資料     “測試就是拿點滑鼠在電腦上瞎點,或者是用手機隨便戳幾下麼?” “不,是有計劃有意圖的測試,比如說,邊界測試,隨機測試,端到端測試等等。

零開始產品第五篇:三個環境,開發、測試和線上

本篇為【從零開始學產品】系列課第1章第4節 歡迎到公眾號選單欄,獲取產品經理課程更多資料     上節課我們說到了,Bug的生命週期,而只有在測試環境和線上環境發現的Bug,才會被稱之為Bug。 倒底什麼是測試環境,什麼是線上環境,

零開始產品第四篇:BUG的生命週期

本篇為【從零開始學產品】系列課第1章第3節 歡迎到公眾號選單欄,獲取產品經理課程更多資料   “從開始到死亡,這是世間萬物的宿命嗎?” “是的,連Bug都如此。”   --摘自【修真神界】第三千六百五十一章 為了女神寫Bug

利用poijsp頁面匯出報表到excel

轉自一個大牛的匯入匯出Execl原理::https://blog.csdn.net/chenfeiguo/article/details/76762251 轉自一個大牛的如何從資料庫匯出:https://blog.csdn.net/jhon_03/article/details/77488895

計算機網路02--零開始

1.學習目標      物理層的任務      幾種常用的通道複用技術      幾種常用的寬頻接入技術 2.物理層的任務 為資料端裝置提供傳送資料的通路 傳輸資料 完成物

零開始產品第一篇:概述

 如何從零基礎成長為一個獨立完成專案的產品經理呢?      我們認為一個系統化、規範化、可執行的循序漸進的學習框架      比一開始就談痛點、談風口、談突破的理論性文章      要更加適合培養零基礎的人成長為一名初級產品經理      經過修真院三年多時間的

Django 使用xlwt實現後臺mysql匯出資料到excel

1. pip install xlwt   #安裝xlwt 模組 2. 新建excel.py import xlwt #from io import StringIO from django.db import connection from django.shortcu

【 專欄 】- 零開始產品

從零開始學產品 本專欄致力於將【系統化】【規範化】【可執行】【循序漸進】的產品經理學習方法分享給大家: 怎樣從零基礎,成長為一個獨立完成專案的產品經理 內容分享人: 暗滅,出身搜狐,葡萄藤創始人/CEO,10年敏捷開發最

產品經理的角度算一算,做一個 APP 需要多少錢

小編注:伯樂線上已徵得作者許可。若再次轉載,請自行向作者獲取授權。 作為網際網路從業者,被外行的朋友們問及最多的問題是,“做一個網站多少錢?作為做過完整網站專案和 APP 的人,今天從產品經理的角度,一起來算一下中小型 APP 從無到有需要做哪些工作,以及為達成使

設計師能產品經理身上到什麼?

絕佳的產品人員無論他們的職稱是什麼,都有著一樣的共性:極富想象力,對於目標使用者的深思熟慮。 與此同時,針對設計師和產品經理的面試也不盡相同,可能一個針對設計師候選人來說無足輕重的技能和品質對於產品經理候選人來說就至關重要,反之亦然。他們彼此之間可以學習的東西太多太多。很有幸,作為設計人員,我和一些業內頂級