2016-10-21 22 views
1

私は単語の文書に署名行を追加できますが、私のアプローチではうまくいかないと感じています。私は私の見た目を処理するために多くを検索しましたが、何も見つかりませんでした。署名ラインを追加するWord-Excel

はさてここで私がAddSignatureLineのfuncitonを呼び出すときに、このウィンドウは(ShowDialogのような)モーダルを開き、以下を参照して閉じるこのまで、コードが流れていないだけでなく、私のコード

 private void CreateNewPage() 
     { 
      object missing = System.Reflection.Missing.Value; 
      object fileName = @"C:\docs\mydoc.docx"; 
      object readOnly = false; 
      object isVisible = true; 

      //Start Word and open a document. 
      Word._Application oWord; 
      Word._Document oDoc; 
      oWord = new Word.Application(); 
      oWord.Visible = true; 

      oDoc = oWord.Documents.Open(ref fileName, ref missing, ref readOnly, 
       ref missing, ref missing, ref missing, ref missing, ref missing, 
       ref missing, ref missing, ref missing, ref isVisible, ref missing, 
       ref missing, ref missing, ref missing); 


      // var numberOfPages = oDoc.ComputeStatistics(Word.WdStatistic.wdStatisticPages, false); 



      object oEndOfDoc = "\\endofdoc"; 
      object paramNextPage = Word.WdBreakType.wdSectionBreakNextPage; 

      oDoc.Bookmarks.get_Item(ref oEndOfDoc).Range.InsertBreak(ref paramNextPage); 
      //Insert a page break 
      object breakPage = Word.WdBreakType.wdPageBreak; 


      object saveOption = Word.WdSaveOptions.wdDoNotSaveChanges; 
      object originalFormat = Word.WdOriginalFormat.wdOriginalDocumentFormat; 
      object routeDocument = false; 

      object what = Microsoft.Office.Interop.Word.WdGoToItem.wdGoToPage; 
      object which = Microsoft.Office.Interop.Word.WdGoToDirection.wdGoToLast; 
      object count = 3; 

      oWord.Selection.GoTo(ref what, ref which, ref count, ref missing);  

      object sigID = "{00000000-0000-0000-0000-000000000000}"; 
      Timer t = new Timer(); 
      t.Elapsed += (sender, args) => 
      { 


       SendKeys.SendWait("{TAB}"); 
       SendKeys.SendWait("~");     
       t.Stop(); 

      }; 

      t.Interval = 2000; 
      t.Start(); 
      try 
      { 

       oWord.Activate(); 

       SignatureSet signatureSet = oWord.ActiveDocument.Signatures; 
       // signatureSet.ShowSignaturesPane = false; 
       Signature objSignature = signatureSet.AddSignatureLine(sigID); 
       objSignature.Setup.SuggestedSigner = "docSigner"; 
       objSignature.Setup.SuggestedSignerEmail = "[email protected]"; 
       objSignature.Setup.ShowSignDate = true;   

       // dynamic shape = objSignature.SignatureLineShape; 

      } 
      catch (Exception ex){} 

      oWord.Documents.Save(); 
      oWord.Quit(); 

      try 
      { 
       Marshal.ReleaseComObject(oWord); 
      } 
      catch (Exception){} 

     } 

..です

私はこれをsendkeyを使用してバイパスしていますが、それは良い方法ではないことがわかりました。しかし、他の解決策が見つからない場合は、Win32 APIを使用してこのウィンドウ(単語の子ウィンドウ)を見つけることを試みます。

これを回避するにはどうすればいいですか?何千もの文書があり、私もより高速な方法を探しているからです。

この署名行を追加すると、DocuSignで文書に署名することができます。しかし、文書に署名行がない場合、DocuSignは文書をデジタル署名しません。次に、この行を追加する必要があります。

答えて

1

モーダル署名セットアップダイアログの表示を回避する方法はありそうですしないように、私はあなたに適切に構成された署名ラインを含むビルディングブロックに基づいて次の回避策を示唆している:

  1. 作成新しい空の.dotxテンプレート。このテンプレートは、ビルディングブロックのエントリを保存するために使用されます。
  2. 署名行を含むサンプルドキュメントを作成し、この署名行を挿入>クイックパーツ>クイックパーツギャラリーに選択を前の手順で作成したテンプレートに保存します。
  3. プロジェクトにテンプレートを含め、実行可能ファイルまたはアドインを使用してテンプレートを展開します。実行時に
  4. 、アドイン

    Application.AddIns.Add(fullPathToDotx); 
    
  5. あなたは今テンプレート

    var template = Application.Templates 
        .OfType<Microsoft.Office.Interop.Word.Template>() 
        .FirstOrDefault(t => t.Name == addInFileName); 
    var buildingBlock = template.BuildingBlockEntries.Item("Signature Line"); 
    buildingBlock.Insert(range, true); 
    
  6. (ビルディングブロックテンプレートをアンロード)

  7. からのビルディングブロックを挿入することができますように、テンプレートを読み込みます

署名行のプロパティを変更する必要がある場合は、動的ビルディングブロックテンプレート(例えば、パッチを適用に応じて設定されている複数の署名ラインビルディングブロックを準備し、又は

    • 実行時にコピーを作成し、Open XML SDKを使用してファイルを開いて操作し、変更されたバージョンを一時的にロードします。
  • +0

    おかげさまで興味深いようです。私はそれをやろうとしているが、私は第3ステップで立ち往生している。このテンプレートをC#プロジェクトにインストールするには?私はアドインを作成していません。 Office Interopを使用する通常のexeです。 – unbalanced

    +0

    インストール方法を知りました。WindowsFormsApplication1.exeで 'System.Runtime.InteropServices.COMException'型の未処理の例外が発生しました 追加情報:要求されたコレクションのメンバーが存在しません。ここではvar buildingBlock = template.BuildingBlockEntries.Item( "TestSignature"); template.BuildingBlockEntries.Countがゼロであるため、 – unbalanced

    +0

    @unbalanced:混乱して申し訳ありません。私は、 'Application.AddIns.Add'を使ってWordに読み込むことができるように、そのテンプレートを実行時に利用可能にする必要があるということを意味しました。 –

    関連する問題