如何統計Excel表格中指定部分的字數?

2021-02-13 簡言

背景

如今很多譯者從客戶那裡接到的待譯文件格式都五花八門,如果客戶給一個Word文檔那就已經謝天謝地了,這樣的客戶絕對能評上「年度甲方爸爸」。可要是遇上這樣的情況:客戶提供的都是Excel表格,尤其是那種ShitSheet特別多內容又特別多的Excel表格,那麼光統計要翻譯的文本的字數就夠譯者喝一壺的。

所以在今天的這篇帖子中,我就準備仔細說一下如何統計Excel表格中指定部分的字數。

正文

首先,我先給大家介紹一下我準備使用的演示材料和程序開發需求。

我做了一個演示用的Excel表格,如下:

我一共建了三個表,分別是:表一、表二和表三。每個表中都有三列,分別是:ID、原文和譯文。

我們要翻譯的是原文,要把譯文填充在「譯文」列。

我希望通過一段程序一次性統計三個表中的「原文」一列的所有中文的字數。

實現方法

第一步:設置好編程環境,並將演示文件存入指定的文件夾中

我所使用的本地編程環境是XAMPP,即將使用的程式語言是PHP。(在我之前的微信公眾號文章中可以查看該工具的使用方法)

我將剛剛創建的演示文件存入指定的文件夾中,如下圖:

第二步:安裝一個名為「PHPExcel」的PHP插件

地址:https://github.com/PHPOffice/PHPExcel

安裝方法:從上述地址下載名為「Classes」的文件夾,並將其存儲在本地編程環境指定文件夾的根目錄中,在這裡我存儲在「excel」文件夾中,如下圖:

第三步:在根目錄中創建一個「index.php」文件,用來撰寫代碼處理「files」文件夾中的演示文件。

如下圖:

第四步:打開「index.php」開始撰寫代碼

1、引入PHPExcel插件

在上圖中可以看到五行代碼,前三行的作用是導入剛剛我下載並安裝的PHPExcel插件。

第四行和第五行的作用是從「files」文件夾中讀取名為「Test.xlsx」的演示文件,並將其放在一個名為「$excel」的變量中。

我們統計Excel表格中的指定內容時,實際上就是在處理這個叫「$excel」的變量。

2、讀取Excel表格數據

那麼我們接下來就去讀取Excel表裡的數據:

在新增的代碼中,實際上有兩部分內容:

上圖第「9」行的代碼中的「getSheetCount()」函數用於統計Excel表格中有多少個工作表,並且把統計結果放在「$sheetCount」變量中。

上圖的第「11-15」行代碼用戶遍歷每一個工作表,並且把工作表中所有的結果以數組的形式存儲在「$data」變量中。

上面代碼運行後的結果為:

到了這一步,我們已經把Excel表中所有工作表的內容都讀取出來了,我們接下來要做的就是把所有表中第二列「原文」單獨顯示出來。

我們先仔細看看上面這些數據是怎麼生成的?

我們的演示材料裡頭有三個表,這個「3」被賦到了「$sheetCount」變量中。

下面展示的是一個循環功能:

for($i=0; $i<$sheetCount; $i++){

    echo $i;

}

可以這樣解釋:

我們新建一個叫「$i」的變量,這個變量的初始值為「0」($i=0;);它的值不能大於「$sheetCount」,也就是小於「3」($i<$sheetCount;);每當中括號「{}」中的程序執行完一次後,「$i」的值再加一個「1」($i++; 「++」在這裡是「自加1」的意思)。

而「echo $i;」的功能就是列印「$i」的值。

所以,上面這段簡單的循環功能執行後的結果就是:「012」,因為當「$i=3」的時候,「$i」就已經大於「$sheetCount」了,就不會再執行中括號裡的結果了。

理解了這段代碼的功能,我們再去理解我前面寫的那段代碼:

for($i=0; $i<$sheetCount; $i++){

        $data = $excel->getSheet($i)->toArray();

        echo '<pre>';

        print_r($data);

}

當「$i=0」時,我們新建的這個叫「$data」的變量的值為:$excel->getSheet(0)->toArray()

「$excel」這個變量前面已經介紹了,裡面裝的是整個Excel表格;

「getSheet(0)」的功能是獲取Excel表格的第一個工作表(Sheet),大家會很奇怪,為什麼第一個工作表對應的序號是「0」,我就不給大家展開講了,簡單來說就是,程式設計師在數數時都是從「0」開始數的。

「toArray()」的功能就是將第一個工作表的內容變成一個數組(Array),如下:

Array( [0] => Array ( [0] => ID [1] => 原文 [2] => 譯文 ) [1] => Array ( [0] => 1 [1] => 翻譯 [2] => ) [2] => Array ( [0] => 2 [1] => 編程 [2] => ) [3] => Array ( [0] => 3 [1] => 文字 [2] => ) [4] => Array ( [0] => 4 [1] => 代碼 [2] => ) [5] => Array ( [0] => 5 [1] => 碼農 [2] => ))

