顯示具有 Office 標籤的文章。 顯示所有文章
顯示具有 Office 標籤的文章。 顯示所有文章

2013年10月4日 星期五

[轉貼] 快速產生具複雜樣式的 Office Open XML 程式碼

出處:http://www.dotblogs.com.tw/regionbbs/archive/2010/04/30/office.openxml.templated.document.productivity.tool.aspx

在前一篇說明 Open XML 不依賴 Office 即產生樣板與資料庫的資料整合的文章中有一段落落長的程式碼,那一段你覺得我花多久時間呢?一小時?半天?一天?都不是,只要一分鐘。
“啥米?”不用懷疑,真的只要一分鐘,這一分鐘我只要做建立樣板文件和使用工具來產生即可。這個工具就是 Office Open XML SDK 中提供的 Office Open XML SDK 2.0 Productivity Tool:
image

這個工具可以在 Microsoft Downloads 使用 Open XML SDK 2.0 為關鍵字找到,它大小是 106MB 左右,它可以讀取 Office 2007-2010 文件的內容,並且自動產生可產生符合格式的 C# 程式碼 (沒看到 VB 的程式碼的產生位置 …),當你的文件很複雜時,這個工具可以很快的幫你解決程式碼的問題,當然產生出來的程式可能還需要修改,但最起碼這麼大量的程式只要修小小幾個地方,光是時間成本就不知可以省多少了。
另外,這個工具還可以驗證 Office 文件的 Open XML 內容的完整性 (工具列上的 Validate 按鈕):
image

你也可以設定讓它檢查哪種格式的 XML schema:
image

有了這個工具,遇到複雜格式的 Office 文件樣板化,再也不用傷腦筋寫程式碼,交給它代勞即可囉。 

[轉貼] NPOI、OpenXML SDK、OpenOffice.org SDK 寫入資料到 EXCEL 檔案

出處:http://www.dotblogs.com.tw/chou/archive/2010/04/29/14912.aspx

一、簡介
要將資料寫入 EXCEL 檔案有許多的方法,但假如電腦不想安裝 Microsoft Office EXCEL,又想要寫入資料到 EXCEL,可以使用 NPOI、OpenXML SDK、OpenOffice.org SDK 等方式。本文透過簡單的範例 - 寫入資料到 EXCEL 讓大家初步了解如何使用這些 Library。
附註 : 本文程式為 Windows Forms (.NET Framework 3.5 專案),開發環境為 Windows XP SP3、Visual Studio 2008 SP1。


二、NPOI
NPOI 是可在 .NET 上的處理 Office 檔案的函式庫,由於 NPOI 相當熱門,因此不多加介紹,有興趣的可以參考小朱的文章 在 Server 端存取 Excel 檔案的利器:NPOI Library,而在使用上能讀寫 xls 檔案。接著介紹如何使用 NPOI 寫入資料到 EXCEL (xls) 檔案。
1. NOPI 下載與加入參考
(1) 到 CodePlex 的 NPOI 網站中下載 NPOI Lirary,在此下載的是 NPOI 1.2.2 for .NET 2.0,下載並且壓縮後,會有 7 個 dll 檔案,分別是
  • NPOI.dll:NPOI 核心函式庫。
  • NPOI.DDF.dll:NPOI 繪圖區讀寫函式庫。
  • NPOI.HPSF.dll:NPOI 文件摘要資訊讀寫函式庫。
  • NPOI.HSSF.dll:NPOI Excel BIFF 檔案讀寫函式庫。
  • NPOI.Util.dll:NPOI 工具函式庫。
  • NPOI.POIFS.dll:NPOI OLE 格式存取函式庫。
  • ICSharpCode.SharpZipLib.dll:檔案壓縮函式庫。
(2) 解壓縮後,將 NPOI 的 dll 加入參考中。
image image

2. 程式撰寫
請參考以下程式碼與註解,了解如何透過 NPOI 寫入資料到 Excel 檔案,以下程式為建立工作簿、工作表、寫入資料、儲存檔案。


3. 執行結果
image


三、OpenXML SDK
Open XML SDK 是微軟所提供可以用來處理 Office 檔案,但只限 Open XML 檔案格式 (以 Excel 來說副檔名為 xlsx)。
目前 Open XML Format SDK 有以下版本

接著介紹如何使用 OpenXML SDK 寫入資料到 EXCEL (xlsx) 檔案。
1. OpenXML SDK 下載與加入參考
(1) 連結到 Open XML Format SDK 2.0 進行下載
image
image_thumb6

(2) 執行 OpenXMLSDKv2.msi 進行安裝,安裝過程並沒有特別的過程,只是要記得安裝路徑在哪,免得找不到 dll。
image  image
image  image
image
(3) 將 DocumentFormat.OpenXml.dll、WindowsBase.dll 加入參考
DocumentFormat.OpenXml.dll 位置在 C:\Program Files\Open XML SDK\V2.0\lib\DocumentFormat.OpenXml.dll
image  image
image

2. 程式撰寫
參考程式碼與註解說明,程式流程如下
(1) 開啟 Excel 檔案,取得工作簿
(2) 取得工作簿中的工作表,並透過 Linq 判斷工作表是否存在
(3) 建立 Cell 物件,設定寫入位置,格式,資料
(4) 建立 Row 物件,將 Cell 加入
(5) 將 Row 加入工作表中
(6) 儲存檔案

3. 執行結果
image


四、OpenOffice.org SDK
OpenOffice.org 是一套開放原始碼的辦公室軟體,其預設檔案格式為ISO標準開放格式(ODF,OpenDocument Format),使用 OpenOffice.org 也可以開啟與編輯 Microsoft Office 檔案格式,而 OpenOffice.org 有提供 OpenOffice.org SDK 讓我們可以對 OpenOffice.org 檔案與部分 Microsoft Office 檔案做操作。
目前 OpenOffice.org SDK 版本為 OpenOffice.org 3.2.0,假如要執行以 OpenOffice.org SDK 撰寫的程式,電腦必須先安裝 OpenOffice.org 才行。
1. OpenOffice.org SDK 下載與加入參考
image
image
(2) 執行 OOo-SDK_3.2.0_Win32Intel_install_en-US.exe,會先進行解壓縮動作
image image
(3) 解壓縮完成後,開始進行安裝。
image image
image image
(4) 將 OpenOffice.org SDK 相關 dll 加入參考,資料夾位置在 C:\Program Files\OpenOffice.org_3.2_SDK\sdk\cli
image
image

2. 程式撰寫
請參考以下程式碼與註解,了解如何透過 OpenOffice.org SDK 寫入資料到 Excel 檔案,而使用 OpenOffice.org SDK 配合電腦有安裝 OpenOffice.org 可以做列印 Excel 檔案的動作。

3. 執行結果
image image


五、結語
本文看起來雖然簡短,但實際上花了好幾天時間去嘗試使用,點此可以下載範例
針對這三個函式庫有幾項心得 :
1. NPOI : 可操作 Excel 97-2003 格式 (.xls) 格式的 Excel 檔案,無法透過程式控制列印檔案。
2. OpenXML SDK : 可操作 Excel XML (.xlsx) 格式的 Excel 檔案,無法透過程式控制列印檔案。
3. OpenOffice.org SDK : 電腦需安裝 OpenOffice.org 才能使用,可以透過程式控制列印檔案。
而如何讓 NPOI 或 OpenXML SDK 編輯好的 Excel 檔案輸出到印表機做列印,請參考 [Office][C#]使用動態資料交換 (DDE) 將 EXCEL 檔案輸出至印表機進行列印
本文希望能夠對想要操作 Excel 的程式設計者有所幫助。


六、相關參考與連結

2013年10月3日 星期四

[轉貼] 在Word中使用合併列印功能來套表 (結合Excel)

出處:
http://www.flag.com.tw/book/cento-5105.asp?bokno=FS006&id=320

http://changyang319.pixnet.net/blog/post/5576398



這裡我們要把已經做好了員工的薪資明細表列印, 但是要將所有的員工明細都列印出來時就有些不方便, 因為一次只能列印一位員工的薪資, 若是員工人數多達數百人或數千人, 那麼一個個點選員工姓名後再列印就太費時了。因此我們要教您利用 Word 的合併列印功能, 一次列印所有的員工資料。請執行 『開始/所有程式/Microsoft Office/Microsoft Office Word 2007』 命令, 先將 Word 啟動。
什麼是合併列印
簡單來說, 合併列印就是把文件與資料合併成一份文件。例如我們將一份邀請函透過合併列印功能, 與記者資料合併, 產生以下的結果:

以上述的例子而言, 將文件與資料透過合併列印結合在一起, 就可以一次產生大量內容相同、對象不同的文件。
首先, 您必須建立一份 「主文件」 , 它是每一份合併文件都會具備的相同內容, 例如範例中的邀請函。另外還要準備一份 「資料來源」 , 用來提供給每一份合併文件不同的對象資料, 如範例中的記者資料。然後在主文件上插入合併列印的功能變數, 合併列印功能就會在每一份合併文件的相同位置上, 插入不同的資料。
合併列印的程序如下圖所示:

step1. 建立主文件
我們要大量複製這份文件, 並在裡頭加上每位員工的姓名、部門、本薪、勞、健保…等資料。這份文件就是合併列印的 「主文件」。
請在 Word 中切換至郵件頁次, 按下啟動合併列印區的啟動合併列印鈕, 執行 『逐步合併列印精靈』 命令, 便會開啟合併列印工作窗格。接著請如下操作:


step2. 指定資料來源
選擇好要進行設定的文件後, 接下來要指定資料來源。資料來源可以是 Excel 工作表、Access 資料庫、Word 表格、純文字檔以及 Outlook 連絡人;若是您沒有現成的資料來源檔案, 可以在合併列印的過程中建立清單作為資料來源。
step3. 插入功能變數
建立主文件和指定資料來源之後, 合併列印已經完成一大半, 再來就是插入合併列印的功能變數。插入合併列印功能變數的動作, 就是設定在薪資明細表中放入員工資料的位置。
請將插入點移到 "姓名:" 的右方, 按下合併列印工作窗格的其他項目。
重複上述步驟分別將功能變數插入到文件中的對應欄位。每插入一個欄位, 就得將插入合併欄位交談窗關閉, 才能繼續。
確定好要插入的合併列印功能變數, 以及合併的資料來源後, 按下一步:完成合併繼續下一個步驟。
step4. 執行合併
這個步驟是合併列印的尾聲, 也就是將合併文件列印出來。
接著按下合併到印表機交談窗的確定鈕, 會開啟列印交談窗, 讓您進行印表機的設定, 一切無誤後, 你就可以按下列印交談窗中的列印鈕進行列印了。
若是您日後還會使用合併列印後的檔案, 只要在 Word 中按下儲存檔案鈕 , 即可將合併列印的設定儲存起來。



*****************************************************************************************************************



另一個範例

  以下我會舉一個範例來示範「合併列印」的強大功能,這個功能絕對值得你花點時間來將它搞清楚,雖然它是高階應用,但實際上它卻很簡單。
  假設我現在要打一份邀請函給我所有的朋友,朋友清單都已經在Excel的檔案裡,邀請函準備要打在Word裡,如下圖:

範例檔案下載 (Word邀請函 - invitation.doc)


範例檔案下載(Excel朋友清單 - list.xls)

  我準備要將「Excel朋友清單」裡的每一個名稱放進「Word邀請函」中的【公司名字】,一般我們面對這樣的情況,都是直接從Excel一個一個複製到Word邀請函裡貼上,也就是「Word邀請函」裡將會有10頁的邀請函。
  幸好我的朋友清單裡只有10份資料,使用土法鍊鋼的方式幾分鐘就可以複製完這些工作。那萬一這份清單有1,000份呢?該不會你也還要用土法鍊鋼的方式吧!! 那最後的結果就是花了三、四天每天都做重覆的動作,最後完成了工作,也得了關結炎。
  看完這篇「合併列印」的教學,讓你打這1,000份所花的時間不需要花10分鐘。

合併列印

  在開始之前,你可以下載兩個我們要用來示範的檔案,一、「Word邀請函 -invitation.doc」;二、「Excel朋友清單 - list.xls」。
整個流程如下:
一、先打開Word invitation.doc檔案,然後開啟工具列上的「工具(T)」\「信件與郵件(E)」\「合併列印(M)」。

二、以Word2003來說,Word會在右方欄開啟一個「合併列印」設定版面,步驟1:選取文件類型,在這裡我們選取第一個「信件」,然後接著按「下一步:開始文件」,如下圖:

三、步驟2:選取開始文件,由於我們已經開啟了「invitationl.doc」,所以我們在這裡選擇「使用目前文件」,接下來按「下一步:選擇收件者」,如下圖:

四、步驟3:選擇收件者,由於我們已經有「list.xls」的清單了,所以在這選擇「使用現有清單」,然後接著要指定檔案的來源,請點選「瀏覽...」來指向「list.xls」,如下圖:


(看你將list.xls放在哪,就到那個地方去雙點滑鼠左鍵選取它)


(由於list.xls使用的是EXCEL,所以我們要告訴電腦我們的清單在哪個工作表裡,這裡我放在第一個工作表,也就是Sheet1$;注意到下方有一個check欄位叫「資料的第一列包含欄標題」,如果你的資料第一列沒有標題,要記得把check拿掉。)


(看一下電腦幫你抓到的清單是否正確?沒問題的話,按「確定」)


(設定完成後,你會看到在「使用現有清單」中會出現「目前您的收件者是選取自:在"list.xls"的[Sheet1$]」,接著按「下一步:寫信」)

五、在步驟4中,我們也要將視野看到左方的文件內容(invitation.doc),請注意以下的操作!!。一開始請你將滑鼠游標點在文件一開始「茲邀請」的後面,並將原有的「【被邀請人名字】」清除掉;然後按下合併列印版面的「其他項目」來插入合併欄位,如下圖:


(接著會出現我們EXCEL清單裡的欄位名稱,在這裡我們要插入「名稱」這個欄位,選擇「名稱」後,按下「插入(I)」)


(若操作正確的話,你會看到在「茲邀請」後面會出現「<<名稱>>」這個東西,最後按下「下一步:預覽信件」吧!)

六、 在步驟5:預覽信件中你可以按下「<<」及「>>」來切換清單裡的資料,每次所切換的資料,都會即時的在文件中看到將會輸出的結果,最後如果滿意的話,請按「下一步:完成合併」。


七、在最後的步驟我們做文件的輸出,也就是將已經設定好的「invitation.doc」及「list.xls」合併出另一個我們想要的結果檔案,在這我將會儲存成「invitaion-ok.doc」,請按「編輯個別信件」,如下圖:


(接著你可以選擇是要合併所有的記錄到新文件中,還是要指定第幾筆到第幾筆記錄,在這我們選擇「全部(A)」)


(最後會依你選擇的結果產生出另外一個新的文件,你可以將此文件另外存其它的檔名)

八、大功告成,你是否也成功了呢?你可以看一下我另存下來的「invitation-ok.doc」完成後是什麼樣子。
要注意的是所有合併出來的檔案(invitation-ok.doc)在列印時,是不能選擇要列印的頁數,不管怎麼選擇要列印的頁數,最後還是會自動印出所有的頁數,也就是說如果你選擇了要列印頁數2那一張而已,最後還是會將第1到第10都印出來。所以如果你要印單獨的頁數時,請你要將其它的頁數刪除或是將要列印的頁數另外複製出來到另一個檔案,再不然就是用invitaion.doc再單獨合併出那一筆你想要列印的記錄也可以。