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 |
|||
Сообщение было отмечено как решение Решение
4 |
Shmidt1987 3 / 3 / 0 Регистрация: 26.06.2012 Сообщений: 63 |
||||
13.03.2013, 19:10 |
5 |
|||
Ну и где тут данные из DataGridView?
0 |
192 / 192 / 29 Регистрация: 03.12.2009 Сообщений: 853 |
|
13.03.2013, 19:15 |
6 |
Ну и где тут данные из DataGridView? В этом примере записываются данные из двумерного массива. В чём проблема по аналогии записать из GridView ?
0 |
Kuzyavka 4 / 4 / 3 Регистрация: 07.02.2013 Сообщений: 54 |
||||||||
02.05.2013, 18:46 |
7 |
|||||||
Кликните здесь для просмотра всего текста
Прошу прощение за свою малограмонтность, но как обращаться с таблицей, когда нужно запихать по строке с датагрида?) Добавлено через 1 час 22 минуты
Но комплютер бедный, аж задыхается, пока каждую ячейку выделит и занесет туды, в таблицу ворда… Может есть гуманней метод?
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 |
Ну почему же? З.Ы. Столкнулся с интересным моментом. После выгрузки таблицы в ворд пользователь видит ворд со своей таблицей, если он не СОХРАНИТ её (нажмет «Закрыть» и потом кнопочку «Нет»), то это дело остается в процессах и размножается с каждой кнопкой «Нет»… Можно ли это побороть программно, или все же пользователю каждый раз придется сохранять файл.док, даже если он его чем-то не устроил в последний момент. Миниатюры
0 |
4 / 4 / 3 Регистрация: 07.02.2013 Сообщений: 54 |
|
03.05.2013, 10:25 |
10 |
Вам нужна таблица в один столбец или как? не совсем понял что вы хотите сделать) Только сейчас я понял, о чем вы спросили!) Нет, мне ненужна таблица в один столбец!) Просто подобный метод перебора записей из таблицы(datagridview) и запись их в таблицу (word) довольно громоздкий, как мне кажется…
0 |
AlekseyS_35 6 / 6 / 3 Регистрация: 29.08.2016 Сообщений: 107 |
||||
22.05.2017, 13:46 |
11 |
|||
подскажите по чему при экспорте данных ругается на строчку и пишет что в экземпляре не задана ссылка на объект.
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 |
|||
Я кодом выше пытаюсь данные из dataGridView экспортировать в Word, при компиляции программы ошибки не вылизали но при попытки экспорта выдает исключение. если что то делаю не так т о подскажите как правильно сделать.
0 |
AlekseyS_35 6 / 6 / 3 Регистрация: 29.08.2016 Сообщений: 107 |
||||
24.05.2017, 18:15 |
14 |
|||
С вопросом исключения я разобрался, однако теперь возник вопрос почему при экспорте в Word, данные в таблицу выгружаются со второй строки?
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 |
|||
Поскольку я вставлял таблицу в ранее созданный шаблон то у меня получился такой код:
данный код работает
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.
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
The exported HTML File
The exported Word Document
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. Thanksusing 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);