Advertisement
Guest User

Untitled

a guest
Oct 31st, 2014
131
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.78 KB | None | 0 0
  1. private byte[] GenerarMSDoc_IncidenciasAltas(DatosDocumento ddoc, string tablename)
  2. {
  3. byte[] bytesDoc = null;
  4.  
  5. if (ddoc.DataSource.Tables.Contains(tablename))
  6. {
  7. //realizamos una copia en memoria del documento .docx que utilizaremos como plantilla
  8. MemoryStream docTemplateInMemory = Documentos.CopyDocToMemoryStream(ddoc.UriTemplate);
  9.  
  10. //seleccionamos los tipos de incidencias que tenemos para ir creando y anexando al documentos las paginas necesarias de ese tipo de incidiencias
  11. string nameColIdIncidencia = "IDIncidencia";
  12. DataView view = new DataView(ddoc.DataSource.Tables[tablename]);
  13. DataTable dtDistinctValues = view.ToTable(true, nameColIdIncidencia);
  14.  
  15. foreach (DataRow rwDistintValues in dtDistinctValues.Rows)
  16. {
  17. //manejamos la copia en memoria mendiante Open XML para realizar los cambios necesarios
  18. using (WordprocessingDocument objOpenXMLTemplate = WordprocessingDocument.Open(docTemplateInMemory, true))
  19. {
  20. var body_objOpenXMLTemplate = objOpenXMLTemplate.MainDocumentPart.Document.Body;
  21.  
  22. DataRow[] rows = ddoc.DataSource.Tables[tablename].Select(string.Format("{0} = '{1}'", nameColIdIncidencia, rwDistintValues[nameColIdIncidencia]), "IDExp");
  23.  
  24. //Buscamos la tabla de la plantilla
  25. //Table theTable = body_objOpenXMLTemplate.Descendants<Table>().First(); //-------->
  26. Table theTable = body_objOpenXMLTemplate.Descendants<Table>().ToArray()[body_objOpenXMLTemplate.Descendants<Table>().Count() - 2];
  27.  
  28. //como no la vamos a utilizar, eliminamos la fila vacia de la plantilla .docx
  29. TableRow theRow = theTable.Elements<TableRow>().Last(); //cogemos la ultima fila de la tabla (fila vacia) para posteriormente eliminarla.
  30. theTable.RemoveChild(theRow);
  31.  
  32. foreach (DataRow rw in rows)
  33. {
  34. TableRow tr1 = new TableRow();
  35. TableCell tc1 = new TableCell(new Paragraph(new Run(new Text(rw["dato1"].ToString()))));
  36. TableCell tc2 = new TableCell(new Paragraph(new Run(new Text(rw["dato2"].ToString()))));
  37. tr1.Append(tc1, tc2);
  38.  
  39. theTable.AppendChild(tr1);
  40. }
  41.  
  42.  
  43. MainDocumentPart mainPart_objOpenXMLTemplate = objOpenXMLTemplate.MainDocumentPart;
  44.  
  45. AlternativeFormatImportPart chunk = mainPart_objOpenXMLTemplate.AddAlternativeFormatImportPart(AlternativeFormatImportPartType.WordprocessingML);
  46. string altChunkId = mainPart_objOpenXMLTemplate.GetIdOfPart(chunk);
  47. using(MemoryStream aux_docTemplateInMemory = Documentos.CopyDocToMemoryStream(ddoc.UriTemplate))
  48. chunk.FeedData(aux_docTemplateInMemory);
  49.  
  50.  
  51. AltChunk altChunk = new AltChunk();
  52. altChunk.Id = altChunkId;
  53. mainPart_objOpenXMLTemplate.Document
  54. .Body
  55. .InsertAfter(altChunk, mainPart_objOpenXMLTemplate.Document.Body.Elements<Paragraph>().Last());
  56.  
  57.  
  58. }
  59. }
  60.  
  61. bytesDoc = docTemplateInMemory.ToArray();
  62. }
  63.  
  64. return bytesDoc;
  65. }
  66.  
  67. public static MemoryStream CopyDocToMemoryStream(string uri)
  68. {
  69. MemoryStream documentStream = new MemoryStream();
  70. using (Stream tplStream = File.Open(uri, FileMode.Open))
  71. {
  72. documentStream = new MemoryStream((int)tplStream.Length);
  73. tplStream.CopyStreamTo(documentStream);
  74. documentStream.Position = 0L;
  75. }
  76.  
  77. return documentStream;
  78. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement