0

グリッドビューがあり、グリッドビューをMS Wordにエクスポートする必要があります。これは正常に機能しますが、MsWordの各ページにカスタムヘッダーとフッターを配置する必要があります。エクスポートされたグリッドビューでasp.netからマクロを実行して、エクスポートされたグリッドビューにカスタムヘッダーとフッターを配置し、印刷されたページの余白を調整することはできますか?

どんな助けでもありがたいです。

ありがとう。

4

2 に答える 2

1

このチュートリアルでは、.NETを使用してマクロを呼び出す方法を説明します。これは、シナリオに関連する手順の概要です(GridViewを既にエクスポートしている場合は、この設定の一部がすでにある可能性があります)。

MicrosoftWordライブラリへの参照を追加します。

  1. [プロジェクト]メニューで、[参照の追加]をクリックします。
  2. [COM]タブで、Microsoft Word 10.0 Object LibraryまたはMicrosoft Word 11.0 Object Library
  3. クリックSelect

次に、これらの参照をコードビハインドに追加します。

using System.Reflection;
using Word = Microsoft.Office.Interop.Word;
using Microsoft.Office.Core;

このヘルパーメソッド(マクロの実行を処理する)を追加します。

private void RunMacro(object oApp, object[] oRunArgs)
{
    oApp.GetType().InvokeMember("Run",
    System.Reflection.BindingFlags.Default |
    System.Reflection.BindingFlags.InvokeMethod,
    null, oApp, oRunArgs);
}

次に、マクロを呼び出すには、以下を使用します(特定のニーズに合わせてこれを変更する必要があります)。

private void CallCustomHeaderFooterMacro(string filename, string pageTitle, string author)
{
    Word.ApplicationClass oWord = new Word.ApplicationClass();
    oWord.Visible = false;
    Word.Documents oDocs = oWord.Documents;
    object oFile = filename;

    // Used for optional arguments
    object oMissing = System.Reflection.Missing.Value;

    // CHOOSE THE APPROPRIATE CALL, DEPENDING ON THE LIBRARY YOU REFERENCE
    // Microsoft Word 10.0 Object Library
    Word._Document oDoc = oDocs.Open(ref oFile, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing);

    // Microsoft Word 11.0 Object Library
    // Word._Document oDoc = oDocs.Open(ref oFile, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing);

    // Run the 'CustomHeaderFooter' Macro.
    /* Change "CustomHeaderFooter" to your macro name.
     * You can send parameters to your macro such as: 
     * a Page title, author, date or other data you need to create the customised 
     * header and footer. You add and remove these as required. I have used pageTitle
     * and author as an example
    */
    RunMacro(oWord, new Object[]{"CustomHeaderFooter", pageTitle, author});

    // Save (as required)

    // Quit Word and clean up.
    oDoc.Close(ref oMissing, ref oMissing, ref oMissing);
    System.Runtime.InteropServices.Marshal.ReleaseComObject (oDoc);
    oDoc = null;
    System.Runtime.InteropServices.Marshal.ReleaseComObject (oDocs);
    oDocs = null;
    oWord.Quit(ref oMissing, ref oMissing, ref oMissing);
    System.Runtime.InteropServices.Marshal.ReleaseComObject (oWord);
    oWord = null;
}

これは、ドキュメントにこのようなマクロを設定している場合に機能します。

Public Sub CustomHeaderFooter(sPageTitle As String, sAuthor As String)
    ' Your code to create the header and footer as required.
    ' The easiest way to get the macro code is to open the base document and
    ' and record the actions that you need such as adjusting the print margins
    ' and adding the custom headers and footers, then modify the resultant code
    ' to accept your parameters.
End Sub

ASP.NETでは、次のように呼び出します(ファイルパスと適切なパラメーターを調整します)。

CallCustomHeaderFooterMacro(Server.MapPath("~/mydocument.docx"), "Sample Title", "John Smith");

これが明確であることを願っています。明らかに、実際のヘッダーとフッターを生成するためのマクロコードを提供することはできませんが、上記のように、最も簡単な方法は、アクションを記録し、生成されたコードを手動で調整することです。


編集:補足として。Microsoftは、サーバー側アプリケーションからのOfficeオートメーションの使用、つまりASP.NETからの呼び出しを推奨していません。この記事では、ここで説明し、Officeドキュメントを操作するための代替メカニズムを提供します。これは、役立つ場合と役に立たない場合があります。しかし、プロジェクトに必要なスケーラビリティによっては、それが役立つかもしれないと思いました。

于 2012-09-23T19:36:27.993 に答える
-1

asp.netからそれを行うことはできないと思います。しかし、Wordが開いていて、ファイル名がasp.netエクスポートで作成されたものと同じファイル名であるときに実行されるVBAを作成できるでしょうか。

于 2012-09-23T18:18:37.243 に答える