這個工作表原本是什麼樣的呢?如下圖:

仔細對比前面的「數組」和上面的「表格」,你會發現這樣的規律:

我們的「表格」一共有六行,第一行是表頭,第二行到第六行是表格的正文。

程序得到的「數組」是一行一行的讀取「表格」中的數據的,把每一行數據放到了一個「組」裡,如「表格」的第一行變成了如下的數組:

[0] => Array ( [0] => ID [1] => 原文 [2] => 譯文 )

這個數組的編號是「0」,「原文」一列的編號是「1」。

知道了上面的規律後,我們就可以開始考慮「初心」了。我們的初心是:

「統計三個表中的「原文」一列的所有中文的字數」。

也就是說我們想統計的是第「1」到「5」個數組的的編號是「1」的部分的中文字數的總和。

3、在瀏覽器中呈現要統計的文本

下面,我們一起來構建代碼:

當「$i=0」時,我們想獲得的是第「1」個數組的第「1」列,第「2」個數組的第「1」列,「第3」個數組的第「1」列.直到,所有五行數據的第「1」列都被讀取了出來;

當「$i=1」時,我們想獲得也是第「1」個數組的第「1」列,第「2」個數組的第「1」列,「第3」個數組的第「1」列.直到,所有五行數據的第「1」列都被讀取了出來;

.

如下面的代碼:

for($i=0; $i<$sheetCount; $i++){

        $data = $excel->getSheet($i)->toArray();

        echo '<pre>';

echo $data[1][1];

echo $data[2][1];

echo $data[3][1];

echo $data[4][1];

echo $data[5][1];

    }

得到的結果如下:

打眼一看,確實所有的內容都讀取出來了,可是如果我想要的數據超過5行怎麼辦?如果三個工作表中的數據行數不一致怎麼辦?

因此,我們還得換個更方便的寫法:

for($i=0; $i<$sheetCount; $i++){

        $data = $excel->getSheet($i)->toArray();

        echo '<pre>';

for($j=1;$j<count($data);$j++)

{

echo $data[$j][1];

}

    }

在上面這段代碼中,我們設置了一個新的變量「$j」,賦予它初始值為「1」,它的值小於整個工作表的總行數「count($data)」,每次執行完「$data[$j][1]」後「$j」的值自加1,直至工作表中所有行的「原文」列結果全部列印出來。

上面代碼的執行結果和前面那個是一樣的。

如果要想讓所有中文都單獨一行呈現的話,再一個換行即可,如下面的代碼:

for($i=0; $i<$sheetCount; $i++){

        $data = $excel->getSheet($i)->toArray();

        echo '<pre>';

for($j=1;$j<count($data);$j++)

{

echo $data[$j][1];

echo "<br>";

}

    }

運行效果如下圖:

下面,我們就可以把這些內容粘貼到「MS Word」中去統計了,當然也可以再寫一段代碼就在這個頁面中顯示所有的單詞。

4、統計中文字數

