zoukankan      html  css  js  c++  java
  • C#

     //原文出处:http://www.yongfa365.com/Item/DataGridViewToExcel.html
    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 /// 常用方法,列之间加 ,一行一行输出,此文件其实是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 += " "; 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 += " "; 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 + " 导出完毕! ", "提示 ", MessageBoxButtons.OK, MessageBoxIcon.Information); 265 266 } 267 268 #endregion
     1         #region DataGridView导出到Excel解决打开时报后缀名不一致的问题
     2         /// <summary>
     3         /// DataGridView导出至Excel,解决问题:打开Excel文件格式与扩展名指定格式不一致
     4         /// </summary>
     5         /// <param name="dataGridView">数据源表格</param>
     6         /// <param name="isShowExcle">导出时是否显示excel界面</param>
     7         /// <returns></returns>
     8         public static bool DcExcel(DataGridView dataGridView, bool isShowExcle = true)
     9         {
    10             int FormatNum;//保存excel文件的格式
    11             Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();
    12             string excelVersion = excel.Version;//获取你使用的excel 的版本号 
    13 
    14             //声明保存对话框 
    15             SaveFileDialog saveFileDialog = new SaveFileDialog();
    16             //默然文件后缀 
    17             saveFileDialog.DefaultExt = "xls";
    18 
    19             if (Convert.ToDouble(excelVersion) < 12)//You use Excel 97-2003
    20             {
    21                 FormatNum = -4143;
    22                 //文件后缀列表 
    23                 saveFileDialog.Filter = "Excel(*.xls)|*.xls";
    24             }
    25             else//you use excel 2007 or later
    26             {
    27                 FormatNum = 56;
    28                 //文件后缀列表 
    29                 saveFileDialog.Filter = "Excel(*.xls)|*.xls|Excel(2007-2016)(*.xlsx)|*.xlsx";
    30             }
    31             Form fr = dataGridView.Parent as Form;
    32             if (fr != null)//默认文件名
    33             {
    34                 saveFileDialog.FileName = fr.Text;
    35             }
    36             //默然路径是系统当前路径 
    37             saveFileDialog.InitialDirectory = Directory.GetCurrentDirectory();
    38             //打开保存对话框 
    39             if (saveFileDialog.ShowDialog() == DialogResult.Cancel)
    40                 return false;
    41             //返回文件路径 
    42             string fileName = saveFileDialog.FileName;
    43             if (string.IsNullOrEmpty(fileName.Trim()))
    44             { return false; }
    45             if (dataGridView.Rows.Count == 0)
    46                 return false;
    47             //建立Excel对象      
    48 
    49             var objWorkbook = excel.Application.Workbooks.Add(true);
    50             excel.Visible = isShowExcle;
    51             //生成字段名称      
    52             for (int i = 0; i < dataGridView.ColumnCount; i++)
    53             {
    54                 excel.Cells[1, i + 1] = dataGridView.Columns[i].HeaderText;
    55                 excel.Cells[1, i + 1].Font.Bold = true;
    56             }
    57             //填充数据      
    58             for (int i = 0; i < dataGridView.RowCount - 1; i++)
    59             {
    60                 for (int j = 0; j < dataGridView.ColumnCount; j++)
    61                 {
    62                     if (dataGridView[j, i].ValueType == typeof(string))
    63                     {
    64                         excel.Cells[i + 2, j + 1] = "'" + dataGridView[j, i].Value.ToString();
    65                     }
    66                     else
    67                     {
    68                         excel.Cells[i + 2, j + 1] = dataGridView[j, i].Value.ToString();
    69                     }
    70                 }
    71             }
    72             //Excel.XlFileFormat.xlOpenXMLWorkbook(.xlsx)
    73             //Excel.XlFileFormat.xlExcel8(Excel97 - 2003, .xls)
    74             //判断excel文件的保存格式是xls还是xlsx
    75             var format = fileName.EndsWith(".xls") ? Microsoft.Office.Interop.Excel.XlFileFormat.xlExcel8 : Microsoft.Office.Interop.Excel.XlFileFormat.xlOpenXMLWorkbook;
    76             objWorkbook.SaveAs(fileName, format, Missing.Value, Missing.Value, Missing.Value,
    77                 Missing.Value, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlShared, Missing.Value, Missing.Value, Missing.Value,
    78                 Missing.Value, Missing.Value);
    79             return true;
    80         }
    81         #endregion
  • 相关阅读:
    PTP 接线方式及通讯距离
    串口通信基本概念
    Modbus RTU 通信应用案例
    Modbus 指令
    Modbus RTU新版本指令介绍
    Integer自动装箱和拆箱
    重写hashCode方法,导致内存泄漏
    Dom4j入门
    Java设计模式(9)——观察者模式
    IntelliJ IDEA版本控制——过滤提交文件
  • 原文地址:https://www.cnblogs.com/jeremywucnblog/p/11995286.html
Copyright © 2011-2022 走看看