Word 2007 automation - setting default conversion for InsertFile

  • Follow


Hi

I need to insert some HTML-styled text into a Word 2007 document. As far as 
I know you cannot directly insert HTML into Word, because it needs to be 
converted first. So I save the HTML as a temporary file and use InsertRange 
to insert it into my document.

Here is my code:
string TempFileSaveDir = "c:\\word";

private void InsertHTML(Document pDoc, string pHTML)
{
    Guid _guid = Guid.NewGuid();

    string _fileName = TempFileSaveDir + "\\" + _guid.ToString() + ".html";
    TextWriter tw = new StreamWriter(_fileName, false, Encoding.UTF8);       
     
    tw.Write(pHTML);
    tw.Close();

    object start = 0;
    object end = 0;
    object ConfirmConversions = false;
    object Link = false;
    object Attachment = false;
    object missing = System.Type.Missing;

    Word.Range _range1 = pDoc.Range(ref start, ref end);
    _range1.InsertFile(_fileName, ref missing, ref ConfirmConversions, ref 
Link, ref Attachment);

    File.Delete(_fileName);
}


Now my problem is, that Word sees it as regular text rather than HTML, so if 
I have <b>Some Text</b> in my HTML it'll show the B tags instead of bolded 
text.
I noticed that when I set ConfirmConversions to true I get a popup, where I 
can select the HTML conversion. Is there a way to have the converter 
automaticly use this conversion without prompting the user every time?

Regards
0
Reply Utf 12/11/2009 10:21:01 AM

1. You should be able to insert HTML directly because Word regards HTML 
as a "native" format and has a built-in converter for it. However, Word 
may not be able to convert all versions of HTML.

2. A problem (which you may or may not have) is specifying a particular 
format. If you cannot do that, there is always the possibility that Word 
will not recognise the format correctly. Either that is a problem for 
you, or it isn't. If it is, then...

3. ...You can use Documents.Open to specify the format. However, the 
best you can specify AFAIK is wdOpenFormatWebPages. If that is enough to 
make Word do the right thing, then you could try something like the 
equivalent of the following VBA:

Sub insertsomeHTML
Dim rs As Range
Set objDoc = ActiveDocument
' set up the target range
Set r = objDoc.Content
r.Collapse Direction:=wdCollapseEnd
' open the HTML
' by specifying Format we avoid the
' format conversion dialog
Set objTempDoc = Application.Documents.Open( _
   FileName:="c:\a\test.htm", _
   Format:=wdOpenFormatWebPages)
r.FormattedText = objTempDoc.Content
objTempDoc.Close savechanges:=False
Set objTempDoc = Nothing
Set r = Nothing
Set objDoc = Nothing
End Sub

Peter Jamieson

http://tips.pjmsn.me.uk

On 11/12/2009 10:21, Grzegorz Zych wrote:
> Hi
>
> I need to insert some HTML-styled text into a Word 2007 document. As far as
> I know you cannot directly insert HTML into Word, because it needs to be
> converted first. So I save the HTML as a temporary file and use InsertRange
> to insert it into my document.
>
> Here is my code:
> string TempFileSaveDir = "c:\\word";
>
> private void InsertHTML(Document pDoc, string pHTML)
> {
>      Guid _guid = Guid.NewGuid();
>
>      string _fileName = TempFileSaveDir + "\\" + _guid.ToString() + ".html";
>      TextWriter tw = new StreamWriter(_fileName, false, Encoding.UTF8);
>
>      tw.Write(pHTML);
>      tw.Close();
>
>      object start = 0;
>      object end = 0;
>      object ConfirmConversions = false;
>      object Link = false;
>      object Attachment = false;
>      object missing = System.Type.Missing;
>
>      Word.Range _range1 = pDoc.Range(ref start, ref end);
>      _range1.InsertFile(_fileName, ref missing, ref ConfirmConversions, ref
> Link, ref Attachment);
>
>      File.Delete(_fileName);
> }
>
>
> Now my problem is, that Word sees it as regular text rather than HTML, so if
> I have<b>Some Text</b>  in my HTML it'll show the B tags instead of bolded
> text.
> I noticed that when I set ConfirmConversions to true I get a popup, where I
> can select the HTML conversion. Is there a way to have the converter
> automaticly use this conversion without prompting the user every time?
>
> Regards
0
Reply Peter 12/11/2009 1:10:52 PM


