Ich habe eine .docx
, die ein MailMerge enthält, muss ich seine Quelle über Code (C#) ändern. Als Bibliothek verwende ich OpenXml
. Durch Öffnen des docx als Zip-Datei und Suchen nach den Pfaden habe ich festgestellt, dass der Link der Datenquelle an zwei verschiedenen Stellen gespeichert ist: in der word/settings.xml
und in der word/_rels/settings.xml.rels
.MailMerge über OpenXml bearbeiten
die fisrt ersetzen:
var template = new MemoryStream(myDocxInByteArray);
using (var doc = DocumentFormat.OpenXml.Packaging.WordprocessingDocument.Open(template, true))
{
var s = doc.MainDocumentPart.DocumentSettingsPart.Settings;
foreach (var els in s.ChildElements)
{
if (els is DocumentFormat.OpenXml.Wordprocessing.MailMerge)
{
var mm = (DocumentFormat.OpenXml.Wordprocessing.MailMerge)els;
mm.Query.Val = "SELECT * FROM " + myNewPath;
break;
}
}
}
Dies funktioniert gut, aber wenn die Datei fragt geöffnet wird Word die Datei aus dem neuen Pfad zu laden, sondern auch von dem alten, da es in den word/_rels/settings.xml.rels
definiert ist .
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
<Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/mailMergeSource" Target="oldPath" TargetMode="External"/>
</Relationships>
Wie kann ich dieses Objekt finden (Relation
) in der WordprocessingDocument
? Kann es nicht finden ... Oder gibt es einen anderen Weg, es zu ändern?
EDIT:
habe ich zwei verschiedene leere Dateien mit einer anderen Quelle und dann mit dem OpenXml Produktivitätswerkzeug zu vergleichen, um sie geöffnet. Wie ich bereits gesehen habe sind die Unterschiede in der word/settings.xml
und in der word/_rels/settings.xml.rels
.
Try Öffnen des Dokuments in Word, Ändern der Datenquelle und Speichern unter einem anderen Namen. Verwenden Sie die Funktion "Vergleichen" im Open XML SDK Productivity Tool, um den Code zu sehen, der generiert wird, um das eine Dokument in das andere zu ändern. FWIW, Sie müssen wahrscheinlich eine neue Beziehungs-ID erstellen (die in der rels-Datei gespeichert wird) und sie ersetzen/löschen Sie die rId1 damit. So funktioniert das normalerweise mit dem Open XML SDK. –
Ok, aber wie lösche ich die alte Beziehung? Ich kann es nicht finden, es mit OpenXml öffnend ... – Emaborsa