插入超链接后,如何在word文档中按程序定位光标



我有一个Outlook AddIn,它通过提供addAttachment((处理程序并在每个附加文件的电子邮件正文中插入超链接来处理向电子邮件添加附件。

插入超链接没有问题,但如果通过将附件拖动到电子邮件中来添加附件,则插入光标始终保持在超链接之前。

Document doc = currentMailItem.GetInspector.WordEditor;
Selection objSel = doc.Windows[1].Selection;
Range insertRange = objSel.Range;
object missObj = Type.Missing;
Hyperlink link = doc.Hyperlinks.Add(insertRange, MyUrl, missObj, missObj, displayName, missObj);
objSel.Collapse(WdCollapseDirection.wdCollapseEnd);
/* also tried this:
Range r = link.Range;
objSel.MoveRight(WdUnits.wdCharacter, r.End, r.Start);
* */

我怀疑我的问题可能是拖拉;跌落处理。我注意到光标出现在我放置的位置,在插入的Url之后,但随后跳回到它之前的点;将光标重置到其原始位置的drop操作?

有人能告诉我该做什么吗?

我过去创建了一个与此非常相似的项目,并选择使用MailItem.HTMLBody属性,而不是与对象放置作斗争。

在我的案例中,我正在构建一个数据网格,但可以构建类似的东西来接收URL数据。注意:这是在我开发的早期,代码可能需要一些重构,但对于过去的复制和粘贴,我希望这还不错。我也从这篇文章中排除了一些不必要的信息,但最重要的部分包含在这里。

为了组装电子邮件的正文,此方法创建一个StringBuilder并逐段构建HTML文档。

public string ConstructBody(DataTable dataTable)
{
StringBuilder bodyStringBuilder = new StringBuilder();
// Creates the HTML code, constructs body, Constructs table, defines table border.
bodyStringBuilder.AppendLine("<html>");
bodyStringBuilder.AppendLine(Tab + "<body>");
bodyStringBuilder.AppendLine(Tab + Tab + "<table>");
bodyStringBuilder.AppendLine(Tab + Tab + "<table border='2' bgcolor:#DDDDDD bordercolor:black>");
// Column headers - Style defined.
bodyStringBuilder.Append(Tab + Tab + Tab + "<tbody align='center' style='font-family:verdana; color:#000000; font-size:14;background-color:#9DB9C8'>");
bodyStringBuilder.Append(Tab + Tab + Tab + "<tr>");
// Column Headers - Named 
foreach (DataColumn dc in dataTable.Columns)
{
bodyStringBuilder.AppendFormat("<th>{0}</th>", dc.ColumnName);
}
// End of Column Header Creation
bodyStringBuilder.AppendLine("</tr>");
// Empty data rows created and filled by another foreach loop
int drColorSwitch = 1;
foreach (DataRow dr in dataTable.Rows)
{
if (IsOdd(drColorSwitch))
{
bodyStringBuilder.Append(Tab + Tab + Tab + Tab + "<tbody align='center' style='font-family:verdana;background-color=#DDDDDD; color:#000000; font-size:14 '>");
}
else
{
bodyStringBuilder.Append(Tab + Tab + Tab + Tab + "<tbody align='center' style='font-family:verdana;background-color=#BDD0D9; color:#000000; font-size=14 '>");
}
bodyStringBuilder.Append(Tab + Tab + Tab + "<tr>");
drColorSwitch ++;
// Fills the data. 
foreach (DataColumn dc in dataTable.Columns)
{
string cellValue = dr[dc] != null ? dr[dc].ToString() : "";
bodyStringBuilder.AppendFormat("<td>{0}</td>", cellValue);
}
// Closes out each datarow
bodyStringBuilder.AppendLine("</tr>");
}  // End of the datarow creation functions
// Closes the table, closes the body, and finally ends the HTML code for the body of the email. 
bodyStringBuilder.AppendLine(Tab + Tab + "</table>");
bodyStringBuilder.AppendLine(Tab + "</body>");
bodyStringBuilder.AppendLine("</html>");
return bodyStringBuilder.ToString();                               // Finally - returns value of SB
}

最后,在MailReport方法中,我创建了电子邮件并调用Send((;

public void MailReport(DataTable datatable,string[] recipients,string subject, string headertext, string reporttitle, bool includedate, bool includefiles, string[] filelist, bool isEncrypted)
{
// Creates instance of Header and Body Construction Classes
HeaderConstruction headerConstruction = new HeaderConstruction(); 
BodyConstruction bodyConstruction = new BodyConstruction();

Outlook.Application oApp = new Outlook.Application();
Outlook.MailItem oMsg = oApp.CreateItem(Outlook.OlItemType.olMailItem);
foreach (string recipient in recipients)
{
oMsg.Recipients.Add(recipient); 
}
if(isEncrypted)
{
// If caller indicates that message should be encrypted, system will add secured flag to subject
oMsg.Subject = "<secure> " + subject;
}
else
{
// Else, message will transmit without security flag 
oMsg.Subject = subject;
}
// introduces the body table
oMsg.HTMLBody = headerConstruction.ConstructHeader(headertext,reporttitle, includedate) + bodyConstruction.ConstructBody(datatable);
// Includes files in output message if requested
if (includefiles)
{
foreach (string path in filelist)
{
oMsg.Attachments.Add(path);
}
}
// Send
oMsg.Send();       
}

相关内容

最新更新