openxml sorting table in word document per column that contains date value

gogi100 51 Reputation points
2021-07-12T19:09:57.5+00:00

i have word document with table that i use for storing items from sharepoint lists. i have to make ascends sorting of table per column that contains date value. my code is

 using (WordprocessingDocument doc = WordprocessingDocument.Open(memStr5, true))
                {
                    MainDocumentPart main = doc.MainDocumentPart;



                    Table TabelaEvidencijaPutnihNaloga = main.Document.Body.Descendants<Table>().First();
                    int brojredova = TabelaEvidencijaPutnihNaloga.Elements<TableRow>().Count();
                    TableRow Red = TabelaEvidencijaPutnihNaloga.Elements<TableRow>().Last();
                  //  TableRow prazanred = new TableRow();
            //        IEnumerable<TableRow> rows = TabelaEvidencijaPutnihNaloga.Elements<TableRow>(); //svi redovi u tabeli

                  //   TableCell cell = rows.Elements<TableCell>().ElementAt(2);
                    TableRow rowCopy = (TableRow)Red.CloneNode(true);

                    brojredova = brojredova - 1;

                    rowCopy.Descendants<TableCell>().ElementAt(0).RemoveAllChildren<Paragraph>();
                    rowCopy.Descendants<TableCell>().ElementAt(0).Append(new Paragraph(new Run(new RunFonts() { Ascii = "Times New Roman" }, new Text(Convert.ToString(brojredova)))));
                    rowCopy.Descendants<TableCell>().ElementAt(1).RemoveAllChildren<Paragraph>();
                    rowCopy.Descendants<TableCell>().ElementAt(1).Append(new Paragraph(new Run(new RunFonts() { Ascii = "Times New Roman" }, new Text(dn.ToString()))));
                    rowCopy.Descendants<TableCell>().ElementAt(2).RemoveAllChildren<Paragraph>();
                    rowCopy.Descendants<TableCell>().ElementAt(2).Append(new Paragraph(new Run(new RunFonts() { Ascii = "Times New Roman" }, new Text(imeiprezime.ToString()))));
                    rowCopy.Descendants<TableCell>().ElementAt(3).RemoveAllChildren<Paragraph>();
                    rowCopy.Descendants<TableCell>().ElementAt(3).Append(new Paragraph(new Run(new RunFonts() { Ascii = "Times New Roman" }, new Text(lokacija.ToString() + "," + brojdananaputu.ToString() + " дан"))));
                    rowCopy.Descendants<TableCell>().ElementAt(4).RemoveAllChildren<Paragraph>();
                    rowCopy.Descendants<TableCell>().ElementAt(4).Append(new Paragraph(new Run(new RunFonts() { Ascii = "Times New Roman" }, new Text(razlogputovanja.ToString()))));
                    rowCopy.Descendants<TableCell>().ElementAt(5).RemoveAllChildren<Paragraph>();
                    rowCopy.Descendants<TableCell>().ElementAt(5).Append(new Paragraph(new Run(new RunFonts() { Ascii = "Times New Roman" }, new Text(vozilo.ToString()))));
                    rowCopy.Descendants<TableCell>().ElementAt(9).RemoveAllChildren<Paragraph>();
                    rowCopy.Descendants<TableCell>().ElementAt(9).Append(new Paragraph(new Run(new RunFonts() { Ascii = "Times New Roman" }, new Text(napomena.ToString()))));


                    TabelaEvidencijaPutnihNaloga.AppendChild(rowCopy);
                  TabelaEvidencijaPutnihNaloga.OrderBy(s => s.Elements<TableCell>().ElementAt(1));
                    //closing WordprocessingDocument automatically saves the document
                }
Office Development
Office Development
Office: A suite of Microsoft productivity software that supports common business tasks, including word processing, email, presentations, and data management and analysis.Development: The process of researching, productizing, and refining new or existing technologies.
3,720 questions
0 comments No comments
{count} votes

3 answers

Sort by: Most helpful
  1. gogi100 51 Reputation points
    2021-07-13T18:54:43.097+00:00

    also i tryed with next code

    using (WordprocessingDocument doc = WordprocessingDocument.Open(memStr5, true))
                    {
    
    
                        MainDocumentPart main = doc.MainDocumentPart;
    
    
    
                        Table TabelaEvidencijaPutnihNaloga = main.Document.Body.Descendants<Table>().First();
                        int brojredova = TabelaEvidencijaPutnihNaloga.Elements<TableRow>().Count();
                        TableRow Red = TabelaEvidencijaPutnihNaloga.Elements<TableRow>().Last();
    
                         for (int i = 1; i <= brojredova; i++)
                            {
                                TableRow row = TabelaEvidencijaPutnihNaloga.Elements<TableRow>().ElementAt(i);
                                 if (Convert.ToDateTime(dn) < Convert.ToDateTime(row.Descendants<TableCell>().ElementAt(1).InnerText))
                                  {
                                      TableRow rowCopy = (TableRow)row.CloneNode(true);
                                      rowCopy.Descendants<TableCell>().ElementAt(0).RemoveAllChildren<Paragraph>();
                                      rowCopy.Descendants<TableCell>().ElementAt(0).Append(new Paragraph(new Run(new RunFonts() { Ascii = "Times New Roman" }, new Text(Convert.ToString(brojredova)))));
                                      rowCopy.Descendants<TableCell>().ElementAt(1).RemoveAllChildren<Paragraph>();
                                      rowCopy.Descendants<TableCell>().ElementAt(1).Append(new Paragraph(new Run(new RunFonts() { Ascii = "Times New Roman" }, new Text(dn.ToString()))));
                                      rowCopy.Descendants<TableCell>().ElementAt(2).RemoveAllChildren<Paragraph>();
                                      rowCopy.Descendants<TableCell>().ElementAt(2).Append(new Paragraph(new Run(new RunFonts() { Ascii = "Times New Roman" }, new Text(imeiprezime.ToString()))));
                                      rowCopy.Descendants<TableCell>().ElementAt(3).RemoveAllChildren<Paragraph>();
                                      rowCopy.Descendants<TableCell>().ElementAt(3).Append(new Paragraph(new Run(new RunFonts() { Ascii = "Times New Roman" }, new Text(lokacija.ToString() + "," + brojdananaputu.ToString() + " дан"))));
                                      rowCopy.Descendants<TableCell>().ElementAt(4).RemoveAllChildren<Paragraph>();
                                      rowCopy.Descendants<TableCell>().ElementAt(4).Append(new Paragraph(new Run(new RunFonts() { Ascii = "Times New Roman" }, new Text(razlogputovanja.ToString()))));
                                      rowCopy.Descendants<TableCell>().ElementAt(5).RemoveAllChildren<Paragraph>();
                                      rowCopy.Descendants<TableCell>().ElementAt(5).Append(new Paragraph(new Run(new RunFonts() { Ascii = "Times New Roman" }, new Text(vozilo.ToString()))));
                                      rowCopy.Descendants<TableCell>().ElementAt(9).RemoveAllChildren<Paragraph>();
                                      rowCopy.Descendants<TableCell>().ElementAt(9).Append(new Paragraph(new Run(new RunFonts() { Ascii = "Times New Roman" }, new Text(napomena.ToString()))));
                                     row.InsertBefore(rowCopy, row);
                                     //TabelaEvidencijaPutnihNaloga.Append(tekucired);
                                  }
                            }
                        if (Convert.ToDateTime(dn) >= Convert.ToDateTime(Red.Descendants<TableCell>().ElementAt(1).InnerText))
                        {
                            //  TableRow prazanred = new TableRow();
                            //        IEnumerable<TableRow> rows = TabelaEvidencijaPutnihNaloga.Elements<TableRow>(); //svi redovi u tabeli
    
                            //   TableCell cell = rows.Elements<TableCell>().ElementAt(2);
                            TableRow rowCopy = (TableRow)Red.CloneNode(true);
    
                            brojredova = brojredova - 1;
    
                            rowCopy.Descendants<TableCell>().ElementAt(0).RemoveAllChildren<Paragraph>();
                            rowCopy.Descendants<TableCell>().ElementAt(0).Append(new Paragraph(new Run(new RunFonts() { Ascii = "Times New Roman" }, new Text(Convert.ToString(brojredova)))));
                            rowCopy.Descendants<TableCell>().ElementAt(1).RemoveAllChildren<Paragraph>();
                            rowCopy.Descendants<TableCell>().ElementAt(1).Append(new Paragraph(new Run(new RunFonts() { Ascii = "Times New Roman" }, new Text(dn.ToString()))));
                            rowCopy.Descendants<TableCell>().ElementAt(2).RemoveAllChildren<Paragraph>();
                            rowCopy.Descendants<TableCell>().ElementAt(2).Append(new Paragraph(new Run(new RunFonts() { Ascii = "Times New Roman" }, new Text(imeiprezime.ToString()))));
                            rowCopy.Descendants<TableCell>().ElementAt(3).RemoveAllChildren<Paragraph>();
                            rowCopy.Descendants<TableCell>().ElementAt(3).Append(new Paragraph(new Run(new RunFonts() { Ascii = "Times New Roman" }, new Text(lokacija.ToString() + "," + brojdananaputu.ToString() + " дан"))));
                            rowCopy.Descendants<TableCell>().ElementAt(4).RemoveAllChildren<Paragraph>();
                            rowCopy.Descendants<TableCell>().ElementAt(4).Append(new Paragraph(new Run(new RunFonts() { Ascii = "Times New Roman" }, new Text(razlogputovanja.ToString()))));
                            rowCopy.Descendants<TableCell>().ElementAt(5).RemoveAllChildren<Paragraph>();
                            rowCopy.Descendants<TableCell>().ElementAt(5).Append(new Paragraph(new Run(new RunFonts() { Ascii = "Times New Roman" }, new Text(vozilo.ToString()))));
                            rowCopy.Descendants<TableCell>().ElementAt(9).RemoveAllChildren<Paragraph>();
                            rowCopy.Descendants<TableCell>().ElementAt(9).Append(new Paragraph(new Run(new RunFonts() { Ascii = "Times New Roman" }, new Text(napomena.ToString()))));
    
    
                            TabelaEvidencijaPutnihNaloga.AppendChild(rowCopy);
    
    
                            // Remove the empty placeholder row from the table.
                            //   TabelaZapisnik.RemoveChild(Red);
    
                        }
    
                        //closing WordprocessingDocument automatically saves the document
    

    but i receive error on row.InsertBefore(rowCopy, row);. how resolve this problem?

    0 comments No comments

  2. gogi100 51 Reputation points
    2021-07-14T11:12:23.91+00:00

    my error on insertbefore() 'Operation is not valid due to the current state of the object.'

    0 comments No comments

  3. gogi100 51 Reputation points
    2021-07-15T12:57:40.87+00:00
    0 comments No comments