2010-03-02 5 views
4

J'essaie d'ajouter du texte au format HTML à Word à l'aide d'Office Interop. Mon code ressemble à ceci:Ajout de texte HTML à Word à l'aide d'Interop

Clipboard.SetText(notes, TextDataFormat.Html); 
pgCriteria.Range.Paste(); 

mais il déclenche une exception de commande ayant échoué. Une idée?

Répondre

3

Cela a fonctionné pour moi sur Windows 7 et Word 2007:

public static void pasteHTML(this Range range, string html) { Clipboard.SetData(
    "HTML Format", string.Format("Version:0.9\nStartHTML:80\nEndHTML:{0,8}\nStart" + 
    "Fragment:80\nEndFragment:{0,8}\n", 80 + html.Length) + html + "<"); range.Paste(); } 

utilisation Exemple: range.pasteHTML("a<b>b</b>c");

Probablement Un peu plus fiable sans utiliser le presse-papiers est de sauvegarder le fragment HTML dans un fichier et d'utiliser InsertFile. Quelque chose comme:

public static void insertHTML(this Range range, string html) { 
    string path = System.IO.Path.GetTempFileName(); 
    System.IO.File.WriteAllText(path, "<html>" + html); // must start with certain tag to be detected as html: <html> or <body> or <table> ... 
    range.InsertFile(path, ConfirmConversions: false); 
    System.IO.File.Delete(path); } 
+0

Ouais, (+ 1 à vous) en utilisant le presse-papiers semble étrange ici – DanilGholtsman

+0

Avez-vous pas besoin d'utiliser le presse-papiers dans un thread STA? – R2D2

+0

@ R2D2 pas sûr de ce que vous voulez dire .. mais le presse-papiers est généralement le moyen le moins fiable, en raison de la petite chance d'une autre application en l'utilisant en même temps. J'applique généralement les formats par programmation pour des plages plus petites ou j'utilise des modèles avec des blocs de construction AutoText. – Slai

0

Juste construire un fichier html temporaire avec votre contenu html et insérez-le comme ci-dessous.

// 1- Sample HTML Text 
var Html = @"<h1>Sample Title</h1><p>Lorem ipsum dolor <b>his sonet</b> simul</p>"; 

// 2- Write temporary html file 
var HtmlTempPath = Path.Combine(Path.GetTempPath(), $"{Path.GetRandomFileName()}.html"); 
File.WriteAllText(HtmlTempPath, $"<html>{Html}</html>"); 

// 3- Insert html file to word 
ContentControl ContentCtrl = Document.ContentControls.Add(WdContentControlType.wdContentControlRichText, Missing); 
ContentCtrl.Range.InsertFile(HtmlTempPath, ref Missing, ref Missing, ref Missing, ref Missing); 
Questions connexes