Сохранение datagridview в word

You can try my method to export data to Excel (*.Xlsx) , it’s easy to use and works 100% with any DataGridView , just copy the following code :

    using Excel = Microsoft.Office.Interop.Excel;
    using Microsoft.Office.Interop.Excel;
    using System.Reflection;

    public void Export_DataGridView_To_Excel(DataGridView DGV, string filename)
    {
        string[] Alphabit = { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M",
                              "N", "O","P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z" };

        string Range_Letter = Alphabit[DGV.Columns.Count];
        string Range_Row = (DGV.Rows.Count + 1).ToString();

        if (File.Exists(filename))
        {
            File.Delete(filename);
        }

        Excel.Application oApp;
        Excel.Worksheet oSheet;
        Excel.Workbook oBook;

        oApp = new Excel.Application();
        oBook = oApp.Workbooks.Add();
        oSheet = (Excel.Worksheet)oBook.Worksheets.get_Item(1);


        for (int x = 0; x < DGV.Columns.Count; x++)
        {
            // creating Columns :
            oSheet.Cells[1, x + 2] = DGV.Columns[x].HeaderText;
        }


        for (int i = 0; i < DGV.Columns.Count; i++)
        {
            for (int j = 0; j < DGV.Rows.Count; j++)
            {
                // creating rows :
                oSheet.Cells[j + 2, i + 2] = DGV.Rows[j].Cells[i].Value;
            }
        }

        //Add some formatting
        Range rng1 = oSheet.get_Range("B1", Range_Letter + "1");
        rng1.Font.Size = 14;
        rng1.Font.Bold = true;
        rng1.Cells.Borders.LineStyle = XlLineStyle.xlDouble;
        rng1.Cells.Borders.Color = System.Drawing.Color.DeepSkyBlue;
        rng1.Font.Color = System.Drawing.Color.Black;
        rng1.HorizontalAlignment = XlHAlign.xlHAlignCenter;
        rng1.Interior.Color = System.Drawing.Color.LightGray;

        Range rng2 = oSheet.get_Range("B2", Range_Letter + Range_Row);
        rng2.WrapText = false;
        rng2.Font.Size = 12;
        rng2.Cells.Borders.LineStyle = XlLineStyle.xlContinuous;
        rng2.Cells.Borders.Color = System.Drawing.Color.DeepSkyBlue;
        rng2.VerticalAlignment = XlVAlign.xlVAlignCenter;
        rng2.Interior.Color = System.Drawing.Color.Azure;
        rng2.EntireColumn.AutoFit();
        rng2.EntireRow.AutoFit();

        //Add a header row
        oSheet.get_Range("B1", Range_Letter + "2").EntireRow.Insert(XlInsertShiftDirection.xlShiftDown, Missing.Value);
        oSheet.Cells[1, 3] = "List of : list title ";
        Range rng3 = oSheet.get_Range("B1", Range_Letter + "2");
        rng3.Merge(Missing.Value);
        rng3.Font.Size = 16;
        rng3.Font.Color = System.Drawing.Color.Blue;
        rng3.Font.Bold = true;
        rng3.VerticalAlignment = XlVAlign.xlVAlignCenter;
        rng3.Interior.Color = System.Drawing.Color.LightSkyBlue;


        oBook.SaveAs(filename);
        oBook.Close();
        oApp.Quit();
     // NASSIM LOUCHANI
    }

    private void Button_Click(object sender, EventArgs e)
    {
      SaveFileDialog sfd = new SaveFileDialog();

      sfd.Title = "Export To Excel";
      sfd.Filter = "To Excel (Xlsx)|*.xlsx";
      sfd.FileName = "your document name";

        if (sfd.ShowDialog() == DialogResult.OK)
        {
             AED.Export_DataGridView_To_Excel(dataGridView,sfd.FileName);
        }
    }

Thank you .

3 / 3 / 0

Регистрация: 26.03.2011

Сообщений: 15

1

.NET 4.x

22.08.2011, 14:16. Показов 14891. Ответов 15


Студворк — интернет-сервис помощи студентам

Как содержимое DataGridView занести в Word. Если можно то как можно подробнее!!!



0



6260 / 3561 / 898

Регистрация: 28.10.2010

Сообщений: 5,926

22.08.2011, 14:31

2

Вопрос из ряда: хочу разбогатеть, не подскажите как?

Что конкретно не получается?



0



3 / 3 / 0

Регистрация: 26.03.2011

Сообщений: 15

22.08.2011, 14:35

 [ТС]

3

На форме в Datagrid отображаются данные как эти данные внести в Word (и вопрос нормальный если вы в это не понимаете то лучше не парить друг другу мозг, без обид)



0



Петррр

6260 / 3561 / 898

Регистрация: 28.10.2010

Сообщений: 5,926

22.08.2011, 14:47

4

Лучший ответ Сообщение было отмечено как решение

Решение

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
using System;
using Word = Microsoft.Office.Interop.Word;
 
class Program
{
    static void Main(string[] args)
    {
        const int columns = 4;
        const int rows = 3;
        int[,] array = new int[rows, columns] { { 1, 2, 3, 4 }, { 5, 6, 7, 8 }, { 9, 10, 11, 12 } };
        Word.Application application = new Word.Application();
        Object missing = Type.Missing;
        application.Documents.Add(ref missing, ref missing, ref missing, ref missing);
        Word.Document document = application.ActiveDocument;
        Word.Range range = application.Selection.Range;
        Object behiavor = Word.WdDefaultTableBehavior.wdWord9TableBehavior;
        Object autoFitBehiavor = Word.WdAutoFitBehavior.wdAutoFitFixed;
        document.Tables.Add(range, rows, columns, ref behiavor, ref autoFitBehiavor);
        for (int i = 0; i < rows; i++)
            for (int j = 0; j < columns; j++)
                document.Tables[1].Cell(i + 1, j + 1).Range.Text = array[i, j].ToString();
        application.Visible = true;
    }
}



4



Shmidt1987

3 / 3 / 0

Регистрация: 26.06.2012

Сообщений: 63

13.03.2013, 19:10

5

Цитата
Сообщение от Петррр
Посмотреть сообщение

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
using System;
using Word = Microsoft.Office.Interop.Word;
 
class Program
{
    static void Main(string[] args)
    {
        const int columns = 4;
        const int rows = 3;
        int[,] array = new int[rows, columns] { { 1, 2, 3, 4 }, { 5, 6, 7, 8 }, { 9, 10, 11, 12 } };
        Word.Application application = new Word.Application();
        Object missing = Type.Missing;
        application.Documents.Add(ref missing, ref missing, ref missing, ref missing);
        Word.Document document = application.ActiveDocument;
        Word.Range range = application.Selection.Range;
        Object behiavor = Word.WdDefaultTableBehavior.wdWord9TableBehavior;
        Object autoFitBehiavor = Word.WdAutoFitBehavior.wdAutoFitFixed;
        document.Tables.Add(range, rows, columns, ref behiavor, ref autoFitBehiavor);
        for (int i = 0; i < rows; i++)
            for (int j = 0; j < columns; j++)
                document.Tables[1].Cell(i + 1, j + 1).Range.Text = array[i, j].ToString();
        application.Visible = true;
    }
}

Ну и где тут данные из DataGridView?



0



192 / 192 / 29

Регистрация: 03.12.2009

Сообщений: 853

13.03.2013, 19:15

6

Цитата
Сообщение от Shmidt1987
Посмотреть сообщение

Ну и где тут данные из DataGridView?

В этом примере записываются данные из двумерного массива. В чём проблема по аналогии записать из GridView ?



0



Kuzyavka

4 / 4 / 3

Регистрация: 07.02.2013

Сообщений: 54

02.05.2013, 18:46

7

Кликните здесь для просмотра всего текста

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
using System;
using Word = Microsoft.Office.Interop.Word;
 
class Program
{
    static void Main(string[] args)
    {
        const int columns = 4;
        const int rows = 3;
        int[,] array = new int[rows, columns] { { 1, 2, 3, 4 }, { 5, 6, 7, 8 }, { 9, 10, 11, 12 } };
        Word.Application application = new Word.Application();
        Object missing = Type.Missing;
        application.Documents.Add(ref missing, ref missing, ref missing, ref missing);
        Word.Document document = application.ActiveDocument;
        Word.Range range = application.Selection.Range;
        Object behiavor = Word.WdDefaultTableBehavior.wdWord9TableBehavior;
        Object autoFitBehiavor = Word.WdAutoFitBehavior.wdAutoFitFixed;
        document.Tables.Add(range, rows, columns, ref behiavor, ref autoFitBehiavor);
        for (int i = 0; i < rows; i++)
            for (int j = 0; j < columns; j++)
                document.Tables[1].Cell(i + 1, j + 1).Range.Text = array[i, j].ToString();
        application.Visible = true;
    }
}

Прошу прощение за свою малограмонтность, но как обращаться с таблицей, когда нужно запихать по строке с датагрида?)

Добавлено через 1 час 22 минуты
Юзая ваш кусок кода сделал так:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
        private void button1_Click(object sender, EventArgs e)
        {
            //
            //const int columns = 4;
            //const int rows = 3;
            //int[,] array = new int[rows, columns] { { 1, 2, 3, 4 }, { 5, 6, 7, 8 }, { 9, 10, 11, 12 } };
            //
            int columns = 9;
            int rows = dataGridView1.RowCount;
            //  
 
            Word.Application application = new Word.Application();
            Object missing = Type.Missing;
            application.Documents.Add(ref missing, ref missing, ref missing, ref missing);
            Word.Document document = application.ActiveDocument;
            Word.Range range = application.Selection.Range;
            Object behiavor = Word.WdDefaultTableBehavior.wdWord9TableBehavior;
            Object autoFitBehiavor = Word.WdAutoFitBehavior.wdAutoFitFixed;
            document.Tables.Add(range, rows, columns, ref behiavor, ref autoFitBehiavor);
            for (int j = 0; j < rows; j++)
                for (int i = 0; i < columns; i++)
                {                    
                    document.Tables[1].Cell(j+1, i+1).Range.Text = dataGridView1[i, j].Value.ToString();//.ToString()
                }
            application.Visible = true;
            
        }

Но комплютер бедный, аж задыхается, пока каждую ячейку выделит и занесет туды, в таблицу ворда… Может есть гуманней метод?



0



192 / 192 / 29

Регистрация: 03.12.2009

Сообщений: 853

02.05.2013, 19:20

8

Вам нужна таблица в один столбец или как? не совсем понял что вы хотите сделать)



