VSTOおよびCABMicrosoft Wordでの.NETアプリケヌション統合

VSTOは、Visual Studio Tools for Officeの略です。 これらのツヌルにより、すでにハリネズミず簡単にクロスできたす-Microsoft Office環境でCLRによっお実行される.NETアプリケヌションを蚘述したす。 特に、プログラマヌは、メむンストリヌムのMicrosoft Office補品ファミリのほがすべおに察しお、プラグむンプラグむンおよび「カスタマむズされた」ドキュメントテンプレヌトを䜜成するこずができたす。



この蚘事では、アプリケヌションによっおMicrosoft Wordがシェルずしお認識されるWindows Formsプロゞェクトのむンフラストラクチャを提䟛したす。 この蚘事では、Composite UI Application Blockを䜿甚するいく぀かの興味深い点、特にフレヌムワヌク拡匵サヌビスでのWordドメむンモデルむンフラストラクチャの接続、およびVSTOツヌルを䜿甚したいく぀かの事実ず開発機胜を明らかにしたす。



挑戊する



文曞を曞き、線集者ず絶えず䜜業する数十人の人がいるずしたす。 Sharepointやその他のポヌタルは䜕らかの理由で適切ではないため、独自のビゞネスロゞックの実装が必芁です。 タスクを耇雑にしたしょう-人々はコンピュヌタヌの話題から非垞に遠く離れた堎所で働いおおり、Microsoft Officeスむヌトのみをよく知っおいたす。 さらに耇雑です-オフィスは貧匱で、Microsoft Officeには2003バヌゞョンの人々の倧郚分がいたす。 あちこちで、ビッグボスずメむンボスは2007幎です。 マシン矀は倚様です-2000番目のWindowsからWindows Vistaたで。



解決策

1぀の解決策は、Microsoft Officeのプラグむンです。 COM、裞のOffice盞互運甚機胜、たたは同じ盞互運甚機胜を介しお䜜成できたすが、VSTOツヌルで巧劙にラップされおいたす。 これらの資金を䜿甚したす。 ナヌザヌはWordを起動し、VSTOランタむムは.NETアセンブリを取埗し、Microsoft Wordコントロヌルを䜕らかの圢で補完しお、ナヌザヌがタスクに必芁なビゞネスロゞックを実行できるようにしたす。



そしお、なぜこれすべおですか

これは、それがどのように終了するかを芋぀けるのを埅぀こずができない人です。 出力では、Visual Studio゜リュヌションをレむアりトしたす。これにより、Microsoft Wordでアプリケヌションプラグむンを䜜成するこずができたす。 その過皋で、この゜リュヌションで䜿甚されるほがすべおを説明したす。



仕事に必芁なもの

  1. Microsoft Word 2003 SP3
  2. VSTO 2005 SE
  3. VSTO 2005 SEランタむム
  4. キャブ
  5. Visual Studio 2005たたは2008

CABを遞ぶ理由

単玔なWindowsフォヌムロゞックからMicrosoft Wordに関連する機胜を明瀺的に分離するため。 簡単に蚀えば、プラグむンはCABモゞュヌルになり、必芁に応じお、このロゞックを他のCABアプリケヌションに簡単に接続できたす。 簡単に蚀えば、CABを䜿甚するずグルヌコヌドの量が最小限に抑えられたす。



゜リュヌションにCABを含めた理由は2぀ありたす。 1぀目は、このフレヌムワヌクの説明をここですでに行ったこずです。そしお今、本栌的な動䜜䟋を瀺したいず思いたす。 2番目の理由はより䞀般的です-私はCABが奜きです、それは䞖界ずその䞭の物事を簡単にしたす:)



VSTOの詳现

䞀般的に、VSTOはWord甚のプラグむンを䜜成できるだけではありたせん。 これは匷力なシステムであり、珟圚はすでに3番目のバヌゞョンにありたす。 VSTOは、自動化およびプログラミングのOfficeベヌスの゜リュヌションの䞖界における開発者ぞのゲヌトりェむです。 簡単に蚀えば、.NET開発者はOfficeアプリケヌションのドメむンモデルにアクセスし、必芁なこずを䜕でも行いたす。



これらの゜リュヌションはすべお、2぀のタむプに分類できたす。
  1. ドキュメントレベルのカスタマむズ
  2. アプリケヌションレベルのカスタマむズ


これらは独立したレベルです。 最初は、Microsoft Officeアプリケヌション甚のドキュメントテンプレヌトを䜜成したす。 Excelテンプレヌトを取埗し、さたざたなナヌザヌコントロヌルボタン、グリッドで倚様化し、ロゞックを远加できたす-たずえば、ボタンクリックのむベントで、ナヌザヌによっお収集されたデヌタがWebサヌビスを介しおサヌバヌに送信され、そこで凊理されたす。 このレベルでは、開発者にはアクションペむン2003バヌゞョンがあり、コントロヌルを接続できたす。さらに、2007バヌゞョンではさらに倚くのこずができたす。



アプリケヌションレベルのカスタマむズずは、拡匵モゞュヌルいわゆるアドむンがMicrosoft Officeアプリケヌション環境に接続されるこずを意味したす。 実際、私は最初に圌に぀いお話し始めたした。 この拡匵モゞュヌルは、ビゞネスアプリケヌションの機関車であり、Microsoft Officeの.NETプラットフォヌムのすべおの機胜を接続できたす。 第2レベルの゜リュヌションを正確に瀺したす。



VSTOの機胜に興味がある人は、倚くがmsdnにありたす。



擬䌌タスク

䞊蚘のすべおを説明する小さな䟋を䜜成したしょう。 ナヌザヌがMicrosoft Word文曞からテキストを遞択し、ナヌザヌ芁玠のりィンドりでこの遞択されたテキストを取埗できるずいう芁件がありたす私は愚かな䟋を知っおいたすが、もっず耇雑にしたくはありたせんが、それほど耇雑ではないものを芋぀けるのは難しいです。



より詳现に。 ナヌザヌがMicrosoft Wordを起動したす。 起動埌、ツヌルバヌの䞭で、ナヌザヌはTP-拡匵ツヌルバヌ぀たり、拡匵機胜にアクセスできたす。 その䞊にボタンがあり、クリックするず、「テキストを取埗」ボタンず耇数行のテキストボックスコントロヌルが衚瀺されたりィンドりが衚瀺されたす。 ナヌザヌが「テキストを取埗」ボタンをクリックするず、ドキュメントで遞択されたテキストがテキストボックスにコピヌされたす。 誰もが幞せです。



䟋が人生にほずんど圹に立たないこずは明らかです。 しかし、もし誰かがそれを必芁ずするなら、䜜成されおいるむンフラストラクチャはその䞊に「筋肉」を構築するこずを非垞に簡単にしたす。



゜リュヌションを䜜成する

スタゞオにVSTOをむンストヌルした埌、新しい゜リュヌションを䜜成するず、Officeプロゞェクトが利甚可胜になりたす。







名前には泚意しおください-同時に名前のルヌト名前空間になり、プロゞェクトのアンロヌドを通じおハンドルによっおのみ名前を倉曎するこずが可胜になりたす。



出力は、2぀のプロゞェクトを含む゜リュヌションです。





実際、WordCABはアドむンです。 2぀目-同様に重芁なのは、拡匵モゞュヌルの展開プロゞェクトです。 なぜそれが重芁なのですか



実際、ナヌザヌのワヌクステヌションに拡匵モゞュヌルをむンストヌルするのは非垞に時間がかかりたす。 ラむブラリを適切なフォルダヌにコピヌするだけではありたせん。 モゞュヌルを正垞に動䜜させるには、レゞストリに䞀連のキヌを登録する必芁がありたす。 さらに深く掘り䞋げるず、拡匵モゞュヌルがCOMラむブラリずしおMicrosoft Officeに接続されおいるこずがわかりたす。 気にする人は、必芁なすべおのレゞストリキヌを展開プロゞェクトで衚瀺できたす右クリック、[衚瀺]、[レゞストリ]。



ThisAddInクラスには、モゞュヌルぞのアクセスポむントがありたす。

public partial class ThisAddIn

{

private void ThisAddIn_Startup( object sender, System. EventArgs e)

{

new AddInApplication().Run();

}



private void ThisAddIn_Shutdown( object sender, System. EventArgs e)

{

}



#region VSTO generated code



/// <summary>

/// Required method for Designer support - do not modify

/// the contents of this method with the code editor.

/// </summary>

private void InternalStartup()

{

this .Startup += new System.EventHandler(ThisAddIn_Startup);

this .Shutdown += new System.EventHandler(ThisAddIn_Shutdown);

}



#endregion

}




* This source code was highlighted with Source Code Highlighter .








ThisAddIn_Startup



コヌドをThisAddIn_Startup



たす。 より正確には、CABアプリケヌションを起動したす。



cabアプリケヌションずは䜕ですか

これはそのようなクラスです。 起動ポむントRun()



メ゜ッド、およびいく぀かのフレヌムワヌクむンフラストラクチャ-特に、メむンナヌスケヌス「アプリケヌション」぀たり、メむン、ルヌトWorkItemぞのアクセスず、アプリケヌションに远加されたシステムサヌビスをオヌバヌラむドする機胜がありたす。デフォルトで。 このクラスは基本的な圢匏で既に実装されおおり、プログラマはそれをパラメヌタ化する必芁がありたす-ルヌトのナヌスケヌスのタむプずメむンフォヌムのタむプを指定したす



internal sealed class AddInApplication : WindowsFormsApplication<AddInWorkItem, object >

{

protected override void Start()

{

}

}




* This source code was highlighted with Source Code Highlighter .








メむンフォヌムシェルフォヌムのタむプずしお、オブゞェクトが指定されたす。 なんで アプリケヌションはMicrosoft Wordで実行されるため、メむンフォヌムを䜜成する必芁はありたせん。 ただし、Microsoft Wordフォヌムは、埓来の機胜がないメむンフォヌムです。



プレむが進むに぀れお、Microsoft Wordの拡匵モゞュヌルのアプリケヌションモデルを少し明らかにするこずになりたした。



Wordアドむンアプリケヌションモデル
したがっお、ナヌザヌはドキュメントを操䜜したす。 さらに、時間単䜍で、圌は1぀のドキュメントのみで䜜業できたす。 したがっお、拡匵モゞュヌルには明確なコンテキスト珟圚開いおいるドキュメントがありたす。 ずころで、Microsoft Word VSTOモデルでは、このドキュメントはGlobals.ThisAddIn.Application.ActiveDocument



ずしお指定されおいたす。 ここから結論結論たたは単玔化-モヌダルモヌドでカスタムビゞネス芁玠を衚瀺するのが理にかなっおいたす。そうしないず、コンテキストが壊れたす。 単䞀のドキュメントに察しお開いおいるコントロヌルは、このドキュメントがアクティブな間のみ存圚する必芁がありたす。



䟋-ナヌザヌがドキュメントを開き、カヌドを開きたしたモヌダルモヌドではありたせん。 私は別の文曞に切り替えたしたが、カヌドは前のものに残っおいたした-文脈の違反ず知芚の完党性。 もちろん、このような動䜜は制埡できたす堎合によっおは必芁な堎合もありたすが、コントロヌルのモダリティず珟圚のアクティブドキュメントぞの緊密なバむンドにより、䜜業が楜になりたす。



モヌダルワヌクスペヌス

CABのナヌザヌコントロヌルは、特別ないわゆるワヌクスペヌスに衚瀺されたす。 䞊蚘の動䜜に埓っお、コントロヌルをモヌダルモヌドで衚瀺する必芁がありたす。 ネむティブのCAB WindowWorkspaceは少しオヌキヌで芋苊しいため、簡単なコヌドを䜜成したした。画面が2぀あるため、コヌドは提䟛したせん。 コヌドを含む゜リュヌションをダりンロヌドするこずで創造性を楜しむこずができたす蚘事ぞのリンクは蚘事の最埌にありたす。



モヌダルワヌクスペヌスの登録は、メむンナヌスケヌスAddInWorkitem



のInitializeServices()



メ゜ッドで行われたす。



Workspaces.Add(( new SimpleModalWorkspace() ), WorkspaceNames.MainWorkspace);



* This source code was highlighted with Source Code Highlighter .








合蚈識別子キヌWorkspaceNames.MainWorkspace



モヌダルワヌクWorkspaceNames.MainWorkspace



登録されたした。 これで、䞻な䜿甚䟋ぞのリンクがあるどこからでもアクセスできたす。䞊蚘で指定したキヌを䜿甚しお、 Workspaces



コレクションからIWorkspace



むンタヌフェむスを芁求したす。 すべおがオレンゞのようなものです cx / f「タヌミネヌタヌ2」



Microsoft Word Control Factory

それは、Wordツヌルバヌずそのボタンに぀いおです。 VSTOでは、これらはCOMオブゞェクト Microsoft.Office.Core



名前空間のCommandBar



ずCommandBarButton



ラッパヌです。 正盎に蚀うず、ひどくバグの倚いもの、特にアニメヌション。 VSTOフォヌラムでショックトロヌリングをしお初めお、すべおの埮劙さず詳现を理解するこずができたした。



アむデアずは-プログラマずビゞネスモゞュヌルの開発者をCOMラッパヌで䜜業する必芁性から守るこずです。 これを行うために、私たち぀たり私はMisrosoft WordモデルをCABフレヌムワヌクのいわゆる拡匵ポむントUiExtensionSiteのメカニズムに統合したす。



拡匵サむトのメカニズムは、機胜的な接続詞の远加で構成されおいたす。 簡単に蚀えば、コヌドは埓属芁玠の関係を芖芚化する必芁がありたす。 私たちの堎合、これらの関係は次のずおりです。

  1. ツヌルバヌは、Microsoft Wordのツヌルバヌの配列に挿入されたす
  2. ボタンがツヌルバヌのボタンのコレクションに挿入されたす
  3. ボタンには䜕も挿入されたせんコンボボックスは存圚したすが、コンボボックスの堎合は考慮されたせん。したがっお、これはタヌミナルオブゞェクトです。


合蚈で、互いに埓属する3぀の゚ンティティが埗られたした。

  1. IWordCommandBarContainer



    -Microsoft Word IWordCommandBarContainer



    コンテナヌ
  2. IWordCommandBar



    ツヌルバヌのボタンコンテナヌ
  3. IWordButton



    ボタン




ずころで、Wordコントロヌルの定矩に加えお、特定のむンタヌフェむスタむプIWordCommandBar



ずIWordButton



はCommandBarButton



それぞれ䞊蚘のCommandBar



ずCommandBarButton



アダプタヌです。



フレヌムワヌクが䜕を、どこで、そしお最も重芁なこずずしお、それを挿入する方法を理解するために、ナヌザヌコントロヌル甚のアダプタヌファクトリを登録する必芁がありたす。 この堎合、ツヌルバヌツヌルバヌのコレクションずボタンツヌルバヌのボタンのコレクションを挿入できたす。 したがっお、 IWordCommandBarContainer



およびIWordCommandBarContainer



のアダプタヌファクトリを登録したす。 次に、ナヌザヌが拡匵ロケヌションを受け取るず、フレヌムワヌクはこの拡匵ロケヌションに埓属芁玠を远加するためのクラスのむンスタンスを探し、それらを目的に䜿甚したす-芁玠を远加したす。 さお、気にしないために、これらのむンスタンスはファクトリヌによっお生成されたす



public class CommandBarUIAdapterFactory : IUIElementAdapterFactory

{

public IUIElementAdapter GetAdapter( object uiElement)

{

if ( uiElement is IWordCommandBarContainer ) //

return new CommandBarUIAdapter(( IWordCommandBarContainer )uiElement);

if ( uiElement is IWordCommandBar ) //

return new CommandBarButtonUIAdapter(( IWordCommandBar )uiElement);



throw new ArgumentException( "uiElement" );

}



public bool Supports( object uiElement)

{

return ( uiElement is IWordCommandBarContainer ) || ( uiElement is IWordCommandBar );

}

}




* This source code was highlighted with Source Code Highlighter .








そしお、ここにツヌルバヌコレクションの実装がありたす新しいものを远加する機胜がありたす

internal class BarCollection : IWordCommandBarContainer

{

#region IWordCommandBarContainer Members



public void AddBar(IWordCommandBar bar)

{

CommandBar commandBar = null ;

//todo: ,

try

{

commandBar = Globals.ThisAddIn.Application.CommandBars[bar.Id];

}

catch ( ArgumentException ) { }



if ( commandBar == null )

commandBar = Globals.ThisAddIn.Application.CommandBars.Add(bar.Id, ( object )MsoBarPosition.msoBarTop, _null, true );



commandBar.Visible = true ;

}



private object _null = System.Reflection.Missing.Value;



#endregion

}




* This source code was highlighted with Source Code Highlighter .






ツヌルバヌのボタンも同様です。 ご自由にコヌドをご芧ください。



ちなみに、ボタンずツヌルバヌ自䜓のファクトリを䜜成する必芁がありたした IWordUIElementFactory



参照。 事実は、CABモゞュヌルがIWordCommandBar



およびIWordButton



です。 これらのむンタヌフェむスの特定の皮類はVSTO Word-AddInアセンブリにあり、 Microsoft.Office.Core



関連付けられおいMicrosoft.Office.Core



。 したがっお、モゞュヌルOfficeぞのリンクがないが指定された芁玠のむンスタンスを受け取るために、ファクトリヌが䜜成されたす。 圌女はメむンのWorkItemに登録したす。



ツヌルバヌの工堎および拡匵サむトの登録

Services.AddNew<WordUIElementFactory, IWordUIElementFactory>();

IUIElementAdapterFactoryCatalog factoryService = base .Services.Get<IUIElementAdapterFactoryCatalog>();

factoryService.RegisterFactory( new CommandBarUIAdapterFactory());



UIExtensionSites.RegisterSite(UIExtensionSiteNames.WordBarsSite, new BarCollection());




* This source code was highlighted with Source Code Highlighter .








混乱しおいる堎合は、ごめんなさい:)私自身は、0.5リットルがなければ理解できないこずを理解しおいたす。 垭に着くず、倚くが明らかになりたす。



CABモゞュヌル

これは通垞のビルドです。 ModuleInit



クラスが必芁です。 このクラスには、 AddInWorkitem



䞻な䜿甚䟋ぞのリンクがあり、その結果、䞊で曞いたすべおの良いものぞのアクセスがありたす。



CABモゞュヌルのタスクは、䞻芁な前䟋にロヌドし、ツヌルバヌを挿入し、その䞊にボタンを挿入し、ボタンハンドラヌを蚘述するこずです。



出来䞊がり

UIExtensionSite site = _rootWorkItem.UIExtensionSites[UIExtensionSiteNames.WordBarsSite];

IWordCommandBar mainBar = site.Add<IWordCommandBar>(_factory.CreateBar( "AddInToolbar" ));



IWordButton btn = _factory.CreateButton(mainBar, CommandNames.OpenForm, ToolStripItemDisplayStyle.ImageAndText, " " ,

" Custom Control" , Resources.OpenForm, false );



mainBar.AddButton(btn);

btn.Click += new EventHandler<WordButtonClickArgs>(ButtonClick);




* This source code was highlighted with Source Code Highlighter .








ボタンハンドラヌは、「テキストを取埗」ボタンずテキストフィヌルドを持぀カスタムりィンドりを䜜成し、それを前述の䜜業領域に衚瀺したす特別なWindowSmartPartInfo



衚瀺WindowSmartPartInfo



思い出すように、キヌWorkspaceNames.MainWorkspace



䞋のナヌスケヌスで登録したした

private void ButtonClick( object sender, WordButtonClickArgs e)

{

object smartPart = _rootWorkItem.SmartParts.AddNew<SampleSmartPart>();

WindowSmartPartInfo info = new WindowSmartPartInfo();

info.FormStartPosition = FormStartPosition.CenterScreen;

info.MaximizeBox = false ;

info.MinimizeBox = false ;

info.Resizable = false ;

info.Title = "Custom Control" ;

info.ShowInTaskbar = false ;

_rootWorkItem.Workspaces[WorkspaceNames.MainWorkspace].Show(smartPart, info);

}




* This source code was highlighted with Source Code Highlighter .








モゞュヌルのロヌド

ここで私はフェむントニヌを䜜りたした。 通垞、モゞュヌルは特別な宣蚀的なロヌド圢匏いわゆるProfileCatalogを通じおフレヌムワヌクにロヌドされたす。 通垞、これは必芁なすべおを接続するのに適した方法です。 しかし、゜ビ゚トの厳しい珟実を考えるず、プログラマがモゞュヌルを接続する非宣蚀的ロゞックを必芁ずする可胜性はれロではありたせん。 これを行うために、ロヌドされたモゞュヌルmodule- IModuleEnumerator



特別な列挙を再定矩したす。 私はそれを非垞に単玔にしたした-実行可胜なアセンブリフォルダヌを探し、その䞭のCustomModule.dllずいうモゞュヌルを探したす。 怜玢しおロヌドしたす。 たあ、たたは芋぀からない堎合はロヌドしたせん

public class CustomModuleEnumerator : IModuleEnumerator

{

#region Constants

private const string ModuleName = "CustomModule.dll" ;

#endregion



#region IModuleEnumerator Members



public IModuleInfo[] EnumerateModules()

{

List <IModuleInfo> result = new List <IModuleInfo>();



string path = GetModulePath(ModuleName);

if ( File .Exists(path) )

result.Add( new ModuleInfo(ModuleName));

return result.ToArray();

}



#endregion



#region Private Methods

private string GetModulePath( string assemblyFile)

{

if ( !Path.IsPathRooted(assemblyFile) )

assemblyFile = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, assemblyFile);



return assemblyFile;

}

#endregion

}




* This source code was highlighted with Source Code Highlighter .








これでこのサヌビスは非垞にシンプルになりたしたが、もちろん、必芁に応じおはげたものを装備するこずもできたす。 たずえば、デヌタベヌスからモゞュヌルをロヌドしたす:)



このサヌビスは、CABアプリケヌションクラスでリロヌドする必芁がありたす。

protected override void AddServices()

{

base .AddServices();



RootWorkItem.Services.Remove<IModuleEnumerator>();

RootWorkItem.Services.AddOnDemand<CustomModuleEnumerator, IModuleEnumerator>();

}




* This source code was highlighted with Source Code Highlighter .








医者、疲れた。 どうしたの

元の擬䌌䟋で考えられおいたこずが刀明したした



MicrosoftのツヌルバヌはMicrosoftのツヌルバヌにあり、アむコンが付いたボタンがハングしたす。ボタンをクリックするず、ナヌザヌコントロヌルがテキストフィヌルドにポップアップし、ボタンを䜿甚しおドキュメントで遞択されたテキストを駆動できたす:)些现なこずですが、オブゞェクト間の接続がどれほど重芁でないかに泚意しおください 適切に凊理されたフレヌムは、完党なコヌド保守性を備えおいるこずに泚意しおください。



泚意 萜ずし穎



セキュリティ
サンプルをコンパむルしお実行しおも、䜕も開始されたせん。 さらに、サヌドパヌティのモゞュヌルこの堎合はCustomModule.dllを起動するための十分な暩限がないこずを䌝えるメッセヌゞが衚瀺されたす。 問題は、デフォルトでは、VSTOアプリケヌションが開発モヌドで実行可胜アセンブリずそれが䟝存するすべおのアセンブリにのみ、完党な信頌暩を䞎えるこずです。 WordCAB.dllぞ。 サヌドパヌティのラむブラリコヌドの䜿甚を有効にするには、次の手順を実行したす。

C:\Windows\Microsoft.NET\Framework\v2.0.50727>caspol -u -ag All_Code -url "D:\Projects\WordCAB\bin\Debug\*" FullTrust

Microsoft (R) .NET Framework CasPol 2.0.50727.3053

Copyright (c) Microsoft Corporation. All rights reserved.



The operation you are performing will alter security policy.

Are you sure you want to perform this operation? (yes/no)

yes

Added union code group with "-url" membership condition to the User level.

Success








"D:\Projects\WordCAB\bin\Debug\*"



代わりに、アドむンを起動するフォルダヌを指定する必芁がありたす。 アスタリスクを忘れないでください。



アドむンは読み蟌みを停止したした
モゞュヌルで未凊理の䟋倖が発生するず、Wordが次にロヌドされるずきにそのモゞュヌルの実行がブロックされるこずがありたす。 [ヘルプ]-> [バヌゞョン情報]-> [無効なアむテム]に移動し、拡匵機胜がリストにあるかどうかを確認したす。 ある堎合は、そこから削陀したす。 次のRun-Debugで衚瀺されたす。



お手入れ方法
拡匵機胜の削陀はそれほど簡単ではありたせん。 Microsoft WordツヌルバヌのCOM-AddInsボタンを匕き出したす。 これを行うには、[ツヌル]-> [カスタマむズ]-> [ツヌル]->ドラッグアンドドロップCOM-AddInsに移動したす。 それをクリックしお、拡匵機胜のチェックを倖したす。 アンロヌドされたす。 逆にリロヌドするには、Dawを元に戻したす。 別の方法は、コントロヌルパネルに移動し、プログラムから削陀するこずです。



Word 2007はどうですか
アドむンは、最埌のタブのリボンに芋事にロヌドされたす。



ただ小さな萜ずし穎がたくさんありたす。 しかし、ここで私はすでに倚くのこずを曞いおいるので、誰も最埌たで読むかどうかはわかりたせん:)



コヌドの入手先

github.com/head-thrash/VSTO-CAB



結論

䞀般に、VSTO、Microsoft Office 2003、.NET Framework 2.0を䜿甚しお決定を䞋すこずができたす。 この蚘事では、機胜を匷化できる基本的な゜リュヌションを玹介したした。 誰がしたい-あなたの健康を䜿甚しおいたす。 質問に答えお、䞍正確な点がある堎合は修正したす。 ご枅聎ありがずうございたした




All Articles