日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

淺談Excel開發(fā):一 Excel 開發(fā)概述

 法效天地 2014-01-29

    做Office相關(guān)的開發(fā)工作快一年多了,在這一年多里,在插件的開發(fā)中遇到了各種各樣的問題和困難,還好同事們都很厲害,在和他們的交流討論中學(xué)到了很多的知識(shí)。目前Office相關(guān)的開發(fā)資料是比較少的,最最開始的時(shí)候,我看的是一本英文資料,然后再就是MSDN上面去提問了。所以我想寫一點(diǎn)東西,讓大家也少走一些彎路。

    這篇文章就簡要介紹一下Office開發(fā)的一些相關(guān)的知識(shí),使大家對(duì)這個(gè)有一個(gè)大體的了解。

    首先來看一看Office 的開發(fā)方式。

一 Office開發(fā)方式

1 VBA (Visual Basic Application)

    VBA是一種Visual Basic的宏語言,它應(yīng)該是最早的Office提供定制化的一種解決方案,在1994年發(fā)行的Excel 5.0版本中,就具備了VBA的宏功能。從名字上似乎可以看出他是VB的一個(gè)子集,和Visual Basic不同,VBA是一種宿主型語言。由于那個(gè)時(shí)候Visual Basic非?;?, VBA取得了很大的成功,無論是專業(yè)的開發(fā)人員,還是剛?cè)腴T的非開發(fā)人員,都可以利用VBA完成簡單或復(fù)雜的需求?,F(xiàn)在在一些辦公環(huán)境中,VBA用的非常多,比如國內(nèi)比較著名的ExcelHome論壇,上面就有很多關(guān)于Excel VBA的討論,而且VBA還能夠調(diào)研Com組件里面的一些方法,在其他的Office開放方式中,如VSTO或者SharedAddin中,VBA有時(shí)候可以輔助完成某些功能,如RTD函數(shù),UDF函數(shù)的調(diào)用,專用模板的開發(fā),動(dòng)畫效果的演示等等。不光是Office,有很多其他的軟件業(yè)比如比較有名的ArcGIS,CorelDraw等軟件,都提供了VBA的定制化解決方案。

Excel VBA

    但是他也有很多缺點(diǎn)。VBA本身擁有很多的局限性,比如缺少一些常用的類型,調(diào)試起來不方便,VB語言雖然簡單,但是現(xiàn)在又很多的開發(fā)者都使用的是.NET,VB的一些語法可能很多人不適應(yīng)。再就是VBA是一種腳本類型的解釋型的語言,在安全性比如源代碼容易被破解,就像Javascript保密性不好一樣,在執(zhí)行效率方面沒有一些編譯型解決方案來的快。舉個(gè)例子,比如說,我們可以把我們的自定義函數(shù)使用VBA來編寫,然后存儲(chǔ)為.xla文件,這樣在Excel中就可以調(diào)用我們的這些函數(shù)了。但是由于VBA是解釋型的語言,就像JavaScript那樣,每次運(yùn)行都要邊解釋邊運(yùn)行,而不是像其他一些語言,在編譯成二進(jìn)制后,就能直接加載運(yùn)行。所以可以將我們的自定義函數(shù)寫到類庫然后注冊(cè),或者直接使用C++,將函數(shù)寫到xll中,這樣效率和安全性方面要比VBA方式要好,這里只是稍微提一下,后面的文章會(huì)詳細(xì)介紹。

2 Shared Addin

    SharedAddin,就像Visual Studio可以外接插件一樣,也可以使用一些技術(shù)為Office開發(fā)一些插件。對(duì)VBA的一些問題,一些專業(yè)的開發(fā)人員,可以使用VisualBasic或者VisualC++等工具來引用Office的一些dll,來針對(duì)Office進(jìn)行開發(fā)。開發(fā)的時(shí)候?qū)ll注冊(cè)為com組件,并在注冊(cè)表里面進(jìn)行注冊(cè),這樣就可以在Office里面直接調(diào)用這些插件了。

    Com Addin方式基本上解決了VBA存在的安全性及效率低的問題,但是他要求的門檻比較高,即使是專業(yè)的開發(fā)人員也不一定能夠很好的掌握。Com Addin還有一個(gè)優(yōu)點(diǎn)是,使用這個(gè)開發(fā)能夠彌補(bǔ)VSTO在某些版本尚不支持的尷尬,比如VSTO的Ribbon菜單在07以下版本中就不能支持,并且在1.0版本下不支持Application Level級(jí)別的開發(fā)。使用Com Addin開發(fā),能夠使得插件可以具有較好的兼容性。

GeodesiX是一個(gè)地理信息Excel插件,他能夠?qū)⒃贓xcel中與GoogleMap進(jìn)行交互,比如繪制專題圖,進(jìn)行緩沖區(qū)分析,疊加,圖示郵遞員問題等等。

geodix showrouteonmap

Travelling Salesman problem

3 VSTO (Visual Studio Tools for Office)

    2000年微軟發(fā)布了.NET平臺(tái)戰(zhàn)略之后,推出了一系列運(yùn)行在.NET上新語言如C#和VB.NET。在這種情況下,開發(fā)者能夠使用.NET 平臺(tái)上的語言來開發(fā)Office。 從Office 2003開始,微軟推出了VSTO 1.0。VSTO主要是對(duì)Office的一些dll進(jìn)行了.NET封裝,使得我們可以使用.NET上的語言來方便的對(duì)Office的一些方法進(jìn)行調(diào)用。所以,Office開發(fā)跨入了一個(gè)新的時(shí)代,開發(fā)人員可以使用更加高級(jí)的語言和熟悉的技術(shù)來更容易的進(jìn)行Office開發(fā)。VSTO 1.0是伴隨著.NET 1.0平臺(tái)推出的,支持Office 03以上的所有版本。

    對(duì)于企業(yè)及的應(yīng)用和開發(fā),VSTO或許是首要選擇,他極大地?cái)U(kuò)展了Office應(yīng)用程序的能力,使用.NET平臺(tái)支持的編程語言,能夠直接訪問.NET上面眾多的類庫。具有較好的安全機(jī)制。簡化了Office插件的開發(fā)和部署。

    VSTO也有一些缺點(diǎn),比較明顯的是他依賴于.NET 平臺(tái),在部署的時(shí)候,可能需要在目標(biāo)機(jī)器上安裝.NET Framework框架,再者就是版本的兼容性,沒有哪一個(gè)VSTO版本能夠兼容所有的Office版本。

    下面是VSTO的各個(gè)版本及對(duì)應(yīng)的支持的.NET平臺(tái)以及對(duì)各Office版本的支持。

VSTO VERSION

 

    以上圖表在 http://en./wiki/Visual_Studio_Tools_for_Office 的基礎(chǔ)上進(jìn)行了修改

    提到VSTO,有一個(gè)比較重要的問題就是Document Level 還是Application Level程序,在創(chuàng)建VSTO應(yīng)用程序的時(shí)候,就必須進(jìn)行選擇。就像名稱所說的那樣,Document level就是指對(duì)單個(gè)Word或者Excel文檔進(jìn)行自定義開發(fā),該文件打開時(shí),就加載,關(guān)閉時(shí)就卸載。如果是Application Level級(jí)別的,就是對(duì)應(yīng)用程序中所有打開的文檔實(shí)例都能夠起作用,應(yīng)用程序加載時(shí)插件加載,應(yīng)用程序關(guān)閉時(shí)插件卸載。

SharedAdd和VSTO兩者很多人都弄不清楚,他倆既有相同的地方也有不同點(diǎn),關(guān)于這一點(diǎn)Cindy Meister大神有詳盡的比較,異同點(diǎn)有:

相同點(diǎn):

  1. 他們都會(huì)在操作系統(tǒng)的注冊(cè)表中進(jìn)行注冊(cè),比如對(duì)于Excel應(yīng)用程序來說,會(huì)在HKCU\Software\Microsoft\Office\Excel\Addins這個(gè)下面創(chuàng)建注冊(cè)表項(xiàng),當(dāng)應(yīng)用程序比如Excel加載時(shí),會(huì)逐一加載這個(gè)下面注冊(cè)的插件.這些插件在COM加載項(xiàng)中可以進(jìn)行集中管理。
  2. 他們都在Office Com接口上面通過Office對(duì)象模型進(jìn)行構(gòu)建,他們都可以將建一些可擴(kuò)展的UI,比如用戶自定義任務(wù)面板(Custom task panel),Ribbon菜單等。

不同點(diǎn):他們也有很多不同點(diǎn),主要不同點(diǎn)如下:

  1. 從名字可以看出Shared Add-In可以在多個(gè)不同的Office應(yīng)用程序之間,比如Excel,Word中共享。因此在Shared Add-in中需要一些判斷和處理不同宿主程序的代碼。但是VSTO Add-Ins則是應(yīng)用程序明確的。VSTO Add-Ins只能用在一種宿主應(yīng)用程序中如Excel或者Word中運(yùn)行,因此不需要在代碼中處理對(duì)不同的宿主應(yīng)用程序的類型做特殊的處理,比如將通用的對(duì)象轉(zhuǎn)換為特定的對(duì)象,通過反射等調(diào)用不同應(yīng)用程序的方法等。
  2. 要在Shared Add-In中創(chuàng)建特殊的UI界面,如Ribbon菜單,Custom Task Panel以及Form窗體等,需要實(shí)現(xiàn)office.dll中的三個(gè)接口:Office.IRibbonExtensibility,Office.ICustomTaskPanelConsumer及Outlook.FormRegionStartup接口。不論是創(chuàng)建的是以上哪種類型的UI界面,我們都需要在接口方法中編寫很多處理代碼。但是,如果使用Visual Studio Tools for Office,這些東西VSTO都幫我們包裝好了,我們只需要從工具箱中往界面上拖動(dòng)添加新的Ribbon菜單,UserControl,及FormRegion即可。這些界面在Visual Studio中都提供了設(shè)計(jì)時(shí)支持,我們只需要拖動(dòng),設(shè)置熟悉,雙擊然后處理綁定的事件即可,就象設(shè)計(jì)Windows Form應(yīng)用程序一樣簡單。
  3. 還有一個(gè)重要的區(qū)別是安全模型。對(duì)于SharedAddin的IDTExtensibility2接口來說,從來不需要代碼的安全訪問機(jī)制(CAS),因此,在Office加載SharedAddin的時(shí)候,不需要調(diào)用caspol.exe方法來為Addin的程序集授予完全信任的權(quán)限。在VSTO中,2008版本中使用了.NET的安全策略,但是VSTO 2008使用了ClickOne部署以及真實(shí)代碼模型(Authenticode)
  4. VSTO為每一個(gè)VSTO Add-Ins創(chuàng)建了一個(gè)AppDomain,因此各個(gè)Addin之間互不影響,開發(fā)者不需要擔(dān)心一些諸如“Outlook關(guān)閉不了”的問題。當(dāng)寫在VSTO Addin的時(shí)候,AppDomian也會(huì)被卸載,CLR會(huì)卸載與其相關(guān)的所有資源。
  5. VSTO默認(rèn)安裝在HKCU(Current User)下面,而SharedAddin則默認(rèn)部署到HKLM(Local Machine)下面。如果想讓我們開發(fā)的VSTO Addin能讓所有人使用,則需要在部署的時(shí)候?qū)ψ?cè)表進(jìn)行一些額外的手動(dòng)讀寫操作

 

SharedAddin以及VSTO開發(fā)方式在企業(yè)級(jí)應(yīng)用中使用的比較廣泛,下面是一些例子:

  1. SQL Server Data Mining for Excel Addin

Excel DataMining

  1. SQL Server PowerPivot for Excel Addin

PowerPivort

  1. Visual Studio Team Foundation for Excel Addin

TFS Addin

  1. Oracle BI for Excel Addin

Oracle BI Add-In for Excel

  1. Acrobat Reader for Excel Addin

Acrobat

  1. 還有一些國內(nèi)的財(cái)經(jīng)軟件Excel插件,比如萬得資訊的Excel插件

WindExcelAddin

 

4 Office App

    隨著Office 2013 和Office 365 的推出,Office更加注重網(wǎng)絡(luò)化功能,因此引入了新的編程方式,那就是Apps for Office。在VS2012 中,您可以使用內(nèi)置提供的Apps for Office模板創(chuàng)建基于Web的Office應(yīng)用程序。和傳統(tǒng)的安裝插件(VSTO)及 運(yùn)行宏(VBA)不同,在新版的Office中,用戶可以到微軟的Office App Store中去下載,安裝應(yīng)用程序,這些應(yīng)用程序在獨(dú)自安全的沙箱環(huán)境中運(yùn)行。Office Apps使用熟悉的Web技術(shù)開發(fā)如JavaScript,使得非常容易使用Mashup技術(shù)來聚合各種各樣的資源。

    下圖展示的是使用在Excel中使用在線字典App來檢索信息和Bing App來繪制和渲染專題圖的效果。

Office App

    還有一個(gè)優(yōu)點(diǎn)是,Office App能夠同時(shí)在本地的Office應(yīng)用程序和Office在線應(yīng)用程序中使用,比如本地的Excel 2013 和Excel Web App能夠使用同一套JavaScript API來調(diào)用。更重要的是,因?yàn)槭腔赪eb的,所以開發(fā)者可以使用自己熟悉的Web開發(fā)技術(shù)如JavaScript,CSS,WebService等來開發(fā)Office App。Office App能夠更方便將應(yīng)用程序發(fā)布到Office App Store共享和下載,還可以通過付費(fèi)賺取收益。另外對(duì)于企業(yè)及應(yīng)用,可以使用企業(yè)App類別來限制只有企業(yè)內(nèi)部員工才能訪問下載,這些便利對(duì)于以前的Office開發(fā)方式都是不具備的。

5 XLL

    XLL是Excel的一種外接應(yīng)用程序,他使用C和C++開發(fā),程序通過調(diào)用Excel暴漏的C接口來實(shí)現(xiàn)擴(kuò)展功能。這種方式開發(fā)的應(yīng)用程序效率高,但是難度大,對(duì)開發(fā)者自身的要求較高。著名的開源項(xiàng)目Excel-DNA就是使用XLL技術(shù)開發(fā)的,Excel-DNA能夠幫助.NET 開發(fā)人員來極大地簡化RTD函數(shù),同步、異步UDF函數(shù)的編寫和開發(fā)。 開源軟件finansu 是一款可以從Bloomberg.com, Google Finance and Yahoo! Finance財(cái)經(jīng)中獲取股票行情數(shù)據(jù)的軟件,其中大量使用了Excel-NDA。

XLL Add-Ins

finansu

    上圖動(dòng)畫簡要概述了該插件功能。里面使用到了Excel-NDA中的RTD函數(shù),異步UDF函數(shù)等功能。

    XLL式的插件開發(fā),使得系統(tǒng)插件不需要依賴注冊(cè)表項(xiàng),只需要像VBA或者VAB宏文件XLA應(yīng)用那樣直接在啟動(dòng)時(shí)加載即可使用。后面我會(huì)專門講解Excel-DNA函數(shù)的使用。

6 OpenXML SDK 及其它

    另外在有些情況下,如果再用戶沒有安裝Excel應(yīng)用程序,或者在服務(wù)器端需要?jiǎng)討B(tài)生成Excel文件的時(shí)候。我們可能需要直接讀取或者生成Excel文件,這種情況下,即使在機(jī)器上裝了Excel開發(fā)環(huán)境,調(diào)研Com組件生成Excel文件可能會(huì)導(dǎo)致效率十分低下。由于在Office 2007版本推出了新的.xlsx這種標(biāo)準(zhǔn)的格式,在這種情況下,我們可以直接使用一些能夠操作和生成Excel文件的SDK來直接進(jìn)行操作。OpenXML SDK是微軟官方推薦的操作Excel 07及以上文件格式的SDK,目前版本是2.0版本。如果要對(duì)Excel文件進(jìn)行各種定制化開發(fā)的話,建議使用OpenXML。另外從Java開源項(xiàng)目POI上移植過來的NPOI項(xiàng)目也可以直接讀寫Excel文件,這些效率都比直接調(diào)用Office的Com組件生成文檔要快的多。

二 Office開發(fā)技術(shù)方案的選擇

如前所述,要開發(fā)Excel應(yīng)用程序,有很多方案可以選擇。在作出選擇之前,根據(jù)個(gè)人經(jīng)驗(yàn),有以下幾方面需要考慮:

1 應(yīng)用程序的類型及功能

    根據(jù)Excel插件開發(fā)的功能需求,對(duì)于以些較簡單的應(yīng)用,比如一些Excel模板等,可以直接采用VBA宏進(jìn)行定制,如果具有.NET 基礎(chǔ),可以采用VSTO Document-Level的方式來開發(fā)模板;對(duì)于一些較大型的或者比較復(fù)雜的一些應(yīng)用,或者考慮到效率,編寫VAB可能難以實(shí)現(xiàn)某些功能這時(shí)可以考慮采用SharedAddin或者VSTO Addin的方式來進(jìn)行開發(fā),他能夠直接利用.NET平臺(tái)上的各種語言及類庫,并且可以使用Visual Studio這種強(qiáng)大的工具來開發(fā)和進(jìn)行調(diào)試;如果對(duì)應(yīng)用程序的跨平臺(tái),或者移動(dòng)性要求較高,或者是需要在已有的Web應(yīng)用程序上建立Office應(yīng)用程序,則可以考慮使用Office App的方式來進(jìn)行開發(fā);如果應(yīng)用程序?qū)π屎鸵筝^高,并且具有扎實(shí)的C或者C++基礎(chǔ),可以采取XLL的方式對(duì)Excel進(jìn)行擴(kuò)展;對(duì)于一些需要批量生產(chǎn)Excel文件的應(yīng)用環(huán)境,比如在服務(wù)器上生產(chǎn)Excel文件,導(dǎo)出數(shù)據(jù)到Excel,對(duì)Excel文件進(jìn)行合并分割等操作,采用OpenXML SDK、NOPI等第三方具有直接讀寫Excel文件的SDK來進(jìn)行開發(fā)能夠獲取更高的效率,另外采用第三方SDK可以使得部署的目標(biāo)機(jī)器不需要安裝Office的可編程環(huán)境。

