Dodawanie tabeli do dokumentu Word za pomocą C# i api Worda - System.Runtime.InteropServices.COMException; oraz niepoprawne formatowanie

0

Cześć, piszę program, który zbiera dane zleceń w postaci tabelaryczne i chcę żeby zapisywały mi się one w w dokumencie Word. Przygotowałem formatkę i napisałem funkcję zapisującą, która prezentuje się następująco:

private void SaveButton_Click(object sender, EventArgs e)
        {
            this.Cursor = Cursors.WaitCursor;

            foreach (Control control in this.BookmarksFlowLayoutPanel.Controls)
            {
                try
                {
                    if (((BookmarkFill)control).GetBookMark != null)
                    {
                        word.ActiveDocument.Bookmarks[((BookmarkFill)control).GetBookMark].Range.Text = ((BookmarkFill)control).Content;
                    }
                }
                catch (Exception) 
                {
                    if (((BookmarkTableFill)control).GetBookmark != null)
                    {
                        var range = word.ActiveDocument.Bookmarks[((BookmarkTableFill)control).GetBookmark].Range;
                        var dataTabel = ((BookmarkTableFill)control).Content;

                        Microsoft.Office.Interop.Word.Table table;
                        table = document.Tables.Add(range, dataTabel.Rows.Count, dataTabel.Columns.Count);

                        for (int i = -1; i < dataTabel.Rows.Count; i++)
                        {
                            for (int j = 0; j < dataTabel.Columns.Count; j++)
                            {
                                if (i == -1)
                                    table.Cell(i, j).Range.Text = dataTabel.Columns[j].ColumnName;
                                else
                                    table.Cell(i, j).Range.Text = dataTabel.Rows[i][j].ToString();
                            }
                        }
                    }
                }
            }

Moim problemem jest to, że kiedy próbuję wygenerować i wstawić tabelę do dokumentu Word to otrzymuję następujące exception:
screenshot-20210221230628.png
Natomiast w programie Word zaczęła tworzyć się tabela i wygląda w następujący sposób:
screenshot-20210221230738.png
Formatowanie jest tragiczne i na dodatek nie po kolei tzn. najpierw dane, a na końcu są nazwy kolumn.

Jest to moja pierwsza styczność z zapisywaniem danych do dokumentu Word, a sprawa jest dla mnie bardzo pilna, dlatego bardzo proszę Was o pomoc we wskazaniu błędu lub wytłumaczeniu jak można tworzyć tabele i zapisywać je do dokumentu Word

0

hej a dlaczego int i = -1 ? i ta zmienna u wykorzystujesz

ps sa języki programowania gdzie takie zapis jak i = -1 nawet nie rozpoczyna pętli for

0

Udało mi się problem rozwiązać. Problemem nie było samo to -1, ale w api worda numeracja wierszy i kolumn zaczyna się od 1

if (((BookmarkTableFill)control).GetBookmark != null)
                    {
                        var range = word.ActiveDocument.Bookmarks[((BookmarkTableFill)control).GetBookmark].Range;
                        var dataTabel = ((BookmarkTableFill)control).Content;

                        Microsoft.Office.Interop.Word.Table table;
                        table = document.Tables.Add(range, dataTabel.Rows.Count, dataTabel.Columns.Count);

                        for (int i = 1; i <= dataTabel.Columns.Count; i++)
                            table.Cell(1, i).Range.Text = dataTabel.Columns[i-1].ColumnName;

                        for (int i = 2; i <= dataTabel.Rows.Count; i++)
                        {
                            for (int j = 1; j <= dataTabel.Columns.Count; j++)
                            {
                                table.Cell(i, j).Range.Text = dataTabel.Rows[i-2][j-1].ToString();
                            }
                        }
                    }
0

ok

1 użytkowników online, w tym zalogowanych: 0, gości: 1