1.       #region DataGridView数据显示到Excel   
2.       ///     
3.       /// 打开Excel并将DataGridView控件中数据导出到Excel   
4.       ///     
5.       /// DataGridView对象     
6.       /// 是否显示Excel界面     
7.       ///    
8.       /// add com "Microsoft Excel 11.0 Object Library"   
9.       /// using Excel=Microsoft.Office.Interop.Excel;   
10.    ///    
11.    ///      
12.    public bool DataGridviewShowToExcel(DataGridView dgv, bool isShowExcle)   
13.    {   
14.        if (dgv.Rows.Count == 0)   
15.            return false;   
16.        //建立Excel对象   
17.        Excel.Application excel = new Excel.Application();   
18.        excel.Application.Workbooks.Add(true);   
19.        excel.Visible = isShowExcle;   
20.        //生成字段名称   
21.        for (int i = 0; i < dgv.ColumnCount; i++)   
22.        {   
23.            excel.Cells[1, i + 1] = dgv.Columns[i].HeaderText;   
24.        }   
25.        //填充数据   
26.        for (int i = 0; i < dgv.RowCount - 1; i++)   
27.        {   
28.            for (int j = 0; j < dgv.ColumnCount; j++)   
29.            {   
30.                if (dgv[j, i].ValueType == typeof(string))   
31.                {   
32.                    excel.Cells[i + 2, j + 1] = "'" + dgv[j, i].Value.ToString();   
33.                }   
34.                else  
35.                {   
36.                    excel.Cells[i + 2, j + 1] = dgv[j, i].Value.ToString();   
37.                }   
38.            }   
39.        }   
40.        return true;   
41.    }  
42.    #endregion   
43.     
44.    #region DateGridView导出到csv格式的Excel   
45.    ///    
46.    /// 常用方法,列之间加\t,一行一行输出,此文件其实是csv文件,不过默认可以当成Excel打开。   
47.    ///    
48.    ///    
49.    /// using System.IO;   
50.    ///    
51.    ///    
52.    private void DataGridViewToExcel(DataGridView dgv)   
53.    {   
54.        SaveFileDialog dlg = new SaveFileDialog();   
55.        dlg.Filter = "Execl files (*.xls)|*.xls";   
56.        dlg.FilterIndex = 0;   
57.        dlg.RestoreDirectory = true;   
58.        dlg.CreatePrompt = true;   
59.        dlg.Title = "保存为Excel文件";   
60.      
61.        if (dlg.ShowDialog() == DialogResult.OK)   
62.        {   
63.            Stream myStream;   
64.            myStream = dlg.OpenFile();   
65.            StreamWriter sw = new StreamWriter(myStream, System.Text.Encoding.GetEncoding(-0));   
66.            string columnTitle = "";   
67.            try  
68.            {   
69.                //写入列标题   
70.                for (int i = 0; i < dgv.ColumnCount; i++)   
71.                {   
72.                    if (i > 0)   
73.                    {   
74.                        columnTitle += "\t";   
75.                    }   
76.                    columnTitle += dgv.Columns[i].HeaderText;   
77.                }   
78.                sw.WriteLine(columnTitle);   
79.      
80.                //写入列内容   
81.                for (int j = 0; j < dgv.Rows.Count; j++)   
82.                {   
83.                    string columnValue = "";   
84.                    for (int k = 0; k < dgv.Columns.Count; k++)   
85.                    {   
86.                        if (k > 0)   
87.                        {   
88.                            columnValue += "\t";   
89.                        }   
90.                        if (dgv.Rows[j].Cells[k].Value == null)   
91.                            columnValue += "";   
92.                        else  
93.                            columnValue += dgv.Rows[j].Cells[k].Value.ToString().Trim();   
94.                    }   
95.                    sw.WriteLine(columnValue);   
96.                }   
97.                sw.Close();   
98.                myStream.Close();   
99.            }   
100.        catch (Exception e)   
101.        {   
102.            MessageBox.Show(e.ToString());   
103.        }   
104.        finally  
105.        {   
106.            sw.Close();   
107.            myStream.Close();   
108.        }   
109.    }   
110.}   
111.#endregion  
112. 
113.#region DataGridView导出到Excel,有一定的判断性   
114.///     
115.///方法,导出DataGridView中的数据到Excel文件   
116.///     
117.///    
118./// add com "Microsoft Excel 11.0 Object Library"   
119./// using Excel=Microsoft.Office.Interop.Excel;   
120./// using System.Reflection;   
121.///    
122.///  DataGridView     
123.public static void DataGridViewToExcel(DataGridView dgv)   
124.{  
125. 
126. 
127.    #region   验证可操作性   
128.  
129.    //申明保存对话框   
130.    SaveFileDialog dlg = new SaveFileDialog();   
131.    //默然文件后缀   
132.    dlg.DefaultExt = "xls ";   
133.    //文件后缀列表   
134.    dlg.Filter = "EXCEL文件(*.XLS)|*.xls ";   
135.    //默然路径是系统当前路径   
136.    dlg.InitialDirectory = Directory.GetCurrentDirectory();   
137.    //打开保存对话框   
138.    if (dlg.ShowDialog() == DialogResult.Cancel) return;   
139.    //返回文件路径   
140.    string fileNameString = dlg.FileName;   
141.    //验证strFileName是否为空或值无效   
142.    if (fileNameString.Trim() == " ")   
143.    { return; }   
144.    //定义表格内数据的行数和列数   
145.    int rowscount = dgv.Rows.Count;   
146.    int colscount = dgv.Columns.Count;   
147.    //行数必须大于0    
148.    if (rowscount <= 0)   
149.    {   
150.        MessageBox.Show("没有数据可供保存 ", "提示 ", MessageBoxButtons.OK, MessageBoxIcon.Information);   
151.        return;   
152.    }   
153.  
154.    //列数必须大于0    
155.    if (colscount <= 0)   
156.    {   
157.        MessageBox.Show("没有数据可供保存 ", "提示 ", MessageBoxButtons.OK, MessageBoxIcon.Information);   
158.        return;   
159.    }   
160.  
161.    //行数不可以大于65536    
162.    if (rowscount > 65536)   
163.    {   
164.        MessageBox.Show("数据记录数太多(最多不能超过65536条),不能保存 ", "提示 ", MessageBoxButtons.OK, MessageBoxIcon.Information);   
165.        return;   
166.    }   
167.  
168.    //列数不可以大于255    
169.    if (colscount > 255)   
170.    {   
171.        MessageBox.Show("数据记录行数太多,不能保存 ", "提示 ", MessageBoxButtons.OK, MessageBoxIcon.Information);   
172.        return;   
173.    }   
174.  
175.    //验证以fileNameString命名的文件是否存在,如果存在删除它   
176.    FileInfo file = new FileInfo(fileNameString);   
177.    if (file.Exists)   
178.    {   
179.        try  
180.        {   
181.            file.Delete();   
182.        }   
183.        catch (Exception error)   
184.        {   
185.            MessageBox.Show(error.Message, "删除失败 ", MessageBoxButtons.OK, MessageBoxIcon.Warning);   
186.            return;   
187.        }   
188.    }  
189.    #endregion   
190.    Excel.Application objExcel = null;   
191.    Excel.Workbook objWorkbook = null;   
192.    Excel.Worksheet objsheet = null;   
193.    try  
194.    {   
195.        //申明对象   
196.        objExcel = new Microsoft.Office.Interop.Excel.Application();   
197.        objWorkbook = objExcel.Workbooks.Add(Missing.Value);   
198.        objsheet = (Excel.Worksheet)objWorkbook.ActiveSheet;   
199.        //设置EXCEL不可见   
200.        objExcel.Visible = false;   
201.  
202.        //向Excel中写入表格的表头   
203.        int displayColumnsCount = 1;   
204.        for (int i = 0; i <= dgv.ColumnCount - 1; i++)   
205.        {   
206.            if (dgv.Columns[i].Visible == true)   
207.            {   
208.                objExcel.Cells[1, displayColumnsCount] = dgv.Columns[i].HeaderText.Trim();   
209.                displayColumnsCount++;   
210.            }   
211.        }   
212.        //设置进度条   
213.        //tempProgressBar.Refresh();    
214.        //tempProgressBar.Visible   =   true;    
215.        //tempProgressBar.Minimum=1;    
216.        //tempProgressBar.Maximum=dgv.RowCount;    
217.        //tempProgressBar.Step=1;    
218.        //向Excel中逐行逐列写入表格中的数据   
219.        for (int row = 0; row <= dgv.RowCount - 1; row++)   
220.        {   
221.            //tempProgressBar.PerformStep();    
222.  
223.            displayColumnsCount = 1;   
224.            for (int col = 0; col < colscount; col++)   
225.            {   
226.                if (dgv.Columns[col].Visible == true)   
227.                {   
228.                    try  
229.                    {   
230.                        objExcel.Cells[row + 2, displayColumnsCount] = dgv.Rows[row].Cells[col].Value.ToString().Trim();   
231.                        displayColumnsCount++;   
232.                    }   
233.                    catch (Exception)   
234.                    {   
235.  
236.                    }   
237.  
238.                }   
239.            }   
240.        }   
241.        //隐藏进度条   
242.        //tempProgressBar.Visible   =   false;    
243.        //保存文件   
244.        objWorkbook.SaveAs(fileNameString, Missing.Value, Missing.Value, Missing.Value, Missing.Value,   
245.                Missing.Value, Excel.XlSaveAsAccessMode.xlShared, Missing.Value, Missing.Value, Missing.Value,   
246.                Missing.Value, Missing.Value);   
247.    }   
248.    catch (Exception error)   
249.    {   
250.        MessageBox.Show(error.Message, "警告 ", MessageBoxButtons.OK, MessageBoxIcon.Warning);   
251.        return;   
252.    }   
253.    finally  
254.    {   
255.        //关闭Excel应用   
256.        if (objWorkbook != null) objWorkbook.Close(Missing.Value, Missing.Value, Missing.Value);   
257.        if (objExcel.Workbooks != null) objExcel.Workbooks.Close();   
258.        if (objExcel != null) objExcel.Quit();   
259.  
260.        objsheet = null;   
261.        objWorkbook = null;   
262.        objExcel = null;   
263.    }   
264.    MessageBox.Show(fileNameString + "\n\n导出完毕! ", "提示 ", MessageBoxButtons.OK, MessageBoxIcon.Information);   
265.  
266.}  
267. 
268.#endregion