2 程序兼容Office的版本問題

    第二個(gè)比較重要的考慮因素是應(yīng)用程序的兼容版本問題。這個(gè)問題就像是開發(fā)BS應(yīng)用程序需要考慮應(yīng)用程序的類型比如是IE還是Chrome以及版本,比如需要處理IE6 下各種頭疼的問題等等。開發(fā)Excel應(yīng)用程序也需要注意這一點(diǎn),雖然最新的Excel2013已經(jīng)推出,但是仍有大部分的客戶機(jī)器可能使用的是2003 的系統(tǒng)。這種情況下,如果使用VSTO Application Addin的方式可能不能兼容2003的系統(tǒng),并且一些特殊的UI界面如Ribbon菜單,Customer Task Panel在03版本上不兼容。這種情況下,有時(shí)候可能需要采用一些比較通用的技術(shù)如VBA,XLL,SharedAddin技術(shù)來進(jìn)行處理,另外對(duì)于一些07及以上版本中特有的UI界面和功能,使用SharedAddin開發(fā),并且如果想利用這些功能,可能需要進(jìn)行一些手動(dòng)的編碼和判斷。另外,如果采用VSTO編程,還有一個(gè)重要的考慮因素是.NET的版本問題,Excel插件通常是和其他產(chǎn)品綁定在一起發(fā)布或者銷售的,有時(shí)候可能限定平臺(tái)在.NET 2.0 上,那么選擇VSTO的版本,及開發(fā)工具的時(shí)候可能就需要注意了。如果確定目標(biāo)用戶使用的Office版本為比較新的版本,如2007或者以上,建議還是使用VSTO較高的版本進(jìn)行開發(fā),這樣可以極大地簡化開發(fā)的難度,提高應(yīng)用程序的性能。如果客戶使用的是最新版的Office,采用Office App的開發(fā)方式也是一種比較好的選擇。

三 Excel開發(fā)的未來

    微軟推出的這么多種Excel開發(fā)方式是為了滿足不同層次用戶對(duì)Excel進(jìn)行定制化而推出的解決方案。在可見的未來,微軟會(huì)對(duì)以上的開發(fā)方式提供長久的支持,只要滿足當(dāng)前應(yīng)用程序的需求,目前來看對(duì)各種技術(shù)的投資仍舊是值得的。其次,最新引入的Apps for Office基于Web技術(shù)的開發(fā)方式在發(fā)布共享,安裝部署,在線協(xié)作,定制化云服務(wù),網(wǎng)絡(luò)聚合,本地和網(wǎng)絡(luò)應(yīng)用程序兼容方面都具有一定的優(yōu)勢(shì),如果想擴(kuò)展您的程序讓更多的人使用,可以嘗試一下Apps for Office;最后在Cindy Meister大神認(rèn)為隨著微軟推出的新的Office Open XML 文件格式,使用OpenXML SDK可以直接操作Excel文件來創(chuàng)建更多的定制化功能。

四 Excel開發(fā)的資源

本文及后面的文章主要介紹ShardAddin和VSTO開發(fā),所以下面列出我所看過的覺得有用的一些資源:

1.MSDN 論壇相應(yīng)的模塊:

2.博客

3.書籍

五 結(jié)語

    本文主要介紹了Excel開發(fā)的各種方式及其特點(diǎn),并在此基礎(chǔ)上介紹了開發(fā)Excel插件技術(shù)選擇時(shí)所需要考慮的因素,最后給出了一些相關(guān)的開發(fā)資源。后面的文章將會(huì)重點(diǎn)介紹SharedAddin和VSTO開發(fā)方式,這種目前企業(yè)級(jí)的開發(fā)方式能夠開發(fā)出功能強(qiáng)大的Excel插件。后面會(huì)逐一講解Excel中的菜單系統(tǒng),Excel CTP用戶自定義面板,Excel對(duì)象模型,同步和異步自定義函數(shù),RTD自動(dòng)刷新函數(shù),Excel安裝與部署,Excel插件開發(fā)性能調(diào)優(yōu),Excel各版本兼容的Hack等內(nèi)容,希望對(duì)大家認(rèn)識(shí)和了解Excel開發(fā)有所幫助。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多