Ich versuche, einen Hyperlink in einem Word-Dokument zu ändern. Der Hyperlink verweist ursprünglich auf ein Lesezeichen in einem externen Dokument. Ich möchte es so ändern, dass es auf ein internes Lesezeichen verweist, das als derselbe Anker fungiert.Ändern von Hyperlink mit openxml
Hier ist der Code, den ich benutze ... Es scheint zu funktionieren, wenn ich was die Variablen, aber wenn ich auf das gespeicherte Dokument schaue es ist genau wie das Original.
Was ist der Grund, warum meine Chancen nicht bestehen?
// read file specified in stream
MemoryStream stream = new MemoryStream(File.ReadAllBytes("C:\\TEMPO\\smartbook\\text1.docx"));
WordprocessingDocument doc = WordprocessingDocument.Open(stream, true);
MainDocumentPart mainPart = doc.MainDocumentPart;
// The first hyperlink -- it happens to be the one I want to modify
Hyperlink hLink = mainPart.Document.Body.Descendants<Hyperlink>().FirstOrDefault();
if (hLink != null)
{
// get hyperlink's relation Id (where path stores)
string relationId = hLink.Id;
if (relationId != string.Empty)
{
// get current relation
HyperlinkRelationship hr = mainPart.HyperlinkRelationships.Where(a => a.Id == relationId).FirstOrDefault();
if (hr != null)
{
// remove current relation
mainPart.DeleteReferenceRelationship(hr);
// add new relation with relation
// mainPart.AddHyperlinkRelationship(new Uri("C:\\TEMPO\\smartbook\\test.docx"), false, relationId);
}
}
// change hyperlink attributes
hLink.DocLocation = "#";
hLink.Id = "";
hLink.Anchor = "TEST";
}
// save stream to a new file
File.WriteAllBytes("C:\\TEMPO\\smartbook\\test.docx", stream.ToArray());
doc.Close();
Vielen Dank, es hat funktioniert! Jetzt, in Word, wenn ich einen Hyperlink zu einem internen Lesezeichen hinzufügen, gibt es keine URL, nur ein "#" vor dem Text ex. "#Lesezeichen". Würdest du zufällig wissen, wie ich eine URL auf self erstellen könnte anstatt "C: \ TEMPO \ smartbook \ test.docx" anzugeben? –