public void W017_InsertBefore_InsertAfter() { using (var stream = GetStream(TestFiles.Document)) using (var doc = WordprocessingDocument.Open(stream, false)) { var mdp = doc.MainDocumentPart; var newPara = new W.Paragraph( new W.Run( new W.Text("Hello"))); var firstPara = mdp.Document.Body.Elements <W.Paragraph>().FirstOrDefault(); mdp.Document.Body.InsertBefore(newPara, firstPara); var newPara2 = (OpenXmlElement)newPara.Clone(); mdp.Document.Body.InsertAfter(newPara2, firstPara); var v = new OpenXmlValidator(FileFormatVersions.Office2013); Assert.Equal(2, v.Validate(doc).Count()); } }
public void W017_InsertBefore_InsertAfter() { using (var stream = GetStream(TestFiles.Document)) using (var doc = WordprocessingDocument.Open(stream, false)) { var mdp = doc.MainDocumentPart; var newPara = new W.Paragraph( new W.Run( new W.Text("Hello"))); var firstPara = mdp.Document.Body.Elements <W.Paragraph>().FirstOrDefault(); mdp.Document.Body.InsertBefore(newPara, firstPara); var newPara2 = (OpenXmlElement)newPara.Clone(); mdp.Document.Body.InsertAfter(newPara2, firstPara); var v = new OpenXmlValidator(FileFormatVersions.Office2013); var errs = v.Validate(doc); var cnt = errs.Count(); Assert.True(cnt == 416 || cnt == 2); // v3.0 correctly reports fewer errors than v2.5.1 } }
private void insertDetailsSkill(wp.Paragraph par, MainDocumentPart mainPart) { // na primira fase fazer sem os gráficos // ir buscar o template // cria o documento final base com base no template String templateDoc = _projecto.Template_Mnemonica; String filename = rootPath + "docTemplates\\" + templateDoc + "_SKILS_DETAILS.docx"; wp.Table tabTitulo1; wp.Table tab1; wp.TableRow rowTab1Par; wp.TableRow rowTab1Impar; wp.Run plusSign; wp.Run minusSign; wp.Run naSign; wp.Run eqSign; wp.Table legendaTab1; wp.Paragraph quebraPagina; using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(filename, true)) { // primeira tabela do template tabTitulo1 = (wp.Table)wordDoc.MainDocumentPart.Document.Body.Elements<wp.Table>().ElementAt(0).Clone(); // primeira tabela com comportamentos tab1 = (wp.Table)wordDoc.MainDocumentPart.Document.Body.Elements<wp.Table>().ElementAt(1).Clone(); rowTab1Impar = (wp.TableRow)tab1.Elements<wp.TableRow>().ElementAt(1).Clone(); rowTab1Par = (wp.TableRow)tab1.Elements<wp.TableRow>().ElementAt(2).Clone(); tab1.Elements<wp.TableRow>().ElementAt(1).Remove(); tab1.Elements<wp.TableRow>().ElementAt(1).Remove(); // apanha os run + e - (mais e menos) minusSign = (wp.Run)rowTab1Impar.Elements<wp.TableCell>().ElementAt(1).Elements<wp.Paragraph>().First().Elements<wp.Run>().First().Clone(); naSign = (wp.Run)rowTab1Impar.Elements<wp.TableCell>().ElementAt(2).Elements<wp.Paragraph>().First().Elements<wp.Run>().First().Clone(); plusSign = (wp.Run)rowTab1Par.Elements<wp.TableCell>().ElementAt(1).Elements<wp.Paragraph>().First().Elements<wp.Run>().First().Clone(); eqSign = (wp.Run)rowTab1Par.Elements<wp.TableCell>().ElementAt(2).Elements<wp.Paragraph>().First().Elements<wp.Run>().First().Clone(); // eliminar o mais e o menos das linhas e o tracinho rowTab1Impar.Elements<wp.TableCell>().ElementAt(1).Elements<wp.Paragraph>().First().Elements<wp.Run>().First().Remove(); rowTab1Impar.Elements<wp.TableCell>().ElementAt(2).Elements<wp.Paragraph>().First().Elements<wp.Run>().First().Remove(); rowTab1Par.Elements<wp.TableCell>().ElementAt(1).Elements<wp.Paragraph>().First().Elements<wp.Run>().First().Remove(); rowTab1Par.Elements<wp.TableCell>().ElementAt(2).Elements<wp.Paragraph>().First().Elements<wp.Run>().First().Remove(); // depois tenho algures aqui a legenda da tabela legendaTab1 = (wp.Table)wordDoc.MainDocumentPart.Document.Body.Elements<wp.Table>().ElementAt(2).Clone(); //parágrafo quebra de página quebraPagina = new wp.Paragraph(new wp.Run(new wp.Text(""))); quebraPagina.ParagraphProperties = new wp.ParagraphProperties(); quebraPagina.ParagraphProperties.PageBreakBefore = new wp.PageBreakBefore(); quebraPagina.ParagraphProperties.PageBreakBefore.Val = DocumentFormat.OpenXml.OnOffValue.FromBoolean(true); } // fim da recolha dos elementos template. // passamos para a inserção destes elementos para cada competência // eliminar o texto do marcador par.Elements<wp.Run>().First().Elements<wp.Text>().First().Text = ""; wp.Paragraph p; wp.Run r; wp.Text t; wp.Table tab; wp.Table tab1Temp; wp.TableRow tab1r; wp.TableCell tab1c; int count = 0; String pergunta; String tempTexto; int contaPaginas = 1; foreach (FamiliaCompetencias fam in _Modelo.Familias.Values) foreach (Competencia comp in fam.Competencias.Values) { // são duas páginas de detalhes por cada competência // header da 1ªpágina if (comp.Type == "C") continue; // é uma competência comentário if (comp.Type == "D") continue; // é uma zona de derrailers // Nome da competência tab = (wp.Table)tabTitulo1.Clone(); p = tab.Elements<wp.TableRow>().ElementAt(0).Elements<wp.TableCell>().First().Elements<wp.Paragraph>().First(); r = p.Elements<wp.Run>().First(); t = r.Elements<wp.Text>().First(); t.Text = repCalcs.getCompetenciaText(comp.CompetenciaID); par.Append(tab);// o nome da competência // PREPARA AS DUAS TABELAS COM OS DETALHES tab1Temp = (wp.Table)tab1.Clone(); // tab2Temp = (wp.Table)tab2.Clone(); // os valores obtidos em cada comportamento List<ReportRow> dataComportamentos = repCalcs.getAvaliacaoComportamentosCriticos(comp.CompetenciaID); List<ReportRow> dataComportamentosFracosFortes = repCalcs.getAvaliacaoComportamentosCriticos_FracosFortes(comp.CompetenciaID); count = 0; foreach (Pratica prat in comp.Praticas.Values) foreach (Pergunta perg in prat.Perguntas.Values) { pergunta = repCalcs.getPergunta(perg.PerguntaID); if (count % 2 == 0) { // linha par tab1r = (wp.TableRow)rowTab1Par.Clone(); // tab2r = (wp.TableRow)rowTab2Par.Clone(); } else { // linha impar tab1r = (wp.TableRow)rowTab1Impar.Clone(); // tab2r = (wp.TableRow)rowTab2Impar.Clone(); } tab1c = tab1r.Elements<wp.TableCell>().ElementAt(0); // tab2c = tab2r.Elements<wp.TableCell>().ElementAt(0); if (count + 1 < dataComportamentos.Count) { // introduz o texto da pergunta tab1c.Elements<wp.Paragraph>().First().Elements<wp.Run>().First().Elements<wp.Text>().First().Text = dataComportamentos[count + 1].dados[0]; // tab2c.Elements<wp.Paragraph>().First().Elements<wp.Run>().First().Elements<wp.Text>().First().Text = dataComportamentos[count + 1].dados[0]; // introduz os valores de cada prática // os mais e os menos desta linha (prática), por S;B;P;C;O for (int i = 1; i < dataComportamentos[count + 1].dados.Length; i++ ) { tab1c = tab1r.Elements<wp.TableCell>().ElementAt(i); fillPlusMinus(tab1c, dataComportamentos[count + 1].dados[i], plusSign, minusSign, naSign, eqSign); } } // junta às tabelas as linhas tab1Temp.Append(tab1r); // tab2Temp.Append(tab2r); count++; } // INSERE A TABELA 1 par.Append(tab1Temp); // LEGENDA 1 tempTexto = ""; //legendaTab1.Elements<wp.TableRow>().ElementAt(1).Elements<wp.TableCell>().First().Elements<wp.Paragraph>().First().Elements<wp.Run>().First().Elements<wp.Text>().First().Text = tempTexto; par.Append((wp.Table)legendaTab1.Clone()); // QUEBRA DE PÁGINA 1 par.Append((wp.Paragraph)quebraPagina.Clone()); // um parágrafo de espaçamento para que as tabelas não colem par.Append(new wp.Paragraph()); contaPaginas++; } }
public void W017_InsertBefore_InsertAfter() { var docName = "Document.docx"; var ba = File.ReadAllBytes(Path.Combine(TestUtil.SourceDir.FullName, docName)); using (MemoryStream ms = new MemoryStream()) { ms.Write(ba, 0, ba.Length); using (WordprocessingDocument doc = WordprocessingDocument.Open(ms, true)) { MainDocumentPart mdp = doc.MainDocumentPart; var newPara = new W.Paragraph( new W.Run( new W.Text("Hello"))); var firstPara = mdp.Document.Body.Elements<W.Paragraph>().FirstOrDefault(); mdp.Document.Body.InsertBefore(newPara, firstPara); var newPara2 = (OpenXmlElement)newPara.Clone(); mdp.Document.Body.InsertAfter(newPara2, firstPara); OpenXmlValidator v = new OpenXmlValidator(FileFormatVersions.Office2013); var errs = v.Validate(doc); Assert.Equal(416, errs.Count()); } } }
private void insertOverviewSkill(wp.Paragraph par, MainDocumentPart mainPart) { // ir buscar o template // cria o documento final base com base no template String templateDoc = _projecto.Template_Mnemonica; String filename = templatePath + "\\" + templateDoc + "_OVERVIEW_SKILS_DETAILS.docx"; wp.Paragraph parHeading = null; wp.Table tab1 = null; wp.TableRow rowTab1Par = null; wp.TableRow rowTab1Impar = null; wp.TableRow rowTab1Linha3 = null; wp.Run red = null; wp.Run yellow = null; wp.Run green = null; wp.Table legendaTab2 = null; wp.Paragraph quebraPagina = null; using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(filename, true)) { try { // o primeiro Parágrafo tem o nome do subcapítulo parHeading = (wp.Paragraph)wordDoc.MainDocumentPart.Document.Body.Elements<wp.Paragraph>().ElementAt(0); // primeira tabela do template tab1 = (wp.Table)wordDoc.MainDocumentPart.Document.Body.Elements<wp.Table>().ElementAt(0).Clone(); rowTab1Impar = (wp.TableRow)tab1.Elements<wp.TableRow>().ElementAt(1).Clone(); rowTab1Par = (wp.TableRow)tab1.Elements<wp.TableRow>().ElementAt(2).Clone(); rowTab1Linha3 = (wp.TableRow)tab1.Elements<wp.TableRow>().ElementAt(3).Clone(); tab1.Elements<wp.TableRow>().ElementAt(1).Remove(); tab1.Elements<wp.TableRow>().ElementAt(1).Remove(); tab1.Elements<wp.TableRow>().ElementAt(1).Remove(); // apanha os run + e - (mais e menos) green = (wp.Run)rowTab1Impar.Elements<wp.TableCell>().ElementAt(2).Elements<wp.Paragraph>().First().Elements<wp.Run>().First().Clone(); red = (wp.Run)rowTab1Par.Elements<wp.TableCell>().ElementAt(2).Elements<wp.Paragraph>().First().Elements<wp.Run>().First().Clone(); yellow = (wp.Run)rowTab1Linha3.Elements<wp.TableCell>().ElementAt(2).Elements<wp.Paragraph>().First().Elements<wp.Run>().First().Clone(); // eliminar o mais e o menos das linhas e o tracinho rowTab1Impar.Elements<wp.TableCell>().ElementAt(2).Elements<wp.Paragraph>().First().Elements<wp.Run>().First().Remove(); rowTab1Par.Elements<wp.TableCell>().ElementAt(2).Elements<wp.Paragraph>().First().Elements<wp.Run>().First().Remove(); rowTab1Linha3.Elements<wp.TableCell>().ElementAt(2).Elements<wp.Paragraph>().First().Elements<wp.Run>().First().Remove(); } catch { } //parágrafo quebra de página quebraPagina = new wp.Paragraph(new wp.Run(new wp.Text(""))); quebraPagina.ParagraphProperties = new wp.ParagraphProperties(); quebraPagina.ParagraphProperties.PageBreakBefore = new wp.PageBreakBefore(); quebraPagina.ParagraphProperties.PageBreakBefore.Val = DocumentFormat.OpenXml.OnOffValue.FromBoolean(true); } // fim da recolha dos elementos template. // passamos para a inserção destes elementos para cada competência // eliminar o texto do marcador par.Elements<wp.Run>().First().Elements<wp.Text>().First().Text = ""; wp.Paragraph p = null; wp.Run r = null; wp.Text t = null; wp.Table tab1Temp = null; wp.TableRow tab1r = null; wp.TableCell tab1c = null; int count = 0; String pergunta; //String tempTexto; int contaPaginas = 1; String gap; foreach (FamiliaCompetencias fam in _Modelo.Familias.Values) foreach (Competencia comp in fam.Competencias.Values) { // são duas páginas de detalhes por cada competência // header da 1ªpágina if (comp.Type == "C") continue; // é uma competência comentário if (comp.Type == "D") continue; // é uma zona de derrailers // Nome da competência p = (wp.Paragraph)parHeading.Clone(); r = p.Elements<wp.Run>().First(); t = r.Elements<wp.Text>().First(); t.Text = repCalcs.getCompetenciaText(comp.CompetenciaID); par.Append(p); // PREPARA A TABELA COM OS DETALHES tab1Temp = (wp.Table)tab1.Clone(); tab1r = (wp.TableRow)tab1Temp.Elements<wp.TableRow>().ElementAt(0); // header da tabela tab1c = tab1r.Elements<wp.TableCell>().ElementAt(0); // c´clula com o local para o texto // os valores obtidos em cada comportamento // List<ReportRow> dataComportamentos = repCalcs.getAvaliacaoComportamentosCriticos(comp.CompetenciaID); List<ReportRow> dataComportamentosFracosFortes = repCalcs.getAvaliacaoComportamentosCriticos_FracosFortes_3Fatores(comp.CompetenciaID); count = 0; foreach (Pratica prat in comp.Praticas.Values) { if (tab1c.Elements<wp.Paragraph>().First().Elements<wp.Run>().First().Elements<wp.Text>().First().Text == "#TEXT_PRATICA#") { String plainText; if (Utility.theServer != null) plainText = Regex.Replace(Utility.theServer.HtmlDecode(prat.Description), "<[^>]+?>", ""); else plainText = prat.Description; plainText = DBHelper.ParseTextProprio(plainText, new Pessoa(), false); tab1c.Elements<wp.Paragraph>().First().Elements<wp.Run>().First().Elements<wp.Text>().First().Text = plainText; } foreach (Pergunta perg in prat.Perguntas.Values) { pergunta = repCalcs.getPergunta(perg.PerguntaID); if (count % 2 == 0) { // linha par tab1r = (wp.TableRow)rowTab1Par.Clone(); } else { // linha impar tab1r = (wp.TableRow)rowTab1Impar.Clone(); } //seleciona a célula do texto tab1c = tab1r.Elements<wp.TableCell>().ElementAt(0); // introduz o texto da pergunta tab1c.Elements<wp.Paragraph>().First().Elements<wp.Run>().First().Elements<wp.Text>().First().Text = dataComportamentosFracosFortes[count].dados[0]; // as cores desta linha (prática) tab1c = tab1r.Elements<wp.TableCell>().ElementAt(2); switch (dataComportamentosFracosFortes[count].dados[1]) { case "C": tab1c.Elements<wp.Paragraph>().First().Append((wp.Run)red.Clone()); break; case "B": tab1c.Elements<wp.Paragraph>().First().Append((wp.Run)yellow.Clone()); break; case "A": tab1c.Elements<wp.Paragraph>().First().Append((wp.Run)green.Clone()); break; } // junta às tabelas as linhas tab1Temp.Append(tab1r); count++; } } // INSERE A TABELA par.Append(tab1Temp); par.Append((wp.Paragraph)quebraPagina.Clone()); contaPaginas++; } }
private void insertDetailsSkill(wp.Paragraph par, MainDocumentPart mainPart) { // na primira fase fazer sem os gráficos // ir buscar o template // cria o documento final base com base no template String templateDoc = _projecto.Template_Mnemonica; String filename = templatePath + "\\" + templateDoc + "_SKILS_DETAILS.docx"; wp.Table tabTitulo1 = null; wp.Table tabTitulo2 = null; wp.Table tab1 = null; wp.TableRow rowTab1Par = null; wp.TableRow rowTab1Impar = null; wp.Table tab2 = null; wp.TableRow rowTab2Par = null; wp.TableRow rowTab2Impar = null; wp.Run plusSign = null; wp.Run minusSign = null; wp.Run naSign = null; wp.Run eqSign = null; wp.Run red = null; wp.Run orange = null; wp.Run yellow = null; wp.Run green = null; wp.Paragraph NRs = null; wp.Table legendaTab1 = null; wp.Table legendaTab2 = null; wp.Paragraph quebraPagina = null; Boolean inserirChart = true; Boolean Pagina1 = true; Boolean Pagina2 = true; using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(filename, true)) { try { // primeira tabela do template tabTitulo1 = (wp.Table)wordDoc.MainDocumentPart.Document.Body.Elements<wp.Table>().ElementAt(0).Clone(); // primeira tabela com comportamentos tab1 = (wp.Table)wordDoc.MainDocumentPart.Document.Body.Elements<wp.Table>().ElementAt(1).Clone(); rowTab1Impar = (wp.TableRow)tab1.Elements<wp.TableRow>().ElementAt(1).Clone(); rowTab1Par = (wp.TableRow)tab1.Elements<wp.TableRow>().ElementAt(2).Clone(); tab1.Elements<wp.TableRow>().ElementAt(1).Remove(); tab1.Elements<wp.TableRow>().ElementAt(1).Remove(); // apanha os run + e - (mais e menos) minusSign = (wp.Run)rowTab1Impar.Elements<wp.TableCell>().ElementAt(1).Elements<wp.Paragraph>().First().Elements<wp.Run>().First().Clone(); naSign = (wp.Run)rowTab1Impar.Elements<wp.TableCell>().ElementAt(2).Elements<wp.Paragraph>().First().Elements<wp.Run>().First().Clone(); plusSign = (wp.Run)rowTab1Par.Elements<wp.TableCell>().ElementAt(1).Elements<wp.Paragraph>().First().Elements<wp.Run>().First().Clone(); try { eqSign = (wp.Run)rowTab1Par.Elements<wp.TableCell>().ElementAt(2).Elements<wp.Paragraph>().First().Elements<wp.Run>().First().Clone(); } catch { eqSign = null; } // eliminar o mais e o menos das linhas e o tracinho rowTab1Impar.Elements<wp.TableCell>().ElementAt(1).Elements<wp.Paragraph>().First().Elements<wp.Run>().First().Remove(); rowTab1Impar.Elements<wp.TableCell>().ElementAt(2).Elements<wp.Paragraph>().First().Elements<wp.Run>().First().Remove(); rowTab1Par.Elements<wp.TableCell>().ElementAt(1).Elements<wp.Paragraph>().First().Elements<wp.Run>().First().Remove(); if (eqSign != null) rowTab1Par.Elements<wp.TableCell>().ElementAt(2).Elements<wp.Paragraph>().First().Elements<wp.Run>().First().Remove(); // depois tenho algures aqui a legenda da tabela legendaTab1 = (wp.Table)wordDoc.MainDocumentPart.Document.Body.Elements<wp.Table>().ElementAt(2).Clone(); // o primeiro parágrafpo tem idiciação de ter ou não o chart try { wp.Text chartPar = (wp.Text)wordDoc.MainDocumentPart.Document.Body.Elements<wp.Paragraph>().FirstOrDefault().Elements<wp.Run>().FirstOrDefault().Elements<wp.Text>().FirstOrDefault(); if (chartPar.Text != "") inserirChart = true; else inserirChart = false; } catch { inserirChart = false; } } catch { Pagina1 = false; } //parágrafo quebra de página quebraPagina = new wp.Paragraph(new wp.Run(new wp.Text(""))); quebraPagina.ParagraphProperties = new wp.ParagraphProperties(); quebraPagina.ParagraphProperties.PageBreakBefore = new wp.PageBreakBefore(); quebraPagina.ParagraphProperties.PageBreakBefore.Val = DocumentFormat.OpenXml.OnOffValue.FromBoolean(true); try { // segundo header, também uma tabela //terá de se analisar o seu interior tabTitulo2 = (wp.Table)wordDoc.MainDocumentPart.Document.Body.Elements<wp.Table>().ElementAt(3).Clone(); // tsegunda tabela tab2 = (wp.Table)wordDoc.MainDocumentPart.Document.Body.Elements<wp.Table>().ElementAt(4).Clone(); rowTab2Impar = (wp.TableRow)tab2.Elements<wp.TableRow>().ElementAt(1).Clone(); rowTab2Par = (wp.TableRow)tab2.Elements<wp.TableRow>().ElementAt(2).Clone(); tab2.Elements<wp.TableRow>().ElementAt(1).Remove(); tab2.Elements<wp.TableRow>().ElementAt(1).Remove(); // agora os paragrafos de cor red = (wp.Run)rowTab2Impar.Elements<wp.TableCell>().ElementAt(2).Elements<wp.Paragraph>().First().Elements<wp.Run>().First().Clone(); orange = (wp.Run)rowTab2Impar.Elements<wp.TableCell>().ElementAt(3).Elements<wp.Paragraph>().First().Elements<wp.Run>().First().Clone(); yellow = (wp.Run)rowTab2Par.Elements<wp.TableCell>().ElementAt(2).Elements<wp.Paragraph>().First().Elements<wp.Run>().First().Clone(); green = (wp.Run)rowTab2Par.Elements<wp.TableCell>().ElementAt(3).Elements<wp.Paragraph>().First().Elements<wp.Run>().First().Clone(); NRs = (wp.Paragraph)rowTab2Impar.Elements<wp.TableCell>().ElementAt(5).Elements<wp.Paragraph>().First().Clone(); // eliminar os quadrados do template rowTab2Impar.Elements<wp.TableCell>().ElementAt(2).Elements<wp.Paragraph>().First().Elements<wp.Run>().First().Remove(); rowTab2Impar.Elements<wp.TableCell>().ElementAt(3).Elements<wp.Paragraph>().First().Elements<wp.Run>().First().Remove(); rowTab2Impar.Elements<wp.TableCell>().ElementAt(5).Elements<wp.Paragraph>().First().Remove(); rowTab2Par.Elements<wp.TableCell>().ElementAt(2).Elements<wp.Paragraph>().First().Elements<wp.Run>().First().Remove(); rowTab2Par.Elements<wp.TableCell>().ElementAt(3).Elements<wp.Paragraph>().First().Elements<wp.Run>().First().Remove(); rowTab2Par.Elements<wp.TableCell>().ElementAt(5).Elements<wp.Paragraph>().First().Remove(); // legenda tabela 2 // depois tenho algures aqui a legenda da tabela legendaTab2 = (wp.Table)wordDoc.MainDocumentPart.Document.Body.Elements<wp.Table>().ElementAt(5).Clone(); } catch { Pagina2 = false; } } // fim da recolha dos elementos template. // passamos para a inserção destes elementos para cada competência // eliminar o texto do marcador par.Elements<wp.Run>().First().Elements<wp.Text>().First().Text = ""; wp.Paragraph p = null; wp.Run r = null; wp.Text t = null; wp.Table tab = null; wp.Table tabTemp = null; wp.Table tab1Temp = null; wp.Table tab2Temp = null; wp.TableRow tab1r = null; wp.TableCell tab1c = null; wp.TableRow tab2r = null; wp.TableCell tab2c = null; wp.TableCell tcTemp = null; wp.TableRow trTemp = null; wp.TableCellProperties tcProps = null; int[] critic; int count = 0; String pergunta; //String tempTexto; int contaPaginas = 1; int ranking; String gap; foreach (FamiliaCompetencias fam in _Modelo.Familias.Values) foreach (Competencia comp in fam.Competencias.Values) { // são duas páginas de detalhes por cada competência // header da 1ªpágina if (Pagina1) { if (comp.Type == "C") continue; // é uma competência comentário if (comp.Type == "D") continue; // é uma zona de derrailers // Nome da competência tab = (wp.Table)tabTitulo1.Clone(); p = tab.Elements<wp.TableRow>().ElementAt(0).Elements<wp.TableCell>().First().Elements<wp.Paragraph>().First(); r = p.Elements<wp.Run>().First(); t = r.Elements<wp.Text>().First(); t.Text = repCalcs.getCompetenciaText(comp.CompetenciaID); // Matriz de criticalidade try { tabTemp = (wp.Table)tab.Elements<wp.TableRow>().First().Elements<wp.TableCell>().ElementAt(1).Elements<wp.Table>().First(); // ajustar a cor de cada backgroud destas células critic = repCalcs.getCompetenciaCriticalidadeMatrixPos(comp.CompetenciaID); String porRef = critic[1].ToString() + critic[0].ToString(); String pos; for (int x = 0; x < 3; x++) { trTemp = tabTemp.Elements<wp.TableRow>().ElementAt(x); for (int y = 0; y < 3; y++) { pos = x.ToString() + y.ToString(); tcTemp = trTemp.Elements<wp.TableCell>().ElementAt(y); tcProps = tcTemp.Elements<wp.TableCellProperties>().First(); if (pos != porRef) { tcProps.Shading.Fill = "C0C0C0"; } //if ((critic[0] - x) * 10 + critic[1] - y != 0) } } } catch { } par.Append(tab); // um parágrafo de espaçamento para que as tabelas não colem String spreadsheetTemplate = templatePath + "\\" + templateDoc + "_CHART_BARS.xlsx"; // String spreadsheetFileName = rootPath + "generatedFiles\\" + templateDoc + _self.Email + ".xlsx"; // GRÁFICO // insert um gráfico com o template definido neste parágrafo 5372100, Cy = 1914525 String relID; if (inserirChart) { relID = insertChart(mainPart, par, spreadsheetTemplate, 5372100, 1914525); ChartsToUpdate.Add(relID, repCalcs.DB_getDADOS_GRAFICO(comp.CompetenciaID)); } } // PREPARA AS DUAS TABELAS COM OS DETALHES if (Pagina1) tab1Temp = (wp.Table)tab1.Clone(); if (Pagina2) tab2Temp = (wp.Table)tab2.Clone(); // os valores obtidos em cada comportamento List<ReportRow> dataComportamentos = repCalcs.getAvaliacaoComportamentosCriticos(comp.CompetenciaID); List<ReportRow> dataComportamentosFracosFortes = repCalcs.getAvaliacaoComportamentosCriticos_FracosFortes(comp.CompetenciaID); count = 0; foreach (Pratica prat in comp.Praticas.Values) { if (Pagina1) { if (tab1Temp.Elements<wp.TableRow>().First().Elements<wp.TableCell>().First().Elements<wp.Paragraph>().First().Elements<wp.Run>().First().Elements<wp.Text>().First().Text == "#TEXT_PRATICA#") { String plainText; if (Utility.theServer != null) plainText = Regex.Replace(Utility.theServer.HtmlDecode(prat.Description), "<[^>]+?>", ""); else plainText = prat.Description; plainText = DBHelper.ParseTextProprio(plainText, new Pessoa(), false); tab1Temp.Elements<wp.TableRow>().First().Elements<wp.TableCell>().First().Elements<wp.Paragraph>().First().Elements<wp.Run>().First().Elements<wp.Text>().First().Text = plainText; } } if (Pagina2) { if (tab2Temp.Elements<wp.TableRow>().First().Elements<wp.TableCell>().First().Elements<wp.Paragraph>().First().Elements<wp.Run>().First().Elements<wp.Text>().First().Text == "#TEXT_PRATICA#") { String plainText; if (Utility.theServer != null) plainText = Regex.Replace(Utility.theServer.HtmlDecode(prat.Description), "<[^>]+?>", ""); else plainText = prat.Description; plainText = DBHelper.ParseTextProprio(plainText, new Pessoa(), false); tab2Temp.Elements<wp.TableRow>().First().Elements<wp.TableCell>().First().Elements<wp.Paragraph>().First().Elements<wp.Run>().First().Elements<wp.Text>().First().Text = plainText; } } foreach (Pergunta perg in prat.Perguntas.Values) { pergunta = repCalcs.getPergunta(perg.PerguntaID); if (count % 2 == 0) { // linha par if (Pagina1) tab1r = (wp.TableRow)rowTab1Par.Clone(); if (Pagina2) tab2r = (wp.TableRow)rowTab2Par.Clone(); } else { // linha impar if (Pagina1) tab1r = (wp.TableRow)rowTab1Impar.Clone(); if (Pagina2) tab2r = (wp.TableRow)rowTab2Impar.Clone(); } if (Pagina1) tab1c = tab1r.Elements<wp.TableCell>().ElementAt(0); if (Pagina2) tab2c = tab2r.Elements<wp.TableCell>().ElementAt(0); if (count + 1 < dataComportamentos.Count) { // introduz o texto da pergunta if (Pagina1) tab1c.Elements<wp.Paragraph>().First().Elements<wp.Run>().First().Elements<wp.Text>().First().Text = dataComportamentos[count + 1].dados[0]; if (Pagina2) tab2c.Elements<wp.Paragraph>().First().Elements<wp.Run>().First().Elements<wp.Text>().First().Text = dataComportamentos[count + 1].dados[0]; // introduz os valores de cada prática if (Pagina1) { for (int i = 1; i <= _projecto.GroupsCodes.Count(); i++) { tab1c = tab1r.Elements<wp.TableCell>().ElementAt(i); fillPlusMinus(tab1c, dataComportamentos[count + 1].dados[i], plusSign, minusSign, naSign, eqSign); } } } // as cores desta linha (prática) if (Pagina2) { tab2c = tab2r.Elements<wp.TableCell>().ElementAt(2); switch (dataComportamentosFracosFortes[count].dados[1]) { case "C": tab2c.Elements<wp.Paragraph>().First().Append((wp.Run)red.Clone()); break; case "B": tab2c.Elements<wp.Paragraph>().First().Append((wp.Run)orange.Clone()); break; case "A": tab2c.Elements<wp.Paragraph>().First().Append((wp.Run)yellow.Clone()); break; } } if (Pagina2) { tab2c = tab2r.Elements<wp.TableCell>().ElementAt(3); if (dataComportamentosFracosFortes[count].dados[2] == "D") tab2c.Elements<wp.Paragraph>().First().Append((wp.Run)green.Clone()); // a percentagem de não respostas tab2c = tab2r.Elements<wp.TableCell>().ElementAt(5); NRs.Elements<wp.Run>().First().Elements<wp.Text>().First().Text = dataComportamentosFracosFortes[count].dados[3] + "%"; tab2c.Append((wp.Paragraph)NRs.Clone()); } // junta às tabelas as linhas if (Pagina1) tab1Temp.Append(tab1r); if (Pagina2) tab2Temp.Append(tab2r); count++; } } // INSERE A TABELA 1 if (Pagina1) par.Append(tab1Temp); // LEGENDA 1 //tempTexto = ""; //legendaTab1.Elements<wp.TableRow>().ElementAt(1).Elements<wp.TableCell>().First().Elements<wp.Paragraph>().First().Elements<wp.Run>().First().Elements<wp.Text>().First().Text = tempTexto; if (Pagina1) par.Append((wp.Table)legendaTab1.Clone()); // QUEBRA DE PÁGINA 1 if (Pagina1) par.Append((wp.Paragraph)quebraPagina.Clone()); // HEADER da 2ªpágina if (Pagina2) { tab = (wp.Table)tabTitulo2.Clone(); p = tab.Elements<wp.TableRow>().ElementAt(1).Elements<wp.TableCell>().ElementAt(0).Elements<wp.Paragraph>().First(); r = p.Elements<wp.Run>().First(); t = r.Elements<wp.Text>().First(); t.Text = repCalcs.getCompetenciaText(comp.CompetenciaID); try { // quadro dos RANKINGS ainda no header2 p = tab.Elements<wp.TableRow>().ElementAt(0).Elements<wp.TableCell>().ElementAt(2).Elements<wp.Paragraph>().First(); r = p.Elements<wp.Run>().First(); t = r.Elements<wp.Text>().First(); ranking = repCalcs.getCompetenciaRanking(comp.CompetenciaID, "T"); t.Text = ranking == 0 ? "-" : ranking.ToString(); for (int i = 1; i < _projecto.GroupsCodes.Count(); i++) { p = tab.Elements<wp.TableRow>().ElementAt(0).Elements<wp.TableCell>().ElementAt(i + 2).Elements<wp.Paragraph>().First(); r = p.Elements<wp.Run>().First(); t = r.Elements<wp.Text>().First(); ranking = repCalcs.getCompetenciaRanking(comp.CompetenciaID, repCalcs.ReportGroupCodes[i]); t.Text = ranking == 0 ? "-" : ranking.ToString(); } // quadro dos GAPS ainda no header2 p = tab.Elements<wp.TableRow>().ElementAt(1).Elements<wp.TableCell>().ElementAt(2).Elements<wp.Paragraph>().First(); r = p.Elements<wp.Run>().First(); gap = repCalcs.getCompetenciaGAP(comp.CompetenciaID, "T"); r.Elements<wp.SymbolChar>().First().Char = gap; for (int i = 1; i < _projecto.GroupsCodes.Count(); i++) { p = tab.Elements<wp.TableRow>().ElementAt(1).Elements<wp.TableCell>().ElementAt(i + 2).Elements<wp.Paragraph>().First(); r = p.Elements<wp.Run>().First(); gap = repCalcs.getCompetenciaGAP(comp.CompetenciaID, repCalcs.ReportGroupCodes[i]); r.Elements<wp.SymbolChar>().First().Char = gap; } } catch { } // INSERTE A TABELA DETALHE PAGINA 2 par.Append(tab); // um parágrafo de espaçamento para que as tabelas não colem par.Append(new wp.Paragraph()); // INSERE A TABELA 2 par.Append(tab2Temp); // LEGENDA 2 //tempTexto = ""; par.Append((wp.Table)legendaTab2.Clone()); // QUEBRA DE PÁGINA 2 if (contaPaginas < repCalcs.getQuantidadeDeCompetencias()) par.Append((wp.Paragraph)quebraPagina.Clone()); } contaPaginas++; } }