Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- private byte[] GenerarMSDoc_IncidenciasAltas(DatosDocumento ddoc, string tablename)
- {
- byte[] bytesDoc = null;
- if (ddoc.DataSource.Tables.Contains(tablename))
- {
- //realizamos una copia en memoria del documento .docx que utilizaremos como plantilla
- MemoryStream docTemplateInMemory = Documentos.CopyDocToMemoryStream(ddoc.UriTemplate);
- //seleccionamos los tipos de incidencias que tenemos para ir creando y anexando al documentos las paginas necesarias de ese tipo de incidiencias
- string nameColIdIncidencia = "IDIncidencia";
- DataView view = new DataView(ddoc.DataSource.Tables[tablename]);
- DataTable dtDistinctValues = view.ToTable(true, nameColIdIncidencia);
- foreach (DataRow rwDistintValues in dtDistinctValues.Rows)
- {
- //manejamos la copia en memoria mendiante Open XML para realizar los cambios necesarios
- using (WordprocessingDocument objOpenXMLTemplate = WordprocessingDocument.Open(docTemplateInMemory, true))
- {
- var body_objOpenXMLTemplate = objOpenXMLTemplate.MainDocumentPart.Document.Body;
- DataRow[] rows = ddoc.DataSource.Tables[tablename].Select(string.Format("{0} = '{1}'", nameColIdIncidencia, rwDistintValues[nameColIdIncidencia]), "IDExp");
- //Buscamos la tabla de la plantilla
- //Table theTable = body_objOpenXMLTemplate.Descendants<Table>().First(); //-------->
- Table theTable = body_objOpenXMLTemplate.Descendants<Table>().ToArray()[body_objOpenXMLTemplate.Descendants<Table>().Count() - 2];
- //como no la vamos a utilizar, eliminamos la fila vacia de la plantilla .docx
- TableRow theRow = theTable.Elements<TableRow>().Last(); //cogemos la ultima fila de la tabla (fila vacia) para posteriormente eliminarla.
- theTable.RemoveChild(theRow);
- foreach (DataRow rw in rows)
- {
- TableRow tr1 = new TableRow();
- TableCell tc1 = new TableCell(new Paragraph(new Run(new Text(rw["dato1"].ToString()))));
- TableCell tc2 = new TableCell(new Paragraph(new Run(new Text(rw["dato2"].ToString()))));
- tr1.Append(tc1, tc2);
- theTable.AppendChild(tr1);
- }
- MainDocumentPart mainPart_objOpenXMLTemplate = objOpenXMLTemplate.MainDocumentPart;
- AlternativeFormatImportPart chunk = mainPart_objOpenXMLTemplate.AddAlternativeFormatImportPart(AlternativeFormatImportPartType.WordprocessingML);
- string altChunkId = mainPart_objOpenXMLTemplate.GetIdOfPart(chunk);
- using(MemoryStream aux_docTemplateInMemory = Documentos.CopyDocToMemoryStream(ddoc.UriTemplate))
- chunk.FeedData(aux_docTemplateInMemory);
- AltChunk altChunk = new AltChunk();
- altChunk.Id = altChunkId;
- mainPart_objOpenXMLTemplate.Document
- .Body
- .InsertAfter(altChunk, mainPart_objOpenXMLTemplate.Document.Body.Elements<Paragraph>().Last());
- }
- }
- bytesDoc = docTemplateInMemory.ToArray();
- }
- return bytesDoc;
- }
- public static MemoryStream CopyDocToMemoryStream(string uri)
- {
- MemoryStream documentStream = new MemoryStream();
- using (Stream tplStream = File.Open(uri, FileMode.Open))
- {
- documentStream = new MemoryStream((int)tplStream.Length);
- tplStream.CopyStreamTo(documentStream);
- documentStream.Position = 0L;
- }
- return documentStream;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement