打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
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 /// 常用方法,列之间加\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 finally105 {106 sw.Close();107 myStream.Close();108 }109 }110 } 111 #endregion112 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 try180 {181 file.Delete();182 }183 catch (Exception error)184 {185 MessageBox.Show(error.Message, "删除失败 ", MessageBoxButtons.OK, MessageBoxIcon.Warning);186 return;187 }188 }189 #endregion190 Excel.Application objExcel = null;191 Excel.Workbook objWorkbook = null;192 Excel.Worksheet objsheet = null;193 try194 {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 try229 {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 finally254 {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

 

 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-200320             {21                 FormatNum = -4143;22                 //文件后缀列表 23                 saveFileDialog.Filter = "Excel(*.xls)|*.xls";24             }25             else//you use excel 2007 or later26             {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                     else67                     {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还是xlsx75             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

 

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
C# 将数据导出到Excel汇总
DataGridView直接导出EXCEL
DataGridView中的数据导入Excel .
VB.net中DataGrid导出为Excel文件函数
C# excel文件导入导出
Aspose.Cells使用总结大全
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服