I am new to C# VSTO Add-In development and am trying to add a signature at the cursor's location. However, I'm unable to insert HTML and can only add plain text. How can I append HTML instead?
I tried the code below and was able to add text. How can I append HTML instead?
// Get the active Inspector (email editor)
Outlook.Inspector inspector = outlookApp.ActiveInspector();
if (inspector != null && inspector.CurrentItem is Outlook.MailItem mailItem)
{
// Get the Word editor for the email
Document wordDocument = inspector.WordEditor as Document;
if (wordDocument != null)
{
// Access the current selection (cursor position)
Selection selection = wordDocument.Application.Selection;
if (selection != null)
{
// Insert HTML at the current selection (cursor position)
Range range = selection.Range;
selection.TypeText(signature);
// Set the range's HTML format to preserve HTML tags
range.FormattedText = wordDocument.Application.Selection.FormattedText;
// Set the email's HTML body to include the new HTML content
//mailItem.HTMLBody = mailItem.HTMLBody.Insert(mailItem.HTMLBody.Length, "Ram");
return "NOTREQUIRED";
}
}
}
Then tried below code,
//Insert the HTML content at the current cursor position
selection.Range.InsertAfter(htmlContent);
HTML is not being added in this location. I'm not sure what I did wrong. Can you help me figure it out?
Used tricky way, just paste the HTML using below functions, and it's working.
public void SetClipboardHtml(string htmlContent)
{
string preamble = "Version:0.9\r\n";
string htmlStart = "<html><body><!--StartFragment-->";
string htmlEnd = "<!--EndFragment--></body></html>";
string fullHtml = htmlStart + htmlContent + htmlEnd;
int startHtml = preamble.Length;
int startFragment = startHtml + htmlStart.Length;
int endFragment = startFragment + htmlContent.Length;
int endHtml = endFragment + htmlEnd.Length;
string clipboardFormat = $"{preamble}" +
$"StartHTML:{startHtml:D8}\r\n" +
$"EndHTML:{endHtml:D8}\r\n" +
$"StartFragment:{startFragment:D8}\r\n" +
$"EndFragment:{endFragment:D8}\r\n" +
$"{fullHtml}";
Clipboard.Clear();
Clipboard.SetText(clipboardFormat, TextDataFormat.Html);
}
if (selection != null)
{
SetClipboardHtml(signature);
selection.Paste();
return "NOTREQUIRED";
}