2011-11-10 57 views
3

Microsoft Office Interopを使用してExcelファイルを開きます。ファイルは、ワークブックコードがファイルを読み取る特別なフォルダーに配置されます。今、Excelファイルをどこにでも配置できるという要件があります。私は最良の方法は、Excelファイルを埋め込みリソースとして添付することです。しかし、埋め込みリソースとして添付すれば、Excelワークブックを使用してファイルをどのように読み取ることになりますか。Excelワークブックファイルを開く埋め込みリソースを使用する

_excelapplication.Workbooks.Open(Filename: pExcelTemplatePath); 

ファイルの場所に関係なく、Excelテンプレートファイルを読むにはどのような方法が最適ですか?すなわち、例えば最初のリソースからそれを読んで(で -

+0

テンプレートを編集するか、それに基づいて新しい文書を作成しますか? – Yahia

+0

それに基づいて新しい文書を作成するだけです。ビルドアクションをコンテンツに設定したので、公開されたフォルダにファイルが表示されます。 clickonceに関する – azamsharp

+0

については、http://msdn.microsoft.com/en-us/library/6fehc36e.aspxを参照してください。 – Yahia

答えて

6

あなたが埋め込まれたリソースから直接開くことができません - 少なくともない相互運用を...

をあなたはどこかにファイルとして保存する必要があります。その後、Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceNameOfEmbeddedExcelFile))と別のオプションは、ストリームからExcelファイルを編集/開くことができるライブラリを使用することですApplicationData/CommonApplicationData/LocalApplicationData/MyDocuments/CommonDocuments from Environment.SpecialFolder

ようないくつかの場所に、そのストリームを書く - あなたは図書館へのリンクが必要な場合は私に知らせて...

+0

私はそれらのライブラリへのリンクは気にしません。人々がOfficeドキュメントをストリームから編集できるようにする方法を検討しています。 – BigBadOwl

+0

@BigBadOwlあなたは新しい質問を投稿するべきだと思います...ストリームから開くことができるほかに、「人々がOfficeドキュメントをストリームから編集できるようにするために」必要な機能は何ですか?どのオフィスフォーマット(Excel、Word、Powerpoint ... 2003年および/または2010年)? – Yahia

0

まず、この関数を使用してリソースファイルのストリームを取得する必要があります。

public static Stream GetResourceFileStream(string fileName) 
      { 
       Assembly currentAssembly = Assembly.GetExecutingAssembly(); 
       // Get all embedded resources 
       string[] arrResources = currentAssembly.GetManifestResourceNames(); 

       foreach (string resourceName in arrResources) 
       { 
        if (resourceName.Contains(fileName)) 
        { 
         return currentAssembly.GetManifestResourceStream(resourceName); 
        } 
       } 

       return null; 
      } 

次にストリームをファイルHow do I save a stream to a fileに保存できます。

それを開きます:How to open an Excel file in C#

関連する問題