ver - Reemplazar marcadores de posición en documento de Word con c#
que es un marcador en informatica (4)
Tengo una plantilla en formato de Word (.docx) y quiero reemplazar algunos marcadores de posición en esta plantilla con mis propios datos, ¿sabe dónde puedo encontrar las clases correctas para este proyecto? Sería bueno para mí saber el espacio de nombres. ¿Existen clases más nuevas para manejar documentos de Word en formato docx (xml) que las clases com? Gracias por todas sus respuestas, espero que alguien pueda ayudarme con mi problema.
saluda
Sebastian
Por cierto, con xml encontré esta solución que encuentra TODOS los nodos sdt
NameTable nt = new NameTable();
XmlNamespaceManager nsManager = new XmlNamespaceManager(nt);
nsManager.AddNamespace("w", wordmlNamespace);
XmlDocument xDoc = new XmlDocument();
xDoc.Load(doc.MainDocumentPart.GetStream());
XmlNodeList nodeList = xDoc.SelectNodes(@"./w:document/w:body//w:sdt", nsManager);
Funciona, pero ¿el Open XML Format SDK 2.0 no me da ninguna posibilidad de esto?
Eric White ha abordado exactamente este tema en un artículo de blog que detalla un programa destinado a validar fragmentos de código fuente incrustados en archivos DocX . Más allá de ese artículo, recomiendo leer sus series sobre Office Open XML y C # .
Los nuevos formatos de oficina (docx, xlsx, etc.) son archivos zip que contienen una colección de archivos xml. Con eso en mente, tienes un par de enfoques.
Puede usar el SDK de Open XML ubicado en http://www.microsoft.com/downloads/details.aspx?FamilyId=AD0B72FB-4A1D-4C52-BDB5-7DD7E816D046&displaylang=en
Puede descomprimir el archivo docx, hacer una búsqueda y reemplazar sus tokens y comprimirlo nuevamente.
Hay un sitio web en openxmldeveloper.org que es solo para este tipo de cosas. Además, tenga en cuenta que ya están enviando una versión beta 2 del SDK.
Usé este:
IEnumerable test2 = from element in body.Elements () donde element.InnerText.Contains ("sdt") select element;