0



4 / 4 / 3

Регистрация: 07.02.2013

Сообщений: 54

02.05.2013, 19:45

9

Ну почему же?
я получаю ворд с вот такой табличкой. (скрин приклеен)

З.Ы. Столкнулся с интересным моментом. После выгрузки таблицы в ворд пользователь видит ворд со своей таблицей, если он не СОХРАНИТ её (нажмет «Закрыть» и потом кнопочку «Нет»), то это дело остается в процессах и размножается с каждой кнопкой «Нет»… Можно ли это побороть программно, или все же пользователю каждый раз придется сохранять файл.док, даже если он его чем-то не устроил в последний момент.
З.З.Ы. «некрасоту» с номером по-порядку и датой почти исправил

Миниатюры

Как содержимое DataGridView занести в Word?
 



0



4 / 4 / 3

Регистрация: 07.02.2013

Сообщений: 54

03.05.2013, 10:25

10

Цитата
Сообщение от da1z
Посмотреть сообщение

Вам нужна таблица в один столбец или как? не совсем понял что вы хотите сделать)

Только сейчас я понял, о чем вы спросили!) Нет, мне ненужна таблица в один столбец!) Просто подобный метод перебора записей из таблицы(datagridview) и запись их в таблицу (word) довольно громоздкий, как мне кажется…



0



AlekseyS_35

6 / 6 / 3

Регистрация: 29.08.2016

Сообщений: 107

22.05.2017, 13:46

11

Цитата
Сообщение от Kuzyavka
Посмотреть сообщение

C#
1
document.Tables[1].Cell(j+1, i+1).Range.Text = dataGridView1[i, j].Value.ToString();//.ToString

подскажите по чему при экспорте данных ругается на строчку и пишет что в экземпляре не задана ссылка на объект.



0



102 / 106 / 62

Регистрация: 19.11.2015

Сообщений: 380

22.05.2017, 14:51

12

На какой именно объект не создана ссылка?



0



AlekseyS_35

6 / 6 / 3

Регистрация: 29.08.2016

Сообщений: 107

22.05.2017, 15:14

13

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
          
            int columns = 4;
            int rows = dataGridView1.RowCount;
            //  
 
            Word.Application application = new Word.Application();
            Object missing = Type.Missing;
            application.Documents.Add(ref missing, ref missing, ref missing, ref missing);
            Word.Document document = application.ActiveDocument;
            Word.Range range = application.Selection.Range;
            Object behiavor = Word.WdDefaultTableBehavior.wdWord9TableBehavior;
            Object autoFitBehiavor = Word.WdAutoFitBehavior.wdAutoFitFixed;
            document.Tables.Add(range, rows, columns, ref behiavor, ref autoFitBehiavor);
            for (int j = 0; j < rows; j++)
                for (int i = 0; i < columns; i++)
                {
                    document.Tables[1].Cell(j + 1, i + 1).Range.Text = dataGridView1[i, j].Value.ToString();
                }
            application.Visible = true;

Я кодом выше пытаюсь данные из dataGridView экспортировать в Word, при компиляции программы ошибки не вылизали но при попытки экспорта выдает исключение.

если что то делаю не так т о подскажите как правильно сделать.



0



AlekseyS_35

6 / 6 / 3

Регистрация: 29.08.2016

Сообщений: 107

24.05.2017, 18:15

14

С вопросом исключения я разобрался, однако теперь возник вопрос почему при экспорте в Word, данные в таблицу выгружаются со второй строки?

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
            int columns = 4;
            int rows = dataGridView1.RowCount;
            //  
 
            Word.Application application = new Word.Application();
            Object missing = Type.Missing;
            application.Documents.Add(ref missing, ref missing, ref missing, ref missing);
            Word.Document document = application.ActiveDocument;
            Word.Range range = application.Selection.Range;
            Object behiavor = Word.WdDefaultTableBehavior.wdWord9TableBehavior;
            Object autoFitBehiavor = Word.WdAutoFitBehavior.wdAutoFitFixed;
            document.Tables.Add(range, rows, columns, ref behiavor, ref autoFitBehiavor);
            for (int j = 0; j < rows; j++)
                for (int i = 0; i < columns; i++)
                {
                    document.Tables[1].Cell(j + 1, i + 1).Range.Text = dataGridView1[i, j].Value.ToString();
                }
            application.Visible = true;



0



1 / 1 / 0

Регистрация: 21.06.2017

Сообщений: 11

21.06.2017, 19:58

15

AlekseyS_35, Я кодом выше пытаюсь данные из dataGridView экспортировать в Word, при компиляции программы ошибки не вылизали но при попытки экспорта выдает исключение,c вопросом исключения я разобрался. Можете объяснить как вы это сделали ?



1



AlekseyS_35

6 / 6 / 3

Регистрация: 29.08.2016

Сообщений: 107

22.06.2017, 11:17

16

Поскольку я вставлял таблицу в ранее созданный шаблон то у меня получился такой код:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
private void button4_Click(object sender, EventArgs e)
        {
            dataGridView1.AllowUserToAddRows = false;
 
            Word.Application wordapp = new Word.Application();
            wordapp.Visible = true;
            Object template = "путь к шаблону Word";
            Object newTemplate = false;
            Object documentType = Word.WdNewDocumentType.wdNewBlankDocument;
            Object visible = true;
            Word._Document worddoc;
            //Создаем документ
            worddoc = wordapp.Documents.Add(ref template, ref newTemplate, ref documentType, ref visible);
 
            Object bookmarkNameObj = "FIO";
            Word.Range bookmarkRange = null;
            bookmarkRange = worddoc.Bookmarks.get_Item(ref bookmarkNameObj).Range;
            bookmarkRange.Text = comboBox1.Text;
 
            bookmarkNameObj = "StartDate";
            bookmarkRange = null;
            bookmarkRange = worddoc.Bookmarks.get_Item(ref bookmarkNameObj).Range;
            bookmarkRange.Text = dateTimePicker1.Text;
 
            bookmarkNameObj = "EndDate";
            bookmarkRange = null;
            bookmarkRange = worddoc.Bookmarks.get_Item(ref bookmarkNameObj).Range;
            bookmarkRange.Text = dateTimePicker2.Text;
 
            bookmarkNameObj = "Table";
            bookmarkRange = null;
            bookmarkRange = worddoc.Bookmarks.get_Item(ref bookmarkNameObj).Range;
            Object behiavor = Word.WdDefaultTableBehavior.wdWord9TableBehavior;
            Object autoFitBehiavor = Word.WdAutoFitBehavior.wdAutoFitFixed;
            int columns = 2;
            int rows = dataGridView1.RowCount + 1;
            worddoc.Tables.Add(bookmarkRange, rows, columns, ref behiavor, ref autoFitBehiavor);
            //Форматирование заголовок(жирный шрифт и размер текста)
            worddoc.Tables[1].Cell(1, 1).Range.Bold = 1;
            worddoc.Tables[1].Cell(1, 2).Range.Bold = 1;
            worddoc.Tables[1].Cell(1, 1).Range.Font.Size = 14;
            worddoc.Tables[1].Cell(1, 2).Range.Font.Size = 14;
            //Название столбцов в таблице
            worddoc.Tables[1].Cell(1, 1).Range.Text = "Код";
            worddoc.Tables[1].Cell(1, 2).Range.Text = "Группа";
 
            //ориентация страницы (Альбомная)
            worddoc.PageSetup.Orientation = Word.WdOrientation.wdOrientLandscape;     
 
            for (int j = 0; j < rows - 1; j++)
            {
 
                for (int i = 1; i < columns; i++)
                {
                  //здесь я указал из каких столбцов делать экспорт
                    worddoc.Tables[1].Cell(j + 2, i + 0).Range.Text = dataGridView1[1, j].Value.ToString();
                    worddoc.Tables[1].Cell(j + 2, i + 1).Range.Text = dataGridView1[2, j].Value.ToString();
                }
            }
            wordapp.Visible = true;
 
            dataGridView1.AllowUserToAddRows = true;
 
        }

данный код работает



1



In this article I will explain with an example, how to export DataGridView to Word Document in Windows Forms (WinForms) Application using C# and VB.Net.

First a DataGridView will be populated with some data using DataTable and then an HTML Table will be generated using the values from the DataGridView and will be saved to a Folder (Directory).

Finally, the HTML File will be converted into a Word Document using Microsoft Office Interop Library and saved to a Folder (Directory) in Windows Forms (WinForms) Application using C# and VB.Net.

Form Design

The Form consists of a DataGridView and a Button.

Export DataGridView to Word in Windows Application using C# and VB.Net

Namespaces

You will need to import the following namespaces.

C#

using System.IO;

using Microsoft.Office.Interop.Word;

VB.Net

Imports System.IO

Imports Microsoft.Office.Interop.Word

Populating the DataGridView

Inside the Form Load event handler, the DataGridView is populated with data by making use of a dynamic DataTable with some records.

C#

private void Form1_Load(object sender, EventArgs e)

{

    DataTable dt = new DataTable();

    dt.Columns.AddRange(new DataColumn[3] { new DataColumn(«Id», typeof(int)),

                        new DataColumn(«Name», typeof(string)),

                        new DataColumn(«Country»,typeof(string)) });

    dt.Rows.Add(1, «John Hammond», «United States»);

    dt.Rows.Add(2, «Mudassar Khan», «India»);

    dt.Rows.Add(3, «Suzanne Mathews», «France»);

    dt.Rows.Add(4, «Robert Schidner», «Russia»);

    this.dataGridView1.DataSource = dt;

    this.dataGridView1.AllowUserToAddRows = false;

}

VB.Net

Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load

    Dim dt As New DataTable()

    dt.Columns.AddRange(New DataColumn() {New DataColumn(«Id», GetType(Integer)), _

                                           New DataColumn(«Name», GetType(String)), _

                                           New DataColumn(«Country», GetType(String))})

    dt.Rows.Add(1, «John Hammond», «United States»)

    dt.Rows.Add(2, «Mudassar Khan», «India»)

    dt.Rows.Add(3, «Suzanne Mathews», «France»)

    dt.Rows.Add(4, «Robert Schidner», «Russia»)

    Me.dataGridView1.DataSource = dt

    Me.dataGridView1.AllowUserToAddRows = False

End Sub

Exporting DataGridView to Word Document in Windows Application

When the Export Button is clicked, an HTML Table is created with string concatenation.

The HTML Table will contain columns same as that of the DataGridView and then a loop is executed over the DataGridView columns to add their header texts to the Header row of the HTML Table.

Once the Header row is populated then loop is executed over the DataGridView rows to add data rows to the HTML Table.

Then the HTML Table string will be saved to a Folder (Directory) as HTML File.

Finally, the HTML File will be converted to Word Document and saved to a Folder (Directory) and the HTML File is deleted.

C#

private void btnExport_Click(object sender, EventArgs e)

{

    //Table start.

    string html = «<table cellpadding=’5′ cellspacing=’0′ style=’border: 1px solid #ccc;font-size: 9pt;font-family:arial’>»;

    //Adding HeaderRow.

    html += «<tr>»;

    foreach (DataGridViewColumn column in dataGridView1.Columns)

    {

        html += «<th style=’background-color: #B8DBFD;border: 1px solid #ccc’>» + column.HeaderText + «</th>»;

    }

    html += «</tr>»;

    //Adding DataRow.

    foreach (DataGridViewRow row in dataGridView1.Rows)

    {

        html += «<tr>»;

        foreach (DataGridViewCell cell in row.Cells)

        {

            html += «<td style=’width:120px;border: 1px solid #ccc’>» + cell.Value.ToString() + «</td>»;

        }

        html += «</tr>»;

    }

    //Table end.

    html += «</table>»;

    //Save the HTML string as HTML File.

    string htmlFilePath = @»E:FilesDataGridView.htm»;

    File.WriteAllText(htmlFilePath, html);

    //Convert the HTML File to Word document.

    _Application word = new Microsoft.Office.Interop.Word.Application();

    _Document wordDoc = word.Documents.Open(FileName: htmlFilePath, ReadOnly: false);

    wordDoc.SaveAs(FileName: @»E:FilesDataGridView.doc», FileFormat: WdSaveFormat.wdFormatRTF);

    ((_Document)wordDoc).Close();

    ((_Application)word).Quit();

    //Delete the HTML File.

    File.Delete(htmlFilePath);

}

VB.Net

Private Sub btnExport_Click(sender As System.Object, e As System.EventArgs) Handles btnExport.Click

    ‘Table start.

    Dim html As String = «<table cellpadding=’5′ cellspacing=’0′ style=’border: 1px solid #ccc;font-size: 9pt;font-family:arial’>»

    ‘Adding HeaderRow.

    html &= «<tr>»

    For Each column As DataGridViewColumn In dataGridView1.Columns

        html &= «<th style=’background-color: #B8DBFD;border: 1px solid #ccc’>» & column.HeaderText & «</th>»

    Next

    html &= «</tr>»

    ‘Adding DataRow.

    For Each row As DataGridViewRow In dataGridView1.Rows

        html &= «<tr>»

        For Each cell As DataGridViewCell In row.Cells

            html &= «<td style=’width:120px;border: 1px solid #ccc’>» & cell.Value.ToString() & «</td>»

        Next

        html &= «</tr>»

    Next

    ‘Table end.

    html &= «</table>»

    ‘Save the HTML string as HTML File.

    Dim htmlFilePath As String = «E:FilesDataGridView.htm»

    File.WriteAllText(htmlFilePath, html)

    ‘Convert the HTML File to Word document.

    Dim word As _Application = New Microsoft.Office.Interop.Word.Application

    Dim wordDoc As _Document = word.Documents.Open(FileName:=htmlFilePath, ReadOnly:=False)

    wordDoc.SaveAs(FileName:=«E:FilesDataGridView.doc», FileFormat:=WdSaveFormat.wdFormatRTF)

    CType(wordDoc, _Document).Close()

    CType(word, _Application).Quit()

    ‘Delete the HTML File.

    File.Delete(htmlFilePath)

End Sub

Screenshots

The DataGridView

Export DataGridView to Word in Windows Application using C# and VB.Net

The exported HTML File

Export DataGridView to Word in Windows Application using C# and VB.Net

The exported Word Document

Export DataGridView to Word in Windows Application using C# and VB.Net

Downloads

How to implement the logic of the below code using Microsoft.Office.Interop.Word.dll?
Now iam using third party dll(Spire.Doc.dll), instead of Spire.Doc.dll. i want to use Microsoft.Office.Interop.Word.dll .
Please help me to implement this logic using office word dll. Thanks

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Spire.Doc;
using Spire.Doc.Documents;
using Spire.License;
using Spire.Doc.Fields;

namespace Export_Datagridview
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        public string filename;
        public string Reportfile_path;
        private void Form1_Load(object sender, EventArgs e)
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("1");
            dt.Columns.Add("2");
            dt.Columns.Add("3");
            dt.Columns.Add("4");
            dt.Columns.Add("5");
            dt.Columns.Add("6");
            dt.Columns.Add("7");
            dt.Columns.Add("8");
            dt.Columns.Add("9");
            dt.Columns.Add("10");
            dt.Columns.Add("11");
            dt.Columns.Add("12");
            dt.Columns.Add("13");
            dt.Columns.Add("14");
            dt.Columns.Add("15");
            dt.Columns.Add("16");
            dt.Rows.Add(new object[] { "1", 2, "3", "4", "5", 6, "7", "8", "9", 10, "11", "12", "13", 14, "15", "16" });
            dt.Rows.Add(new object[] { "1", 2, "3", "4", "5", 6, "7", "8", "9", 10, "11", "12", "13", 14, "15", "16" });
            dt.Rows.Add(new object[] { "1", 2, "3", "4", "5", 6, "7", "8", "9", 10, "11", "12", "13", 14, "15", "16" });
            dt.Rows.Add(new object[] { "1", 2, "3", "4", "5", 6, "7", "8", "9", 10, "11", "12", "13", 14, "15", "16" });
            dt.Rows.Add(new object[] { "1", 2, "3", "4", "5", 6, "7", "8", "9", 10, "11", "12", "13", 14, "15", "16" });
            dt.Rows.Add(new object[] { "1", 2, "3", "4", "5", 6, "7", "8", "9", 10, "11", "12", "13", 14, "15", "16" });
            dt.Rows.Add(new object[] { "1", 2, "3", "4", "5", 6, "7", "8", "9", 10, "11", "12", "13", 14, "15", "16" });
            dt.Rows.Add(new object[] { "1", 2, "3", "4", "5", 6, "7", "8", "9", 10, "11", "12", "13", 14, "15", "16" });
            dt.Rows.Add(new object[] { "1", 2, "3", "4", "5", 6, "7", "8", "9", 10, "11", "12", "13", 14, "15", "16" });
            dt.Rows.Add(new object[] { "1", 2, "3", "4", "5", 6, "7", "8", "9", 10, "11", "12", "13", 14, "15", "16" });
            dt.Rows.Add(new object[] { "1", 2, "3", "4", "5", 6, "7", "8", "9", 10, "11", "12", "13", 14, "15", "16" });
            dt.Rows.Add(new object[] { "1", 2, "3", "4", "5", 6, "7", "8", "9", 10, "11", "12", "13", 14, "15", "16" });
            dt.Rows.Add(new object[] { "1", 2, "3", "4", "5", 6, "7", "8", "9", 10, "11", "12", "13", 14, "15", "16" });
            dt.Rows.Add(new object[] { "1", 2, "3", "4", "5", 6, "7", "8", "9", 10, "11", "12", "13", 14, "15", "16" });
            dt.Rows.Add(new object[] { "1", 2, "3", "4", "5", 6, "7", "8", "9", 10, "11", "12", "13", 14, "15", "16" });
            dt.Rows.Add(new object[] { "1", 2, "3", "4", "5", 6, "7", "8", "9", 10, "11", "12", "13", 14, "15", "16" });

            dataGridView1.DataSource = dt;
        }

              private void button1_Click(object sender, EventArgs e)
        {
            export_datagridview();
        }
        private void export_datagridview()
        {
            string time = DateTime.Now.ToString("HH:mm:ss");
            string date = DateTime.Today.ToShortDateString();  
            filename = Reportfile_path + "sample" + ".doc";
            Document document = new Document();
            try
            {
                document.LoadFromFile(filename, FileFormat.Doc);
            }
            catch
            {

            }
            int xx = 0, yy = 0, section_number = 0;
            Section section = new Section(document);
            Paragraph paragraph = section.AddParagraph();
            paragraph = section.Paragraphs.Count > 0 ? section.Paragraphs[0] : section.AddParagraph();
            yy = document.Sections.Count;
            if (yy == 0)
            {
                section_number = yy;
                section = document.AddSection();
                section = document.Sections[section_number];
            }
            else
            {
                section_number = yy - 1;
                section = document.Sections[section_number];
            }
            xx = section.Tables.Count;

            if (xx == 5)
            {
                section_number++;
                section = document.AddSection();
                section = document.Sections[section_number];
            }
            else
            {
                section = document.Sections[section_number];
            }
            paragraph = section.AddParagraph();
            paragraph.AppendText("tt SOMETHING");
            paragraph = section.AddParagraph();
            paragraph = section.AddParagraph();
            paragraph.AppendText("Somethingtt:tsomething");
            paragraph = section.AddParagraph();
            paragraph.AppendText("somethingtt:tsomething");
            Add_Table(dataGridView1, filename, section);
            document.SaveToFile(filename, FileFormat.Doc);
        }
        private void Add_Table(DataGridView dGV, string filename, Section section)
        {
            Spire.Doc.Table table = section.AddTable();
            table.ResetCells(dGV.RowCount, dGV.ColumnCount);
            table.ResetCells(dGV.RowCount + 1, dGV.ColumnCount);
            // first row
            TableRow row = table.Rows[0];
            row.IsHeader = true;
            row.Height = 22;
            row.HeightType = TableRowHeightType.Exactly;
            row.RowFormat.BackColor = Color.Gray;
            for (int i = 0; i < dGV.ColumnCount; i++)
            {
                row.Cells[i].CellFormat.VerticalAlignment = VerticalAlignment.Middle;
                Paragraph p = row.Cells[i].AddParagraph();
                p.Format.HorizontalAlignment = Spire.Doc.Documents.HorizontalAlignment.Center;
                TextRange txtRange = p.AppendText(Convert.ToString(dGV.Columns[i].HeaderText));
                txtRange.CharacterFormat.Bold = true;
            }
            for (int r = 0; r < dGV.RowCount; r++)
            {
                TableRow dataRow = table.Rows[r + 1];
                dataRow.Height = 22;
                dataRow.HeightType = TableRowHeightType.Exactly;
                dataRow.RowFormat.BackColor = Color.Empty;
                for (int c = 0; c < dGV.ColumnCount; c++)
                {
                    dataRow.Cells[c].CellFormat.VerticalAlignment = VerticalAlignment.Middle;
                    row.Cells[c].Width = 80;
                    dataRow.Cells[c].Width = 80;
                    dataRow.Cells[c].AddParagraph().AppendText(Convert.ToString(dGV.Rows[r].Cells[c].Value));
                }
            }
        }

    }
}

