office增益集開發心得筆記一(安裝佈署與增益集類型)

最近有一些網友反應:安裝了增益集所需的相關檔案卻無法正常啟動增益集。這樣的問題在從事設計增益集的過程中,其實一直有發生,很多到現在依然沒有找到解決方案,現在越來越複雜的office功能與作業系統環境,完全相容真的是一個不容易達成的任務,究竟自己不是一個專業的程式設計者,也沒有那麼多設備與環境可以測試,很多時候問題都是透過使用者反應才發現。

同一個增益集在某些環境下無法啟動或正常使用,我的經驗發現除了與新的作業系統的安全要求有關,也和開發增益集的工具有關,雖然微軟已經宣佈win7支援vb6開發的程式,但之前我利用vb6增益集介面所開發的增益集,只能在xp作業系統中使用,拿到win7或vista安裝使用,就是無法正常啟用。但是利用c++依照com的標準去設計的增益集,就沒有這樣的問題。

另外很多剛學習設計增益集的初學者,按照書本範例利用vsto來開發增益集,程式在vs2003或vs2005中跑都沒有問題,但是一但封裝成安裝檔案拿到沒有裝vs的環境,安裝了怎樣就是跑不起來,其中的關鍵在於.net環境的安全性設定,在這兩版的vs開發者都必須做一些額外的工作,簡單的說就是要設定所開發出來的增益集或office solution 能夠被使用者的.net環境信任,否則就沒辦法在使用者的環境跑起來,關於這個問題微軟提供的方法有很多種,在msdn網站找到幾篇相關的文章,有興趣的讀者不妨看看:

Deploying Application-Level Add-ins

Deploying Visual Studio 2005 Tools for Office Second Edition Solutions Using Windows Installer (Part 1 of 2)

Deploying Visual Studio 2005 Tools for Office Second Edition Solutions Using Windows Installer Walkthroughs (Part 2 of 2)

受信任的應用程式部署概觀

逐步解說:手動部署 ClickOnce 應用程式

使用程式碼存取安全性原則工具 (Caspol.exe) 設定安全性原則

目前尚未利用vs2010開發增益集,不知道vs2010在這方面是否有改進。

了解office增益集的類型對於開發增益集有一定的幫助,不同office的系列軟體支援的類型也不盡相同,而可以開發增益集的程式語言也不只一種,有些發展歷史較早的像Excel,其支援的增益集類型就有好幾種,從Excel增益集的管理表單可以看到多種類型,雖然Excel增益集分成下圖中幾類:

image

但是如果從副檔案名稱來區分,大概有以下幾類,簡單說明:

1..xll:例如著名的分析工具箱增益集(它的檔名”analys.xll”),.xll是很早期EXCEL外掛程式類型,從Excel 4.0就支援此種格式的增益集,這種增益集是以C或C++程式語言開發出來的,這種類型自從Excel5.0之後並沒有太大改變,到了Excel2007才有一些較大的改變,在msdn有一篇關於開發.xll增益集的文章:Developing Add-ins (XLLs) in Excel 2007 ,在微軟的網站也可以找到相關的SDK。Microsoft Office Excel 2007 XLL Software Development Kit

2..xla與.xlam:這個類型是我最早認識的增益集類型,自Excel5.0支援Visual Basic for Applications,這個對於office應用的開發起了關鍵性的影響,記得自己最早接觸的關於增益集的知識,是來自於洪士吉先生的大作EXCEL 97 VBA巨集程式範例,看到書中所展示範的種種對當時的我近乎是神奇的範例,讓我見識到Excel的威力與其發展性,而且容易入門的特質,而VBA的IDE直接附加於office的系列軟體中,讓我選擇以office平台作為自己cai設計的平台。

image

只要在Excel中的VBA的IDE建立好巨集程式,然後把工作簿的IsAddin屬性改為true,檔案儲存為副檔名.xla(2003之後的副檔名為.xlam),即可發佈為增益集。Excel2007只要在增益集的管理介面選擇”Excel增益集”,按下『執行』即可

image

在增益集的表單中點選瀏覽,找到儲存增益集的位置把增益集掛上即可,或者將增益集儲存至office預設的增益集目錄,增益集管理表單自動會出現該增益集名稱,使用者只要在表單上勾選即可。

image

3..dll:這種副檔名通常是COM類型的增益集,只要依照COM的規準,可以使用不同的程式語言設計COM元件,所以COM類型的增益集可以用不同種的程式語言來開發,我習慣用VB來設計,因為與最先學習的VBA相容,再者VB將開發COM中的一些細節包裹起來,對於我們這些半路出家的開發者降低很多學習的門檻,用C++複雜多了,在VB中只要幾行程式可以完成的,C++中必須了解很多跟COM相關的細節才不容易出錯。不過VB這種好日子也沒有太久,.NET出來之後,再加上新版OFFICE的RIBBON介面,跟傳統CommandBars又不同,又必須花一段時間了解其概念。

4..manifest:這種這種副檔名是利用.NET類型程式語言所開發的COM類型的增益集,這個.manifest並不是主要的程式碼的部分,用筆記本程式打開來看,可以看到是xml樣子的檔案,記錄了增益集檔案的一些資訊,增益集管理的介面是利用這個檔案記錄的資訊去載入增益集,如果這個檔案不正確的載入會失敗。

甚麼是COM?

除非現有程式很糟糕、有瑕疵或者因智慧財產保護無法取得,否則程式人員如果樣樣都功能都要自己重新寫,除了證明自己有能力之外,其實沒有太大的意義。究竟一個人的能力有限,登高望遠不一定要自己從頭蓋一座高塔。所以一直以來程式人員希望開發軟體能像是組樂高積木一樣,可將其他人寫好的部分程式,像零件一樣拿來組合成所要新的程式。這個目標並不容易,有人將程式設計的方式由原來的程序導向改為物件導向,但是光這樣並無法真正達到元件化,不同的程式語言仍然無法完全直接使用他種語言寫的程式片斷,甚至同一種程式語言也必須使用原始程式碼重新編譯,也就是說無法完全直接使用編譯後之二位元格式的程式片段,雖然後來有dll這種解決方式,但是其之相容性仍受限於特定程式語言,所以才有COM這樣的東西出現。

簡單的說COM是一種軟體元件化的規範架構,跟程式語言的種類無關,只要符合COM的規範,不管是VB、C、C++或JAVA均可寫出COM的程式,不用再管其中的程式碼,程式人員可以直接以二位元層次進行應用。而且比傳統window下使用dll有更多的優點。

PYTHON 資料型態

1.字串型態:以引號括住字元資料(可以是單引號也可以是雙引號)
>>> print  ‘Here is a string’
Here is a string
#也等於
>>> print  "Here is a string"
Here is a string
#如果要多行呈現以連續三個雙引號包括字串內容
>>> print """ 123
321
213
"""
123
321
213
#字串運算
>>> print "這是一個" + "字串"
這是一個字串
>>> print "重複3次"*3
重複3次重複3次重複3次
#改以字串變數來測試
>>> str=’這是一個’
>>> str1=’字串’
>>> print str + str1
這是一個字串
2.Integers(整數): 依照python的定義分為以下幾種類型
longinteger    ::=   ("l" | "L") 長整數例如300000L
integer        ::=  decimalinteger | octinteger | hexinteger
decimalinteger ::=  nonzerodigit digit* | "0"
octinteger     ::=  "0" octdigit+
hexinteger     ::=  "0" ("x" | "X") hexdigit+
nonzerodigit   ::=  "1"..."9"
octdigit       ::=  "0"..."7"
hexdigit       ::=  digit | "a"..."f" | "A"..."F"