C# Word CustomProperties

C# Word CustomProperties - C#/.NET managed - Programmation

Marsh Posté le 03-10-2017 à 00:20:29    

Bonsoir à tous,
 
J'ai un document Word dans lequel j'ai créé un champ "Author" de type Texte qui est renseigné à "MyAuthor" dans le fichier Essai_01.docx.
Depuis C#, j'arrive à ouvrir le fichier mais je n'arrive pas à récupérer ce champ "Author".  
 
J'ai cherché plusieurs fois sur Google des exemples ou regarder l'aide MSDN mais cela sans succès.  
Je suis sous Visual Studio 2017, voici mon code:

Code :
  1. using System;
  2. using System.IO;
  3. using System.Reflection;
  4. using nmOfficeCore  = Microsoft.Office.Core;
  5. using nmOfficeWord  = Microsoft.Office.Interop.Word;
  6. using nmOfficeWDoc  = Microsoft.Office.Interop.Word.Document;
  7. using nmDatGrdVwRow = System.Windows.Forms.DataGridViewRow;
  8. namespace MyNmClass1
  9. {
  10.     class MyClass1
  11.     {
  12.         private string _MyAuthor;
  13.        
  14.         public void GetParams()
  15.         {
  16.             object oMissing = Missing.Value;
  17.             string ThisAuthor;
  18.             // Object Instantiation & Variables
  19.             nmOfficeWord.Application MyWrdAppli  = new nmOfficeWord.Application { Visible = true };
  20.             nmOfficeWDoc MyWrdDoc = new nmOfficeWord.Document();
  21.             Microsoft.Office.Core.DocumentProperties MyWrdCustProp = (Microsoft.Office.Core.DocumentProperties) MyWrdDoc.CustomDocumentProperties;
  22.             // Open the file
  23.             MyWrdAppli.Documents.Open(@"C:\Essai_01.docx", ReadOnly: true);
  24.             // Get all the User Custom Params
  25.             this._MyAuthor  = MyWrdCustProp["Author"].Value;
  26.             // Close the Reading Sheet
  27.             MyWrdDoc.Close();
  28.             MyWrdAppli.Quit();
  29.         }
  30.     }
  31. }


 
Je prends l'erreur suivante lors de l'execution:
System.Runtime.InteropServices.COMException : 'L’appel a été rejeté par l’appelé. (Exception de HRESULT : 0x80010001 (RPC_E_CALL_REJECTED))'
 
En regardant sur les forums, il est dit qu'il faut remplacer:

Code :
  1. Microsoft.Office.Core.DocumentProperties MyWrdCustProp = (Microsoft.Office.Core.DocumentProperties) MyWrdDoc.CustomDocumentProperties;


par

Code :
  1. object MyWrdCustProp = (Microsoft.Office.Core.DocumentProperties) MyWrdDoc.CustomDocumentProperties;;


 
Ce qui provoque le message de compilation suivant:  
Erreur CS0021 Impossible d'appliquer l'indexation à l'aide de [] à une expression de type 'object'  :pt1cable:  
 
Pouvez-vous svp me dire quel est mon erreur et pourquoi le compilo hurle ?
 
Merci d'avance pour votre aide.


Message édité par sined40 le 03-10-2017 à 00:21:02
Reply

Marsh Posté le 03-10-2017 à 00:20:29   

Reply

Marsh Posté le 04-10-2017 à 00:30:25    

J'ai ajouté le code suivant afin d'essayer de voir si j'arrive à parcourir les elements de BuiltInDocumentProperties
 

Code :
  1. dynamic test = MyWrdDoc.BuiltInDocumentProperties;
  2. Console.WriteLine(test.GetType());
  3. foreach (dynamic d in test)
  4. {
  5.   //TryCatch due to the fact, that I also get some more stuff, that are not Properties...
  6.   try
  7.   {
  8.     //I wanted to check the returned Types and if they have one at all
  9.     //This was something someone in the internet stated  
  10.     //(Props not having a valid Type ...)
  11.     Console.WriteLine("\r\n---------\r\n" );
  12.     Console.WriteLine(d.GetType());
  13.     Console.WriteLine(d.Name + " # " + d.Name.GetType());
  14.     Console.WriteLine(d.Type + " # " + d.Type.GetType());
  15.     Console.WriteLine(d.Value + " # " + d.Value.GetType());
  16.   }
  17.   catch
  18.   { }
  19. }


 
Pas mieux, quelqu'un a-t-il une idée?

Message cité 1 fois
Message édité par sined40 le 04-10-2017 à 00:30:52
Reply

Marsh Posté le 11-10-2017 à 20:41:50    

Bonsoir,
 
J'ai trouvé l'erreur et donc la solution, l'erreur se trouve dans les 2 lignes suivantes:

Code :
  1. // Object Instantiation & Variables
  2.             nmOfficeWord.Application MyWrdAppli  = new nmOfficeWord.Application { Visible = true };
  3.             nmOfficeWDoc MyWrdDoc = MyWrdAppli.Documents.Open(@"C:\Essai_01.docx", ReadOnly: true);


 
Il faut supprimer cette ligne:
   
            // Open the file
            MyWrdAppli.Documents.Open(@"C:\Essai_01.docx", ReadOnly: true);

 

sined40 a écrit :

J'ai ajouté le code suivant afin d'essayer de voir si j'arrive à parcourir les elements de BuiltInDocumentProperties
 

Code :
  1. dynamic test = MyWrdDoc.BuiltInDocumentProperties;
  2. Console.WriteLine(test.GetType());
  3. foreach (dynamic d in test)
  4. {
  5.   //TryCatch due to the fact, that I also get some more stuff, that are not Properties...
  6.   try
  7.   {
  8.     //I wanted to check the returned Types and if they have one at all
  9.     //This was something someone in the internet stated  
  10.     //(Props not having a valid Type ...)
  11.     Console.WriteLine("\r\n---------\r\n" );
  12.     Console.WriteLine(d.GetType());
  13.     Console.WriteLine(d.Name + " # " + d.Name.GetType());
  14.     Console.WriteLine(d.Type + " # " + d.Type.GetType());
  15.     Console.WriteLine(d.Value + " # " + d.Value.GetType());
  16.   }
  17.   catch
  18.   { }
  19. }


 
Pas mieux, quelqu'un a-t-il une idée?


Reply

Marsh Posté le 12-10-2017 à 15:25:00    

Je suis pas sûr de suivre, mais la du coup tu n'ouvres plus ton document ?

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed