none
C# E WORD, CREARE UNA TABELLA DOPO DEL TESTO RRS feed

  • Domanda

  • Salve sto programmando un piccolo form dove dopo alcune righe di testo avrei bisogno di una tabella. Il problema è che non riesco a capire come funzionino le tabelle.

    Lo scopo sarebbe generare una tabella che poi ovviamente andrò a popolare dopo alcune righe di testo.

    esempio:

    DOCUMENTO WORD

    testo 

    testo

    TABELLA.

    sabato 4 gennaio 2020 12:27

Risposte

  • Ciao, ti passo il mio esempio per creare una tabella su WORD. Io ho popolato un FORM e poi lo vado direttamente a riportare nel documento WORD.

    Come le celle per Excel, WORD lavora con un oggetto chiamato Range.

    Esso ti darà sempre la posizione precisa su dove scrivere/inserire le tue informazioni

      /// <summary>
            /// Creo la tabella di riferimento per il DUT e tutti i riferimenti richiesti
            /// </summary>
            /// <param name="document">documento dove inserire la tabella</param>
            /// <param name="range">il parametro range dove si vuole inserire esattamente la tabella</param>
            /// <param name="datagrid">la tabella dataGridView da trascrivere nel documento WORD</param>
            /// <returns></returns>
            public Range CreoTabellaDUT(Document document, Range range, DataGridView datagrid)
            {
                int righe = datagrid.Rows.Count + 1;
                int colonne = 7;

                Table otable; //Creiamo un oggetto di tipo Tabella
                otable = document.Tables.Add(range, righe, colonne); //DefaultTableBehavior, AutoFitBehavior Object opzionali

                otable.Borders.OutsideLineStyle = Microsoft.Office.Interop.Word.WdLineStyle.wdLineStyleSingle;//Riferimento oggetto bordi esterni
                otable.Borders.InsideLineStyle = Microsoft.Office.Interop.Word.WdLineStyle.wdLineStyleSingle; //Riferimento oggetto per bordi interni

                //Scriviamo i dati di intestazione della tabella
                ScriviInGrassettoIlTestoNellaCella(otable, 1, 1, "Customer PN");
                ScriviInGrassettoIlTestoNellaCella(otable, 1, 2, "Internal PN");
                ScriviInGrassettoIlTestoNellaCella(otable, 1, 3, "Description");
                ScriviInGrassettoIlTestoNellaCella(otable, 1, 4, "Function");
                ScriviInGrassettoIlTestoNellaCella(otable, 1, 5, "PCBA");
                ScriviInGrassettoIlTestoNellaCella(otable, 1, 6, "PCBA Supplier");
                ScriviInGrassettoIlTestoNellaCella(otable, 1, 7, "Sample Number");

                //Metto lo sfondo in grigetto ed evidenzio il testo
                for (int i = 1; i <= otable.Columns.Count; i++)
                {
                    otable.Rows[1].Cells[i].Shading.BackgroundPatternColor = WdColor.wdColorGray25;
                    AllineaTestoNellaCella(otable, 1, 1, WdParagraphAlignment.wdAlignParagraphCenter);
                }

                //Trascrivo tutti i dati della mia tabella
                for (int i = 0; i < datagrid.Rows.Count; i++)
                {
                    for (int y = 0; y < datagrid.Columns.Count; y++)
                    {
                        //i+2 ed y+1 perchè la datagrid inizia da zero e la tabella da uno, e noi NON dobbiamo scrivere nella prima riga ma dalla seconda
                        ScriviTestoNellaCella(otable, (i + 2), (y + 1), datagrid.Rows[i].Cells[y].Value.ToString());
                    }
                }

                range = VadoAllaFineVadoACapoVadoAllaFine(document, range);

                return range;
            }

      /// <summary>
            /// Scriviamo il grassetto il testo della cella secondo i riferimenti indicati
            /// </summary>
            /// <param name="table"></param>
            /// <param name="row"></param>
            /// <param name="column"></param>
            /// <param name="text"></param>
            private static void ScriviInGrassettoIlTestoNellaCella(Table table, int row, int column, string text)
            {
                table.Cell(row, column).Range.Text = text;
                table.Cell(row, column).Range.Font.Bold = 1; //Scriviamo in grassetto
            }

     /// <summary>
            /// Scriviamo semplicemente il testo nella relativa cella
            /// </summary>
            /// <param name="table"></param>
            /// <param name="row"></param>
            /// <param name="column"></param>
            /// <param name="text"></param>
            private static void ScriviTestoNellaCella(Table table, int row, int column, string text)
            {
                table.Cell(row, column).Range.Text = text;
            }


    martedì 14 gennaio 2020 15:55

Tutte le risposte

  • Salve,
    Se la tabella contiene solo una colonna con elementi, è consigliabile usare un ListView o ListBox. Se il progetto è un'applicazione Windows Form:
    https://docs.microsoft.com/it-it/dotnet/api/system.windows.forms.listview?view=netframework-4.8
    https://docs.microsoft.com/it-it/dotnet/api/system.windows.forms.listbox?view=netframework-4.8
    Per Windows Presentation Foundation:
    https://docs.microsoft.com/it-it/dotnet/api/system.windows.controls.listview?view=netframework-4.8
    https://docs.microsoft.com/it-it/dotnet/api/system.windows.controls.listbox?view=netframework-4.8
    lunedì 6 gennaio 2020 07:54
    Moderatore
  • Ma la tabella la vuoi generare nel form o nel documento word?

    O in entrambi?

    martedì 7 gennaio 2020 07:32
  • Ciao, ti passo il mio esempio per creare una tabella su WORD. Io ho popolato un FORM e poi lo vado direttamente a riportare nel documento WORD.

    Come le celle per Excel, WORD lavora con un oggetto chiamato Range.

    Esso ti darà sempre la posizione precisa su dove scrivere/inserire le tue informazioni

      /// <summary>
            /// Creo la tabella di riferimento per il DUT e tutti i riferimenti richiesti
            /// </summary>
            /// <param name="document">documento dove inserire la tabella</param>
            /// <param name="range">il parametro range dove si vuole inserire esattamente la tabella</param>
            /// <param name="datagrid">la tabella dataGridView da trascrivere nel documento WORD</param>
            /// <returns></returns>
            public Range CreoTabellaDUT(Document document, Range range, DataGridView datagrid)
            {
                int righe = datagrid.Rows.Count + 1;
                int colonne = 7;

                Table otable; //Creiamo un oggetto di tipo Tabella
                otable = document.Tables.Add(range, righe, colonne); //DefaultTableBehavior, AutoFitBehavior Object opzionali

                otable.Borders.OutsideLineStyle = Microsoft.Office.Interop.Word.WdLineStyle.wdLineStyleSingle;//Riferimento oggetto bordi esterni
                otable.Borders.InsideLineStyle = Microsoft.Office.Interop.Word.WdLineStyle.wdLineStyleSingle; //Riferimento oggetto per bordi interni

                //Scriviamo i dati di intestazione della tabella
                ScriviInGrassettoIlTestoNellaCella(otable, 1, 1, "Customer PN");
                ScriviInGrassettoIlTestoNellaCella(otable, 1, 2, "Internal PN");
                ScriviInGrassettoIlTestoNellaCella(otable, 1, 3, "Description");
                ScriviInGrassettoIlTestoNellaCella(otable, 1, 4, "Function");
                ScriviInGrassettoIlTestoNellaCella(otable, 1, 5, "PCBA");
                ScriviInGrassettoIlTestoNellaCella(otable, 1, 6, "PCBA Supplier");
                ScriviInGrassettoIlTestoNellaCella(otable, 1, 7, "Sample Number");

                //Metto lo sfondo in grigetto ed evidenzio il testo
                for (int i = 1; i <= otable.Columns.Count; i++)
                {
                    otable.Rows[1].Cells[i].Shading.BackgroundPatternColor = WdColor.wdColorGray25;
                    AllineaTestoNellaCella(otable, 1, 1, WdParagraphAlignment.wdAlignParagraphCenter);
                }

                //Trascrivo tutti i dati della mia tabella
                for (int i = 0; i < datagrid.Rows.Count; i++)
                {
                    for (int y = 0; y < datagrid.Columns.Count; y++)
                    {
                        //i+2 ed y+1 perchè la datagrid inizia da zero e la tabella da uno, e noi NON dobbiamo scrivere nella prima riga ma dalla seconda
                        ScriviTestoNellaCella(otable, (i + 2), (y + 1), datagrid.Rows[i].Cells[y].Value.ToString());
                    }
                }

                range = VadoAllaFineVadoACapoVadoAllaFine(document, range);

                return range;
            }

      /// <summary>
            /// Scriviamo il grassetto il testo della cella secondo i riferimenti indicati
            /// </summary>
            /// <param name="table"></param>
            /// <param name="row"></param>
            /// <param name="column"></param>
            /// <param name="text"></param>
            private static void ScriviInGrassettoIlTestoNellaCella(Table table, int row, int column, string text)
            {
                table.Cell(row, column).Range.Text = text;
                table.Cell(row, column).Range.Font.Bold = 1; //Scriviamo in grassetto
            }

     /// <summary>
            /// Scriviamo semplicemente il testo nella relativa cella
            /// </summary>
            /// <param name="table"></param>
            /// <param name="row"></param>
            /// <param name="column"></param>
            /// <param name="text"></param>
            private static void ScriviTestoNellaCella(Table table, int row, int column, string text)
            {
                table.Cell(row, column).Range.Text = text;
            }


    martedì 14 gennaio 2020 15:55