我之前寫過一篇文章:做了一個簡單的在線字數統計工具 ,裡面有我寫的在線字數統計工具(http://translation.education/count/)把文本粘貼到裡面也可以,如下圖:

結語

至此,我們就完成了一個非常簡單的使用PHP統計Excel表格指定部分字數的程序,總有效代碼行數為:13。

下圖為全部代碼:

相關焦點

  • 在Excel表格中限制指定位置可編輯
    當數據表格製作好以後,我們想要讓工作表中只有需要進行數據錄入的地方可以編輯,而希望其他固定不變的位置不能夠被修改。
  • 文章3 如何用Excel函數替換字符串中的指定字符?
    經常遇到這樣的問題:現有字符串中,如何替換指定的部分字符,例如有大量電話號碼,現需要將這些號碼最後四位替換為****,該如何做呢?類似的問題和使用場景有很多,如果你的行記錄有幾千幾萬條,那麼,如何利用Excel函數批量處理就必須要掌握了。
  • 在Excel表格中,對描述中包括(包含)的部分內容進行條件求和
    假設有一個數據,產品描述,還有對應的消耗量,現要求對描述列中,包含A料的,以及包含B料的內容進行分類求和。
  • Excel計算表格淺談
    這些計算處理中,簡單的有兩三個數據的平均,複雜的有多步運算,涵蓋了求RSD,lg等。在實際工作中,大家基本上都是用excel來代替計算器來進行計算,否則工作效率和計算結果的準確性根本無法保證。但為了避免對excel計算表格的驗證,官方審計時大家都宣稱是用計算器來進行計算的。其實審計人員是不相信的。曾經經歷過一次FDA審計,審計官現場要求用計算器計算檢驗記錄中複雜的計算。
  • 【Excel技巧】表格中各項重複次數如何統計?數據透視表快速搞定
    ,當我們對表格數據進行分析時,需要統計表格中各個數據出現的次數,怎麼做會比較快?今天我們就來說說如何利用數據透視表統計表格中各項出現的重複次數。我們舉個例子,如下表格:目的是要統計C列中各城市出現的重複次數。
  • 如何在CAD中插入excel表格
    關注CAD製圖有問必答有時我們需要在AutoCAD裡面插入一些表格,而且很多情況下這些表格已經用Excel做完了,這時我們的心情是這樣的:在選擇完xlsx或者xls文件後,可以選擇需要連結的Excle數據內容,你可以選擇將某個工作表的全部或者部分連結至AutoCAD裡面,勾選下方的預覽,可以看到所選部分內容在插入後的樣式。
  • Excel中如何統計英文句子中的單詞數量
    前言對於科研論文寫作的朋友,或者職場上的朋友,寫稿時,會遇到英文字數限制的要求
  • 刪除表格中的重複項,三大妙招來襲!
    本文由網友 娟 授權原創首發了解如何投稿請點擊→繼續徵稿中……
  • 如何快速合併多個Excel表格
    之前在做隆德縣村莊分類時遇到這樣一個問題,從村莊調查信息系統裡面導出的表格是以每個村級為單位的單個表格,而為了更好地統計、分析所有村莊,需要把所有表格合併為一個總表
  • Excel表格中最實用的 15個統計公式
    Excel中最實用的15個
  • 乾貨 | Excel如何花式秀操作?附50G Excel裝X技能福利包!
    即如何將遇到的問題在搜尋引擎上描述清楚。掌握vlookup和數據透視表是最基本的兩個技巧:學會vlookup,SQL中的join,Python中的merge很容易理解。學會數據透視表,SQL中的group,Python中的pivot_table也是同理。
  • Pandas根據篩選條件對指定excel列進行篩選!神器!
    ',任意多個name}這裡的ji_he是提供的學院所有老師的姓名,與下面的要篩選的表格A做匹配,標記出A中一作為老師的論文。要篩選的表格Aexcel內容大概長這樣(對不起!杰倫力宏紫棋):這裡一作就是杰倫,力宏,和紫棋。思路1、由於我們只要第一作者,所以對要篩選的表格A的Author Full Names列進行遍歷,按;分割成數組取第0個元素,因為拿到的表格一作的格式千奇百怪,還有-等等莫名字符,所以稍微改了下。
  • 考勤打卡統計,這才是最簡單的方法!
    蘭色看了這樣一個關於考勤打卡的求助:從打卡機中導出的2016-2019年員工考勤信息問:如何統計2018
  • Excel 表格如何漂亮的導入到word 文檔中 ?
    之前,蘭色曾分享過如何把word表格導入到Excel中而格式不變。
  • 如何在word中插入excel文件表格
    這樣不會實時跟新,注意,右邊還有個複選框【連結到文件(K)】,如果這裡√的話,就可以達到我們預期的效果了,excel文件更新後,word文檔裡的內容也一起變動了。  這樣做法的好處:當然不用說,一起更新了,而且,你打開word文檔後,雙擊excel表格區域,可以直接打開excel表格進行編輯,編輯結束後關閉excel,在word裡的excel表格滑鼠右擊,選擇【!
  • 【Excel技巧】用DATEDIF及ROUND函數在Excel2013表格中如何計算員工的工齡
    如很多公司都有一個留人政策,採用了工齡制。它的優點是一方面可以留住人才,讓他們覺得在這裡有前途,另一方面也可以安撫一些老員工,避免引起不必要的爭論。那麼在Excel2013表格中如何計算員工的工齡呢?
  • 稿費貓膩,翻譯怎樣報價和計算字數才不虧?
    一直以來都有很多學生問我各種翻譯工作的報價以及字數是如何算的,前兩天也有學生諮詢。
  • 表格的製作方法,詳細教您excel如何製作表格
    電腦已經是我們日常工作、學習和生活中不可或缺的幫手了,許多人都會使用Excel製作表格,Excel製作表格也是日常工作中常用操作之一。
  • Excel如何凍結窗口 excel固定凍結指定單元格的方法
    Excel是微軟公司的辦公軟體Microsoft office的組件之一,我們辦公的時候通常都會用到,那麼Excel如何凍結窗口?下面小編帶來excel固定凍結指定單元格的方法,希望對大家有所幫助。excel固定凍結指定單元格的方法:1、我們想凍結窗口的某一行,滑鼠向下滾動時該行不動,但是怎麼達到這個效果呢?下面我們就以凍結第三行的窗口為例。
  • Excel表格如何快速統計員工數量和姓名?
    提前祝大家新年快樂~今天這篇文章要講的是Excel表格如何快速統計員工數量和姓名。統計員工人數 以統計公司工程部男員工的人數為例,效果如下圖所示。統計不重複員工人數以統計不重複員工的人數為例,效果如下圖所示。在單元格 H1 中輸入下面的公式,=COUNT(0/(MATCH(A2:A16,A2:A16,0)=(ROW(2:16)-1))) ,按Ctrl+Shift+Enter 快捷鍵結束。