• DataGridView导出到Excel的三个方法


    1. #region DataGridView数据显示到Excel     
    2. /// <summary>      
    3. /// 打开Excel并将DataGridView控件中数据导出到Excel     
    4. /// </summary>      
    5. /// <param name="dgv">DataGridView对象 </param>      
    6. /// <param name="isShowExcle">是否显示Excel界面 </param>      
    7. /// <remarks>     
    8. /// add com "Microsoft Excel 11.0 Object Library"     
    9. /// using Excel=Microsoft.Office.Interop.Excel;     
    10. /// </remarks>     
    11. /// <returns> </returns>      
    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. /// <summary>     
    46. /// 常用方法,列之间加/t,一行一行输出,此文件其实是csv文件,不过默认可以当成Excel打开。     
    47. /// </summary>     
    48. /// <remarks>     
    49. /// using System.IO;     
    50. /// </remarks>     
    51. /// <param name="dgv"></param>     
    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. /// <summary>      
    115. ///方法,导出DataGridView中的数据到Excel文件      
    116. /// </summary>      
    117. /// <remarks>     
    118. /// add com "Microsoft Excel 11.0 Object Library"     
    119. /// using Excel=Microsoft.Office.Interop.Excel;     
    120. /// using System.Reflection;     
    121. /// </remarks>     
    122. /// <param name= "dgv"> DataGridView </param>      
    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    
    269.  
    270. #region DataGridView数据显示到Excel  
    271. /// <summary>   
    272. /// 打开Excel并将DataGridView控件中数据导出到Excel  
    273. /// </summary>   
    274. /// <param name="dgv">DataGridView对象 </param>   
    275. /// <param name="isShowExcle">是否显示Excel界面 </param>   
    276. /// <remarks>  
    277. /// add com "Microsoft Excel 11.0 Object Library"  
    278. /// using Excel=Microsoft.Office.Interop.Excel;  
    279. /// </remarks>  
    280. /// <returns> </returns>   
    281. public bool DataGridviewShowToExcel(DataGridView dgv, bool isShowExcle)  
    282. {  
    283.     if (dgv.Rows.Count == 0)  
    284.         return false;  
    285.     //建立Excel对象   
    286.     Excel.Application excel = new Excel.Application();  
    287.     excel.Application.Workbooks.Add(true);  
    288.     excel.Visible = isShowExcle;  
    289.     //生成字段名称   
    290.     for (int i = 0; i < dgv.ColumnCount; i++)  
    291.     {  
    292.         excel.Cells[1, i + 1] = dgv.Columns[i].HeaderText;  
    293.     }  
    294.     //填充数据   
    295.     for (int i = 0; i < dgv.RowCount - 1; i++)  
    296.     {  
    297.         for (int j = 0; j < dgv.ColumnCount; j++)  
    298.         {  
    299.             if (dgv[j, i].ValueType == typeof(string))  
    300.             {  
    301.                 excel.Cells[i + 2, j + 1] = "'" + dgv[j, i].Value.ToString();  
    302.             }  
    303.             else  
    304.             {  
    305.                 excel.Cells[i + 2, j + 1] = dgv[j, i].Value.ToString();  
    306.             }  
    307.         }  
    308.     }  
    309.     return true;  
    310. }  
    311. #endregion   
    312.  
    313. #region DateGridView导出到csv格式的Excel  
    314. /// <summary>  
    315. /// 常用方法,列之间加/t,一行一行输出,此文件其实是csv文件,不过默认可以当成Excel打开。  
    316. /// </summary>  
    317. /// <remarks>  
    318. /// using System.IO;  
    319. /// </remarks>  
    320. /// <param name="dgv"></param>  
    321. private void DataGridViewToExcel(DataGridView dgv)  
    322. {  
    323.     SaveFileDialog dlg = new SaveFileDialog();  
    324.     dlg.Filter = "Execl files (*.xls)|*.xls";  
    325.     dlg.FilterIndex = 0;  
    326.     dlg.RestoreDirectory = true;  
    327.     dlg.CreatePrompt = true;  
    328.     dlg.Title = "保存为Excel文件";  
    329.   
    330.     if (dlg.ShowDialog() == DialogResult.OK)  
    331.     {  
    332.         Stream myStream;  
    333.         myStream = dlg.OpenFile();  
    334.         StreamWriter sw = new StreamWriter(myStream, System.Text.Encoding.GetEncoding(-0));  
    335.         string columnTitle = "";  
    336.         try  
    337.         {  
    338.             //写入列标题  
    339.             for (int i = 0; i < dgv.ColumnCount; i++)  
    340.             {  
    341.                 if (i > 0)  
    342.                 {  
    343.                     columnTitle += "/t";  
    344.                 }  
    345.                 columnTitle += dgv.Columns[i].HeaderText;  
    346.             }  
    347.             sw.WriteLine(columnTitle);  
    348.   
    349.             //写入列内容  
    350.             for (int j = 0; j < dgv.Rows.Count; j++)  
    351.             {  
    352.                 string columnValue = "";  
    353.                 for (int k = 0; k < dgv.Columns.Count; k++)  
    354.                 {  
    355.                     if (k > 0)  
    356.                     {  
    357.                         columnValue += "/t";  
    358.                     }  
    359.                     if (dgv.Rows[j].Cells[k].Value == null)  
    360.                         columnValue += "";  
    361.                     else  
    362.                         columnValue += dgv.Rows[j].Cells[k].Value.ToString().Trim();  
    363.                 }  
    364.                 sw.WriteLine(columnValue);  
    365.             }  
    366.             sw.Close();  
    367.             myStream.Close();  
    368.         }  
    369.         catch (Exception e)  
    370.         {  
    371.             MessageBox.Show(e.ToString());  
    372.         }  
    373.         finally  
    374.         {  
    375.             sw.Close();  
    376.             myStream.Close();  
    377.         }  
    378.     }  
    379. }   
    380. #endregion  
    381.  
    382. #region DataGridView导出到Excel,有一定的判断性  
    383. /// <summary>   
    384. ///方法,导出DataGridView中的数据到Excel文件   
    385. /// </summary>   
    386. /// <remarks>  
    387. /// add com "Microsoft Excel 11.0 Object Library"  
    388. /// using Excel=Microsoft.Office.Interop.Excel;  
    389. /// using System.Reflection;  
    390. /// </remarks>  
    391. /// <param name= "dgv"> DataGridView </param>   
    392. public static void DataGridViewToExcel(DataGridView dgv)  
    393. {  
    394.  
    395.  
    396.     #region   验证可操作性  
    397.   
    398.     //申明保存对话框   
    399.     SaveFileDialog dlg = new SaveFileDialog();  
    400.     //默然文件后缀   
    401.     dlg.DefaultExt = "xls ";  
    402.     //文件后缀列表   
    403.     dlg.Filter = "EXCEL文件(*.XLS)|*.xls ";  
    404.     //默然路径是系统当前路径   
    405.     dlg.InitialDirectory = Directory.GetCurrentDirectory();  
    406.     //打开保存对话框   
    407.     if (dlg.ShowDialog() == DialogResult.Cancel) return;  
    408.     //返回文件路径   
    409.     string fileNameString = dlg.FileName;  
    410.     //验证strFileName是否为空或值无效   
    411.     if (fileNameString.Trim() == " ")  
    412.     { return; }  
    413.     //定义表格内数据的行数和列数   
    414.     int rowscount = dgv.Rows.Count;  
    415.     int colscount = dgv.Columns.Count;  
    416.     //行数必须大于0   
    417.     if (rowscount <= 0)  
    418.     {  
    419.         MessageBox.Show("没有数据可供保存 ", "提示 ", MessageBoxButtons.OK, MessageBoxIcon.Information);  
    420.         return;  
    421.     }  
    422.   
    423.     //列数必须大于0   
    424.     if (colscount <= 0)  
    425.     {  
    426.         MessageBox.Show("没有数据可供保存 ", "提示 ", MessageBoxButtons.OK, MessageBoxIcon.Information);  
    427.         return;  
    428.     }  
    429.   
    430.     //行数不可以大于65536   
    431.     if (rowscount > 65536)  
    432.     {  
    433.         MessageBox.Show("数据记录数太多(最多不能超过65536条),不能保存 ", "提示 ", MessageBoxButtons.OK, MessageBoxIcon.Information);  
    434.         return;  
    435.     }  
    436.   
    437.     //列数不可以大于255   
    438.     if (colscount > 255)  
    439.     {  
    440.         MessageBox.Show("数据记录行数太多,不能保存 ", "提示 ", MessageBoxButtons.OK, MessageBoxIcon.Information);  
    441.         return;  
    442.     }  
    443.   
    444.     //验证以fileNameString命名的文件是否存在,如果存在删除它   
    445.     FileInfo file = new FileInfo(fileNameString);  
    446.     if (file.Exists)  
    447.     {  
    448.         try  
    449.         {  
    450.             file.Delete();  
    451.         }  
    452.         catch (Exception error)  
    453.         {  
    454.             MessageBox.Show(error.Message, "删除失败 ", MessageBoxButtons.OK, MessageBoxIcon.Warning);  
    455.             return;  
    456.         }  
    457.     }  
    458.     #endregion  
    459.     Excel.Application objExcel = null;  
    460.     Excel.Workbook objWorkbook = null;  
    461.     Excel.Worksheet objsheet = null;  
    462.     try  
    463.     {  
    464.         //申明对象   
    465.         objExcel = new Microsoft.Office.Interop.Excel.Application();  
    466.         objWorkbook = objExcel.Workbooks.Add(Missing.Value);  
    467.         objsheet = (Excel.Worksheet)objWorkbook.ActiveSheet;  
    468.         //设置EXCEL不可见   
    469.         objExcel.Visible = false;  
    470.   
    471.         //向Excel中写入表格的表头   
    472.         int displayColumnsCount = 1;  
    473.         for (int i = 0; i <= dgv.ColumnCount - 1; i++)  
    474.         {  
    475.             if (dgv.Columns[i].Visible == true)  
    476.             {  
    477.                 objExcel.Cells[1, displayColumnsCount] = dgv.Columns[i].HeaderText.Trim();  
    478.                 displayColumnsCount++;  
    479.             }  
    480.         }  
    481.         //设置进度条   
    482.         //tempProgressBar.Refresh();   
    483.         //tempProgressBar.Visible   =   true;   
    484.         //tempProgressBar.Minimum=1;   
    485.         //tempProgressBar.Maximum=dgv.RowCount;   
    486.         //tempProgressBar.Step=1;   
    487.         //向Excel中逐行逐列写入表格中的数据   
    488.         for (int row = 0; row <= dgv.RowCount - 1; row++)  
    489.         {  
    490.             //tempProgressBar.PerformStep();   
    491.   
    492.             displayColumnsCount = 1;  
    493.             for (int col = 0; col < colscount; col++)  
    494.             {  
    495.                 if (dgv.Columns[col].Visible == true)  
    496.                 {  
    497.                     try  
    498.                     {  
    499.                         objExcel.Cells[row + 2, displayColumnsCount] = dgv.Rows[row].Cells[col].Value.ToString().Trim();  
    500.                         displayColumnsCount++;  
    501.                     }  
    502.                     catch (Exception)  
    503.                     {  
    504.   
    505.                     }  
    506.   
    507.                 }  
    508.             }  
    509.         }  
    510.         //隐藏进度条   
    511.         //tempProgressBar.Visible   =   false;   
    512.         //保存文件   
    513.         objWorkbook.SaveAs(fileNameString, Missing.Value, Missing.Value, Missing.Value, Missing.Value,  
    514.                 Missing.Value, Excel.XlSaveAsAccessMode.xlShared, Missing.Value, Missing.Value, Missing.Value,  
    515.                 Missing.Value, Missing.Value);  
    516.     }  
    517.     catch (Exception error)  
    518.     {  
    519.         MessageBox.Show(error.Message, "警告 ", MessageBoxButtons.OK, MessageBoxIcon.Warning);  
    520.         return;  
    521.     }  
    522.     finally  
    523.     {  
    524.         //关闭Excel应用   
    525.         if (objWorkbook != null) objWorkbook.Close(Missing.Value, Missing.Value, Missing.Value);  
    526.         if (objExcel.Workbooks != null) objExcel.Workbooks.Close();  
    527.         if (objExcel != null) objExcel.Quit();  
    528.   
    529.         objsheet = null;  
    530.         objWorkbook = null;  
    531.         objExcel = null;  
    532.     }  
    533.     MessageBox.Show(fileNameString + "/n/n导出完毕! ", "提示 ", MessageBoxButtons.OK, MessageBoxIcon.Information);  
    534.   
    535. }  
    536.  
    537. #endregion  
  • 相关阅读:
    java数组
    java 常用类
    java 集合(一)
    mysql相关操作(一)
    记录java BigDecimal
    hxg-yw
    一个困惑我好久的问题
    关于重载和重写的一些小知识
    几个常用的HTTP状态码
    死锁产生的原因和条件简述
  • 原文地址:https://www.cnblogs.com/host-2008/p/3914095.html
Copyright © 2020-2023  润新知