2010-09-21 16 views
1

J'utilise C# bureau (mot) automatisation par Microsoft Office 12.0 Object Library. Et j'ai ouvert un fichier "1.doc" et j'ai besoin de vérifier si ce fichier a une couleur d'arrière-plan ou non.Comment connaître la couleur de fond du document de mot ms en utilisant C#

Note: Je veux dire la couleur de fond appliquée par les étapes suivantes:

  • Ouvrir MS Word 2003, et ouvrir un document.
  • Aller à: Format menu ->Contexte et choisissez la couleur.

Et voici ce que j'ai en C#:

Object oMissing = System.Reflection.Missing.Value; 

     //OBJECTS OF FALSE AND TRUE 
     Object oTrue = true; 
     Object oFalse = false; 
     Object fileName = "c:\\1.doc"; 

     //CREATING OBJECTS OF WORD AND DOCUMENT 
     Word.Application oWord = new Word.Application(); 
     Word.Document oWordDoc = new Word.Document(); 

     //MAKING THE APPLICATION VISIBLE 
     oWord.Visible = true; 

     //ADDING A NEW DOCUMENT TO THE APPLICATION 
     oWordDoc = oWord.Documents.Open(
      ref fileName, ref oMissing, ref oFalse, ref oMissing, 
      ref oMissing, ref oMissing, ref oMissing, ref oMissing, 
      ref oMissing, ref oMissing, ref oMissing, ref oMissing, 
      ref oTrue, ref oMissing, ref oMissing, ref oMissing); 
     Console.WriteLine(oWordDoc.Background.Fill.ForeColor.RGB); 
     Console.WriteLine(oWordDoc.Background.Fill.BackColor.RGB); 

Je ne sais pas si le ForeColor ou BackColor représentent la couleur que j'ai besoin, j'ai essayé de choisir différentes couleurs d'arrière-plan et exécuté le code ci-dessus et chaque fois que j'ai une valeur entière différente comme (10092543, 255 pour le rouge, ....) mais cela n'a pas de sens, et le BackColor n'est jamais changé et fixé à la valeur (16777215). Merci beaucoup.

Répondre

2

Vous êtes sur la bonne voie. L'arrière-plan de la page est en effet le premier plan couleur de l'objet Background. Les différentes valeurs que vous voyez correspondent à la représentation en nombre entier des valeurs de couleur RVB.

Si vous êtes intéressé par les différentes composantes de couleur, vous pouvez utiliser le code suivant:

Color color = Color.FromArgb(oWordDoc.Background.Fill.ForeColor.RGB); 
int red = color.R; 
int green = color.G; 
int blue = color.B; 

Mise à jour

La couleur utilisée par le modèle d'objet Office semble utiliser un format interne différent de celui System.Drawing.Color donc les canaux peuvent être mélangés lorsque vous utilisez l'exemple de code ci-dessus (j'ai oublié de vérifier le format réel de Word.ColorFormat.RGB).

Vous pouvez toujours récupérer les différents canaux de couleur vous-même en utilisant le code suivant:

int wordColor = oWordDoc.Background.Fill.ForeColor.RGB; 
int channel1 = (int)((wordColor >> 0x10) & 0xffL); 
int channel2 = (int)((wordColor >> 0x8) & 0xffL); 
int channel3 = (int)(wordColor & 0xffL); 
+0

Merci beaucoup 0xA3. J'ai une question: Lorsque j'imprime la variable rouge, il imprime la valeur de la couleur bleue et vice-versa, pouvez-vous m'aider s'il vous plaît. – Saeed

+1

@Seed: Voir la mise à jour. –

+0

Merci beaucoup 0xA3 pour votre réponse directe, Tout est OK, mais j'ai une question: quand je mets la couleur de fond à un document et exécute mon code, j'obtiens la bonne valeur RVB, et quand je change de couleur obtenir également la valeur RVB correcte, mais lorsque je supprime l'arrière-plan en sélectionnant (Pas de remplissage), j'obtiens toujours la dernière valeur de couleur. – Saeed