And this below code does not go well with the actual need . on button click event of more than once ( several times) all exported 
datagridview  into word document are overlapping with each other so how 
to avoid the overlapping and save all tables properly(table right below 
the table) ? please guide me to implement the above code logic.
All exported Datagridview content is getting merged in a single place (getting merged with each other) is there way to save them in a well organised way (recently exported table below the previously exported table) ?
How to avoid overlapping? on button click event of more than once ( several times) all exported datagridview  into word document are overlapping with each other so how to avoid the overlapping and save all tables properly(table right below the table) ?

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;

namespace Save_DataGridView_As_Word_Doc
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        public string filename;
        public string filepath;

        private void Form1_Load(object sender, EventArgs e)
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("1");
            dt.Columns.Add("2");
            dt.Columns.Add("3");
            dt.Columns.Add("4");
            dt.Columns.Add("5");
            dt.Columns.Add("6");
            dt.Columns.Add("7");
            dt.Columns.Add("8");
            dt.Columns.Add("9");
            dt.Columns.Add("10");
            dt.Columns.Add("11");
            dt.Columns.Add("12");
            dt.Columns.Add("13");
            dt.Columns.Add("14");
            dt.Columns.Add("15");
            dt.Columns.Add("16");
            dt.Rows.Add(new object[] { "1", 2, "3", "4", "5", 6, "7", "8", "9", 10, "11", "12", "13", 14, "15", "16" });
            dt.Rows.Add(new object[] { "1", 2, "3", "4", "5", 6, "7", "8", "9", 10, "11", "12", "13", 14, "15", "16" });
            dt.Rows.Add(new object[] { "1", 2, "3", "4", "5", 6, "7", "8", "9", 10, "11", "12", "13", 14, "15", "16" });
            dt.Rows.Add(new object[] { "1", 2, "3", "4", "5", 6, "7", "8", "9", 10, "11", "12", "13", 14, "15", "16" });
            dt.Rows.Add(new object[] { "1", 2, "3", "4", "5", 6, "7", "8", "9", 10, "11", "12", "13", 14, "15", "16" });
            dt.Rows.Add(new object[] { "1", 2, "3", "4", "5", 6, "7", "8", "9", 10, "11", "12", "13", 14, "15", "16" });
            dt.Rows.Add(new object[] { "1", 2, "3", "4", "5", 6, "7", "8", "9", 10, "11", "12", "13", 14, "15", "16" });
            dt.Rows.Add(new object[] { "1", 2, "3", "4", "5", 6, "7", "8", "9", 10, "11", "12", "13", 14, "15", "16" });
            dt.Rows.Add(new object[] { "1", 2, "3", "4", "5", 6, "7", "8", "9", 10, "11", "12", "13", 14, "15", "16" });
            dt.Rows.Add(new object[] { "1", 2, "3", "4", "5", 6, "7", "8", "9", 10, "11", "12", "13", 14, "15", "16" });
            dt.Rows.Add(new object[] { "1", 2, "3", "4", "5", 6, "7", "8", "9", 10, "11", "12", "13", 14, "15", "16" });
            dt.Rows.Add(new object[] { "1", 2, "3", "4", "5", 6, "7", "8", "9", 10, "11", "12", "13", 14, "15", "16" });
            dt.Rows.Add(new object[] { "1", 2, "3", "4", "5", 6, "7", "8", "9", 10, "11", "12", "13", 14, "15", "16" });
            dt.Rows.Add(new object[] { "1", 2, "3", "4", "5", 6, "7", "8", "9", 10, "11", "12", "13", 14, "15", "16" });
            dt.Rows.Add(new object[] { "1", 2, "3", "4", "5", 6, "7", "8", "9", 10, "11", "12", "13", 14, "15", "16" });
            dt.Rows.Add(new object[] { "1", 2, "3", "4", "5", 6, "7", "8", "9", 10, "11", "12", "13", 14, "15", "16" });

            dataGridView1.DataSource = dt;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            save_datagridview(dataGridView1, filename);
        }

        public void save_datagridview(DataGridView DGV, string filename)
        {
            string time = DateTime.Now.ToString("HH:mm:ss");
            string date = DateTime.Today.ToShortDateString();
            filename = filepath + @"D:datagridview" + ".docx";

            var application = new Microsoft.Office.Interop.Word.Application();

            Microsoft.Office.Interop.Word.Document doc = new Microsoft.Office.Interop.Word.Document();

            try
            {
                var originalDocument = application.Documents.Open(filename);
            }
            catch
            {

            }

            if (DGV.Rows.Count != 0)
            {
                int RowCount = DGV.Rows.Count;
                int ColumnCount = DGV.Columns.Count;
                Object[,] DataArray = new object[RowCount + 1, ColumnCount + 1];
                int r = 0; for (int c = 0; c <= ColumnCount - 1; c++)
                {
                    for (r = 0; r <= RowCount - 1; r++)
                    {
                        DataArray[r, c] = DGV.Rows[r].Cells[c].Value;
                    }
                }

                application.ActiveDocument.PageSetup.Orientation = Microsoft.Office.Interop.Word.WdOrientation.wdOrientLandscape;
                dynamic orange = application.ActiveDocument.Content.Application.Selection.Range;
                string otemp = "";
                for (r = 0; r <= RowCount - 1; r++)
                {
                    for (int c = 0; c <= ColumnCount - 1; c++)
                    {
                        otemp = otemp + DataArray[r, c] + "t";
                    }
                }

                orange.Text = otemp;
                object Separator = Microsoft.Office.Interop.Word.WdTableFieldSeparator.wdSeparateByTabs;
                object ApplyBorders = true;
                object AutoFit = true;
                object AutoFitBehavior = Microsoft.Office.Interop.Word.WdAutoFitBehavior.wdAutoFitContent;
                orange.ConvertToTable(ref Separator, ref RowCount, ref ColumnCount, Type.Missing, Type.Missing, ref ApplyBorders, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, ref AutoFit, ref AutoFitBehavior, Type.Missing);  

                                        orange.Select();
                    application.ActiveDocument.Application.Selection.Tables[1].Select();
                    application.ActiveDocument.Application.Selection.Tables[1].Rows.AllowBreakAcrossPages = 0;
                    application.ActiveDocument.Application.Selection.Tables[1].Rows.Alignment = 0;
                    application.ActiveDocument.Application.Selection.Tables[1].Rows[1].Select();
                    application.ActiveDocument.Application.Selection.InsertRowsAbove(1);
                    application.ActiveDocument.Application.Selection.Tables[1].Rows[1].Select();

                    application.ActiveDocument.Application.Selection.Tables[1].Rows[1].Range.Bold = 1;
                    application.ActiveDocument.Application.Selection.Tables[1].Range.Font.Name = "Tahoma";
                    application.ActiveDocument.Application.Selection.Tables[1].Rows[1].Range.Font.Size = 14;

                                for (int c = 0; c <= ColumnCount - 1; c++)
                {
                   application.ActiveDocument.Application.Selection.Tables[1].Cell(1, c + 1).Range.Text = dataGridView1.Columns[c].HeaderText;
                }
                application.ActiveDocument.Application.Selection.Tables[1].set_Style("Grid Table 4 - Accent 5");
                application.ActiveDocument.Application.Selection.Tables[1].Rows[1].Select();
                application.ActiveDocument.Application.Selection.Cells.VerticalAlignment = Microsoft.Office.Interop.Word.WdCellVerticalAlignment.wdCellAlignVerticalCenter;

                           foreach (Microsoft.Office.Interop.Word.Section section in application.ActiveDocument.Application.ActiveDocument.Sections)
                {
                    Microsoft.Office.Interop.Word.Range headerRange = section.Headers[Microsoft.Office.Interop.Word.WdHeaderFooterIndex.wdHeaderFooterPrimary].Range;

                    headerRange.Fields.Add(headerRange, Microsoft.Office.Interop.Word.WdFieldType.wdFieldPage);

                    headerRange.Text = "XYZ";
                    headerRange.Font.Size = 18;
                    headerRange.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphCenter;
                }

                //object start = 0, end = 0;
                //Microsoft.Office.Interop.Word.Range rng1 = application.ActiveDocument.Range(ref start, ref end);
                //Microsoft.Office.Interop.Word.Range rng2 = application.ActiveDocument.Range(ref start, ref end);
                //rng1.SetRange(rng1.End, rng1.End);
                //rng1.Text = "tttttt xyzt :t xyz ";
                //rng2.SetRange(rng2.End, rng2.End);
                //rng2.Text = "ttttttttttttttt zyzt :t xyz ";

                application.ActiveDocument.Save();
                application.Quit();
                MessageBox.Show("Document created successfully !");

            }
        }
    }
}

Hi,

you can export to Word in ASP.NET or Windows application with this C# / VB.NET Word library.

Here is a sample C# code how to export DataGridView to Word file with .NET mail merge functionality:

ComponentInfo.SetLicense("FREE-LIMITED-KEY");




var document = new DocumentModel();
document.Sections.Add(
  new Section(document,
    new Table(document,
      new TableRow(document,
        new TableCell(document,
          new Paragraph(document, "Name")),
        new TableCell(document,
          new Paragraph(document, "Surname"))),
      new TableRow(document,
        new TableCell(document,
          new Paragraph(document,
            new Field(document, FieldType.MergeField, "RangeStart:People"),
            new Field(document, FieldType.MergeField, "Name"))),
        new TableCell(document,
          new Paragraph(document,
            new Field(document, FieldType.MergeField, "Surname"),
            new Field(document, FieldType.MergeField, "RangeEnd:People")))))));
document.Save("TemplateDocument.docx", SaveOptions.DocxDefault);


document = DocumentModel.Load("TemplateDocument.docx", LoadOptions.DocxDefault);




document.MailMerge.ExecuteRange("People", dataGridView.DataSource);


document.Save("Document.docx", SaveOptions.DocxDefault);

Понравилась статья? Поделить с друзьями:
  • Софт word скачать бесплатно
  • Сотый столбец в excel
  • Сосчитать по количеству в excel
  • Составьте таблицы для хранения сведений об общественном транспорте excel
  • Составьте таблицу умножения чисел первого десятка используйте смешанные ссылки excel