[ 技術探討 ] Excel群組加加減減

透過Microsoft.Office.Interop.Excel對 Excel 報表資料進行群組設定

透過Microsoft.Office.Interop.Excel對 Excel 報表資料進行群組設定

某一天,小皮球收到一個消息:「某簡訊專案需要做一張包含群組功能的Excel報表,但因為Telerik報表匯出Excel檔案時,會先轉成PDF、再轉成Excel檔案,所以匯出來的Excel是不會存在群組功能的。」
小皮球頭上冒出問號、發出一個單音:「蛤?」
作者:「小皮球,你的問題是什麼啊?」
小皮球:「什麼是Excel群組啊?」
作者:「喔,聽說就是旁邊或上面那一堆加加減減……」
小皮球默默地轉頭看向前輩,前輩展示了Example後,終於明白Excel裡面的群組是什麼。

用說的還真的不好解釋,直接一張圖給大家看吧。

excel group-01

了解什麼是群組之後,小皮球問:「所以呢?」

作者:「所以匯出Excel報表這功能要自己做啊,Telerik報表不幫你做不是嗎?」

小皮球:「咦?!」

作者:「啊~今天來泡烏龍茶好了!」

小皮球:「喂喂喂~ 這麼悠哉的泡茶對嗎?!」

作者:「你確定你要看著我泡茶、而不抓緊時間研究Excel?」

其實作者自認自己的笑容很燦爛,雖然小皮球不領情、而是哭著回到電腦前面去。

所以,要怎麼匯出Excel呢?

 

在說匯出Excel之前,就得先準備好該有的dll參考,即Microsoft.Office.Interop.Excel:

excel group-02

 

接著呢,先來說說一般人如何手動儲存一個Excel檔案:

  1. 開啟 Office Excel 應用程式
  2. 加入一個活頁簿
  3. 活頁簿中預設包含一個Sheet,於是可以直接在這Sheet中任意編輯
  4. 編輯完成後,按下儲存進行儲存檔案

 

所以,如何匯出Excel?答案就是:透過Microsoft.Office.Interop.Excel.dll中提供的類別方法,利用Code執行那四個步驟。

現在,來回頭看看小皮球吧!

小皮球已經準備好一個console專案、包含專案參考,來準備匯出Excel了。

接著就開始使用Code來執行那四個步驟吧!

excel group-03

 

在這裡作者插話說一下:雖然一般呼叫array之類,index都是從0開始,但Excel的index卻是從1開始的,要是輸入0可是會觸發Exception喔!

匯出檔案後,小皮球就愣愣地看見有兩個Excel檔,這兩個Excel檔表達的根本是編輯中的樣子啊!

檔案位置

除此之外,即使電腦裡面都沒有開啟過Excel,也可以從工作管理員發現已經有Excel應用程式正在執行中。

工作管理員中的excel

 

備註:此Excel操作方法後續發現,其Server需要安裝Office才可執行。

 

作者:「所以啦,高手前輩都說要釋放資源了,小皮球你就乖乖做吧!」

小皮球:「……你一定要在旁邊泡著茶、那麼悠閒的樣子嗎?!」

 

於是小皮球在儲存完檔案後,又加了一段Code來進行收尾動作,即釋放資源。

excel group-06

如此一來就可以只看到一個Excel檔、也不會在工作管理員中看到Excel正處於執行階段了。

 

作者:「然後勒?」

小皮球:「蛤?什麼然後?」

作者:「不是還要做加加減減?」

小皮球愣了一下才反應過來:「那叫做『群組』!不叫什麼『加加減減』啊,我又不是在做數學題目……」

一樣先來說說如何在Excel中手動做出一個群組吧:

  1. 在一個Sheet中選取一個範圍
  2. 點選Excel功能「組成群組」,然後就可以選擇列、還是欄

所以小皮球也是利用Code去執行那兩個步驟而已。

excel group-07

這邊得多加說明一下,首先來補充說明選取一個範圍這件事情。

如果是手動在Excel檔案中選取範圍,會怎麼選取呢?自然就是從一個格子框到另一個格子;而在Excel中,每個格子都是有座標的(或者說有名字),像是A1、A2、B3、C4、G5等等,因此光是選取範圍就有好幾種方式了。

excel group-08

 

接著來說明組成群組這件事,由於用Code去組成群組跟手動組成群組不同,手動組成群組是先按下「組成群組」、再選列群組還是欄群組,但在Code裡面,要先決定是列群組還是欄群組、然後再去呼叫Group方法。

 

所以執行成功後、看到有群組功能的Excel後,小皮球就歡呼了:「YA~群組功能跑出來了~哈哈哈──」

此時悠哉喝完一杯茶的作者涼涼地說:「所以要做報表了嗎?嗯?小皮球你的歡呼聲呢?」

作者走了過去、戳了小皮球一下,發現……小皮球石化了。

 

作者:「說真的,我第一次看到活化石呢!呵呵~」

《完》

 

Reference :

  1. http://csharp.net-informations.com/excel/csharp-create-excel.htm
  2. http://www.dotblogs.com.tw/yc421206
  3. http://msdn.microsoft.com/en-us/library/microsoft.office.interop.excel.workbooks.add(v=office.15).aspx

 

 

Comments

No comments yet. Why don’t you start the discussion?

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料