Thank you for the answer. The first point directed me in the right way.

It turned out that it needed to be proper HTML, while I tried to input stuff 
like 

<div>some text <b>some bold text</b></div>

without <html> and <body> tags. When I added these to my HTML Word started 
to understand and parse it properly.

"Peter Jamieson" wrote:

> 1. You should be able to insert HTML directly because Word regards HTML 
> as a "native" format and has a built-in converter for it. However, Word 
> may not be able to convert all versions of HTML.
> 
> 2. A problem (which you may or may not have) is specifying a particular 
> format. If you cannot do that, there is always the possibility that Word 
> will not recognise the format correctly. Either that is a problem for 
> you, or it isn't. If it is, then...
> 
> 3. ...You can use Documents.Open to specify the format. However, the 
> best you can specify AFAIK is wdOpenFormatWebPages. If that is enough to 
> make Word do the right thing, then you could try something like the 
> equivalent of the following VBA:
> 
> Sub insertsomeHTML
> Dim rs As Range
> Set objDoc = ActiveDocument
> ' set up the target range
> Set r = objDoc.Content
> r.Collapse Direction:=wdCollapseEnd
> ' open the HTML
> ' by specifying Format we avoid the
> ' format conversion dialog
> Set objTempDoc = Application.Documents.Open( _
>    FileName:="c:\a\test.htm", _
>    Format:=wdOpenFormatWebPages)
> r.FormattedText = objTempDoc.Content
> objTempDoc.Close savechanges:=False
> Set objTempDoc = Nothing
> Set r = Nothing
> Set objDoc = Nothing
> End Sub
> 
> Peter Jamieson
> 
> http://tips.pjmsn.me.uk
> 
> On 11/12/2009 10:21, Grzegorz Zych wrote:
> > Hi
> >
> > I need to insert some HTML-styled text into a Word 2007 document. As far as
> > I know you cannot directly insert HTML into Word, because it needs to be
> > converted first. So I save the HTML as a temporary file and use InsertRange
> > to insert it into my document.
> >
> > Here is my code:
> > string TempFileSaveDir = "c:\\word";
> >
> > private void InsertHTML(Document pDoc, string pHTML)
> > {
> >      Guid _guid = Guid.NewGuid();
> >
> >      string _fileName = TempFileSaveDir + "\\" + _guid.ToString() + ".html";
> >      TextWriter tw = new StreamWriter(_fileName, false, Encoding.UTF8);
> >
> >      tw.Write(pHTML);
> >      tw.Close();
> >
> >      object start = 0;
> >      object end = 0;
> >      object ConfirmConversions = false;
> >      object Link = false;
> >      object Attachment = false;
> >      object missing = System.Type.Missing;
> >
> >      Word.Range _range1 = pDoc.Range(ref start, ref end);
> >      _range1.InsertFile(_fileName, ref missing, ref ConfirmConversions, ref
> > Link, ref Attachment);
> >
> >      File.Delete(_fileName);
> > }
> >
> >
> > Now my problem is, that Word sees it as regular text rather than HTML, so if
> > I have<b>Some Text</b>  in my HTML it'll show the B tags instead of bolded
> > text.
> > I noticed that when I set ConfirmConversions to true I get a popup, where I
> > can select the HTML conversion. Is there a way to have the converter
> > automaticly use this conversion without prompting the user every time?
> >
> > Regards
> .
> 
0
Reply Utf 12/15/2009 9:41:02 AM

2 Replies
885 Views

(page loaded in 0.091 seconds)

Similiar Articles:
















7/22/2012 9:33:44 AM


Reply: