用vsto還是用vba來開發Excel報表?

來源:互聯網
上載者:User

VBA是Visual Basic for Applications
VSTO是Visual Studio Tools for Office

目前公司想用Excel來實現報表功能,我本以為VSTO是VBA的替換品,在vs.net環境下,應該使用vsto來開發Excel.看了msdn中"將代碼從 VBA 轉換到 Visual Basic .NET"的文章,更誤以為是一種替代趨勢(文章收藏於http://www.cnblogs.com/cowbird/articles/20433.aspx).不過後來我發現不是這樣,VBA 6.0沒有終結.

具體可以看下面一篇非常好的文章,文章名為"比較 Microsoft Visual Basic for Applications 6.0 與 Microsoft Visual Studio Tools for the Microsoft Office System",推薦給大家(原文取於http://www.microsoft.com/china/msdn/library/office/office/odc_ofCOMpareVBA6andvsto.mspx)

鑒於這篇文章,我們後來還是決定使用VBA來開發EXCEL.
有三個vba的理由:
1 vba可以適應多種版本的office
2 vba可以不依賴.net framework
3 微軟並沒有拋棄它(至少還沒有看出要消滅它的跡象)

另外對vsto部署還有兩個疑惑
1 vsto是把Excel部署在伺服器端,讓客戶去統一調用,那麼我還沒明白本來用vba在用戶端動態建立的EXCEL報表,用vsto去實現,什麼東西放到伺服器端?
2 伺服器端的Excel自身可以存檔嗎?

我不是很懂,歡迎大家指教

全文如下:

比較 Microsoft Visual Basic for Applications 6.0 與 Microsoft Visual Studio Tools for the Microsoft Office System發布日期: 1/6/2004 | 更新日期: 6/3/2004

Allison Balter

InfoTechnology Partners, Inc.

適用於:
Microsoft? Visual Studio? Tools for the Microsoft Office System
Microsoft Visual Basic? for Applications 6.3
Microsoft Office Word 2003
Microsoft Office Excel 2003

摘要:建立 Microsoft Visual Studio Tools for the Microsoft Office System 項目還是建立 Microsoft Visual Basic for Applications 6.0 項目:哪個更適合作為解決方案呢?閱讀本文後您將瞭解到這兩種環境有何異同,以及最後如何協同工作。

本頁內容

簡介
帶有 .NET Framework 的 Visual Studio Tools for Office 與 VBA 之間的區別
保護代碼
部署應用程式
VBA 6.0 的使命終結了嗎?
小結

簡介

Microsoft? Visual Studio? Tools for the Microsoft Office System 是隨 Microsoft Office System 提供的一項新技術,包括 Microsoft Office Access 2003 Developer Extensions。Visual Studio Tools for Office 使您可以使用 .NET 相容的語言(例如 Microsoft Visual Basic? .NET 和 Microsoft Visual C#?)為基於 Microsoft Office Word 2003 和 Microsoft Office Excel 2003 的應用程式編寫Managed 程式碼。您不僅可以使用這些語言編寫 Word 和 Excel 中的代碼,還能從 .NET Framework 提供的強大功能和較高的生產率中獲得更多好處。這些好處包括:

•

訪問 Visual Studio .NET IDE(互動式開發環境)

•

訪問 Visual Studio .NET 提供的多種調試工具

•

充分利用所有 .NET 物件模型(例如 ADO.NET)

•

使用伺服器總管

•

通過 Microsoft Office System 訪問 Microsoft .NET Framework 類的強大功能

•

為您建立的代碼選擇更高的安全性選項

•

實現完全物件導向的編程,從而可以編寫出更有效代碼

•

可以在 Excel 和 Word 應用程式中嵌入 Microsoft Windows? 表單,從而使表單包含更豐富的控制項(與 Microsoft Visual Basic for Applications [VBA] 相比)

幸運的是,您不僅可以充分利用所有這些功能,還能保留對 Word 和 Excel 物件模型的完全訪問。在 Visual Studio Tools for Office 環境中編程時,編寫的是Managed 程式碼。編寫Managed 程式碼時使用的是面向公用語言運行庫的語言,例如 Visual Basic .NET、Visual C# 和 Managed Extensions for C++ 等。而在 Word 文檔或 Excel 試算表中編寫代碼時,編寫的是Unmanaged 程式碼。

Managed 程式碼具有許多優點。與Managed 程式碼一起提供的公用語言運行庫會對代碼進行驗證,從而避免執行非法操作,例如訪問不屬於它的記憶體。Managed 程式碼還允許您訪問 Microsoft .NET Framework 及其基底類別庫。

那麼為什麼還要使用Unmanaged 程式碼呢?選擇繼續編寫非託管 (VBA) 代碼有以下幾個原因:

•

對於某些類型的應用程式來說,使用Unmanaged 程式碼更容易實現 Excel 或 Word 操作的自動化,並且需要的代碼較少。其他一些 Office 程式由於不受 Visual Studio Tools for Office 支援,實現自動化則需要使用 VBA(除非採用常規的 COM Interop 技術)。

•

Managed 程式碼並不總是適合建立 COM 增益集。

•

如果對現有 VBA 解決方案進行輕微改進,通常不需要重寫 VBA 代碼,因為它仍可以繼續運行。

•

編寫 VBA 代碼不需要部署 .NET Framework,而且並非所有組織都具備使用 .NET Framework 的條件。

•

VBA 在 Microsoft Office System 文檔內建立嵌入式代碼,這樣代碼可以與文檔一起打包。而 Visual Studio Tools for Office 代碼儲存在文檔或試算表外部,因此要求對部署技術有更全面的瞭解。

使用 Visual Studio Tools for Office,不僅可以獲得 Visual Studio .NET 和 .NET Framework 的強大功能和較高的生產率,還能獲得 Word 和 Excel 的擴充性和編程能力。

返回頁首

帶有 .NET Framework 的 Visual Studio Tools for Office 與 VBA 之間的區別

對於 Microsoft Office System 開發,在您評估是使用 VBA 項目、Visual Studio Tools for Office 項目還是同時使用兩者時,瞭解它們之間的具體區別非常重要。表 1 對這兩個項目進行了比較。

表 1:VBA 項目與 Visual Studio Tools for Office 項目的比較

用途 VBA 項目 Visual Studio Tools for Office 項目

持續的 Microsoft 支援

是

是

需要 Microsoft Office System

否

是

整合式開發環境

是

是

應用程式安全性

整合了 Microsoft Office System 的安全性功能

整合了 Microsoft Office System 和 .NET Framework 的某些安全性功能

安全性配置的難易程度

容易

可能很困難

需要更改使用者的本地安全性原則

否

是

需要大型編程架構以支援開發

否

是

需要部署 .NET Framework

否

是

可以完全訪問 Microsoft Office System 的物件模型

是

基本上可以(會有一些資料類型轉換問題)

語言支援

VBA(基於 Visual Basic 6.0)

Visual Basic .NET 和 Microsoft Visual C#

物件導向的編程環境

否

是

使用 Win32 API 的難度

高

低,可以通過 COM Interop 獲得 Win32 API 的完全支援

是否對 Microsoft Office System 中的所有應用程式可用

是

否(僅對 Word 和 Excel 可用)

是否可以使用 Web 服務

是(通過附件工具包)

是(編譯到 IDE 中)

Microsoft Windows SharePoint? Services 整合

是

是

掌握的難易程度

容易(特別是使用宏記錄器時)

算不上難,但需要瞭解 .NET Framework 的基礎知識

代碼與文檔整合

是(只有一個部署模型)

否(代碼實際上是一個程式集,提供更多靈活的部署模型)

部署支援(自動更新代碼)

否

是

支援 XML 操作

有限

廣泛

自動與 Microsoft Office System 一起安裝

是

否

需要 .NET 主 Interop 程式集 (PIA)

否

是(但 Microsoft Office System 可以自動包含這些程式集)

命名空間支援

否

是

完善程度

低

非常高

上表中的某些內容特別值得關注。首先,請注意這兩種項目都可以獲得持續的 Microsoft 支援。另外,VBA 項目可以存在於多個 Office 版本中,而 Visual Studio Tools for Office 項目僅在 Microsoft Office System 中受支援。

這兩種環境的語言支援也有較大差異。VBA 項目支援基於 Microsoft Visual Basic 6.0 的 VBA 語言。Visual Studio Tools for Office 項目支援 Microsoft Visual Basic .NET 和 Microsoft Visual C# 語言。由於 Visual Studio Tools for Office 具有物件導向的特性,因此這兩種環境之間的編程模式也有很大的不同。

兩種環境之間的部署也差別很大。雖然本文最後也討論了部署,但此處強調的是兩種項目類型在部署上的核心區別。部署 Visual Studio Tools for Office 項目還要求在目標電腦上安裝 .NET Framework。在 VBA 項目中,代碼通常作為 Word 文檔或 Excel 試算表的一部分;而在 Visual Studio Tools for Office 項目中,代碼則包含在該項目所產生的程式集中。Visual Studio Tools for Office 提供無接觸部署 (NTD) 支援,因此您無需重新調用和重新部署文檔即可更新文檔代碼。Visual Studio Tools for Office 不會自動隨 Microsoft Office System 一起安裝。使用 Visual Studio Tools for Office 建立的項目需要具有 .NET Framework 主 Interop 程式集 (PIA) 才能運行。在用戶端電腦上首次運行 Visual Studio Tools for Office 項目時,會自動按需安裝這些 PIA。所有這些加起來形成了一個比一般 VBA 應用程式稍微複雜但卻更靈活、更強大的初始部署。

安全性也是 VBA 項目和 Visual Studio Tools for Office 項目之間區別較大的一個方面。Word 或 Excel 文檔中啟動並執行 Visual Studio Tools for Office 程式集充分利用了 .NET Framework 的安全性功能。這意味著產生其他應用程式所基於的堅實的安全性基礎現在可用於 Office 解決方案中。為了確保能夠利用此優點,您還需要對程式集、信任、安全性原則以及 .NET Framework 的其他內容有更多的瞭解,不過這些努力是非常值得的。

此外,還需要注意以下幾點。Web 服務整合編譯到了 Visual Studio Tools for Office IDE 中,從而使您可以輕鬆地將 Web 服務併入 Visual Studio Tools for Office 項目。Visual Studio Tools for Office 項目提供了廣泛的 XML 支援。當然,事實上這兩種項目類型並不是互斥的。一個應用程式或解決方案可以同時包含 VBA 和 Visual Studio Tools for Office 這兩種項目。但需要注意,當使用混合代碼建立解決方案時,調試過程可能會有些麻煩,因為很難確定哪段代碼出現了問題。另外,也無法保證能夠按照預期的方式觸發事件(VBA 或Managed 程式碼)。

返回頁首

保護代碼

Visual Studio Tools for Office 本身沒有添加安全性功能,但使用它時可以使用 .NET Framework 附帶的安全性功能,以及 Microsoft Office System 項目中已有的安全性功能。您可以使用所有這些編譯到 .NET Framework 中的安全性功能來控制是否允許運行應用程式。例如,管理員可以為從特定 Intranet 伺服器上部署的所有代碼授予 FullTrust 許可權,使其可以在本機電腦上的 Word 或 Excel 中運行。如果使用者從該位置接收到包含Managed 程式碼的文檔或試算表,代碼的執行不會出現任何問題。如果使用者從其他位置接收到包含Managed 程式碼的文檔,雖然可以開啟文檔,但不會執行代碼。

每個使用者的電腦都有一組規則,指定允許執行哪些代碼以及執行哪些操作。在執行代碼之前,公用語言運行庫會收集憑證。憑證基於代碼的來源(伺服器名稱)以及程式集是否已簽名。憑證會映射到特定策略,策略分為四種:電腦、使用者、企業和主機。策略可以不包含任何程式碼群組,也可以包含多個程式碼群組。程式碼群組會提供從憑證到許可權集的映射。許可權集包括一個或多個許可權。許可權是指執行某項操作的權利。公用語言運行庫使用獲得的憑證將程式集映射到程式碼群組,然後程式碼群組再將程式集映射到四個策略的交叉部分。此映射決定了代碼是否可以執行,如果可以,可以執行哪些操作。

返回頁首

部署應用程式

您可以根據具體需求,將編譯 Visual Studio Tools for Office 項目時建立的 DLL 放到以下三個位置中的一個位置:如果與代碼關聯的文檔供單個電腦上的單個使用者使用,則可以將代碼與文檔一起放到該使用者的電腦上。如果與代碼關聯的文檔供多個使用者訪問,則可以將代碼儲存在網際網路共用位置,使每個用戶端電腦每次都可以訪問到最新的代碼。第三種選擇就是將代碼儲存在企業 Intranet 或安全的 網際網路網站上。這三種選擇各有利弊。

在第一種選擇中,文檔和程式集都儲存在單個使用者的電腦上。它的優點是,使用者無需串連到網路或 Internet 即可使用您產生的解決方案。主要缺點是需要部署應用程式更新。

在第二種選擇中,使用者將文檔儲存在自己的電腦上,而將程式集儲存在一個遠程共用位置。這使每個使用者都可以保留“資料”(本例中為 Word 或 Excel 文檔)的一個專用副本,同時又能訪問最新版本的程式集。最大的缺點是使用者需要串連到網路或 Internet 才能使用應用程式。.NET Framework 提供了“無接觸部署”功能,使您可以輕鬆地修改代碼並將其部署到使用者。修改代碼後,可以將 DLL 重新部署到其原始位置。當使用者下次開啟 Word 或 Excel 檔案時,電腦會在檢測到 DLL 更新後自動將最新版本下載到使用者的電腦上並運行最新版本。此過程不需要使用者參與。

在第三種選擇中,使用者將文檔和程式集都儲存在遠程網際網路共用位置。這使使用者可以充分利用 Word 和 Excel 提供的文檔協作功能,主要缺點是需要始終與網路保持串連。

返回頁首

VBA 6.0 的使命終結了嗎?

下一版 Microsoft Office System 仍然會使用 VBA 6.0,如果不再使用 VBA,Microsoft 會提供遷移策略。VBA 6.0 中包含大量舊代碼。很多情況下,可能沒有必要重寫現有的代碼。但 .NET Framework 提供的顯著優點和功能可能會使您重新考慮是否需要對某些解決方案進行改進。在 Microsoft Office System 中,沒有對 VBA 6.0 進行語言方面的改進。

當然,對於初級開發人員來說,第一次使用 Visual Studio Tools for Office 時需要掌握太多東西。對於初學者來說,學習如何建立 Office 解決方案時,宏錄製仍不失為一種好方法,而此功能只能在 VBA 中實現。初級開發人員仍然可以把部分開發精力放在 VBA 6.0 上,而具備一定經驗的開發人員則可以在 Visual Studio Tools for Office 環境中將解決方案的一部分產生為Managed 程式碼。這兩種技術不僅可以共存,還可以互為補充,在同一個解決方案中協同工作。

返回頁首

小結

Visual Studio Tools for Office 對 Microsoft Office System 開發來說無疑是一次革命性的飛躍。它使您不僅可以獲得 .NET Framework 的強大功能和較高的生產率,還能獲得 Microsoft Office System 的擴充性和編程能力。Visual Studio Tools for Office 使 Visual Studio .NET 開發人員可以產生基於 Microsoft Office System 的應用程式,同時又能繼續使用熟悉的編程環境,充分利用 Web 服務可靠的安全性、易於部署的特性和支援功能。

在可預見的將來,VBA 6.0 和 Visual Studio Tools for Office 將通過某種形式實現共存。開發人員可以繼續享受 VBA 和宏記錄器為 Office 環境帶來的快速應用程式開發的好處。隨著 Visual Studio Tools for Office 和 Microsoft Office System 開發的不斷成熟,.NET Framework 為 Office 環境帶來的強大功能和優勢也日益明顯。鑒於上述原因,我們相信這兩種技術的結合將指日可待。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.