C# DataGridView 导出 Excel(根据Excel版本显示选择不同后缀格式xls或xlsx)

本文介绍了一种将DataGridView中的数据导出到Excel的方法,并解决了在打开文件时出现的格式不一致的问题。支持Excel 97-2003(.xls)及Excel 2007以上版本(.xlsx)。
  
/// <summary> /// DataGridView导出至Excel,解决问题:打开Excel文件格式与扩展名指定格式不一致 /// </summary> /// <param name="dataGridView">数据源表格</param> /// <param name="isShowExcle">导出时是否显示excel界面</param> /// <returns></returns> public static bool DcExcel(DataGridView dataGridView, bool isShowExcle = true) { int FormatNum;//保存excel文件的格式 Excel.Application excel = new Excel.Application(); string excelVersion = excel.Version;//获取你使用的excel 的版本号 //声明保存对话框 SaveFileDialog saveFileDialog = new SaveFileDialog(); //默然文件后缀 saveFileDialog.DefaultExt = "xls"; if (Convert.ToDouble(excelVersion) < 12)//You use Excel 97-2003 { FormatNum = -4143; //文件后缀列表 saveFileDialog.Filter = "Excel(*.xls)|*.xls"; } else//you use excel 2007 or later { FormatNum = 56; //文件后缀列表 saveFileDialog.Filter = "Excel(*.xls)|*.xls|Excel(2007-2016)(*.xlsx)|*.xlsx"; } Form fr = dataGridView.Parent as Form; if (fr != null)//默认文件名 { saveFileDialog.FileName = fr.Text; } //默然路径是系统当前路径 saveFileDialog.InitialDirectory = Directory.GetCurrentDirectory(); //打开保存对话框 if (saveFileDialog.ShowDialog() == DialogResult.Cancel) return false; //返回文件路径 string fileName = saveFileDialog.FileName; if (string.IsNullOrEmpty(fileName.Trim())) { return false; } if (dataGridView.Rows.Count == 0) return false; //建立Excel对象 var objWorkbook = excel.Application.Workbooks.Add(true); excel.Visible = isShowExcle; //生成字段名称 for (int i = 0; i < dataGridView.ColumnCount; i++) { excel.Cells[1, i + 1] = dataGridView.Columns[i].HeaderText; excel.Cells[1, i + 1].Font.Bold = true; } //填充数据 for (int i = 0; i < dataGridView.RowCount - 1; i++) { for (int j = 0; j < dataGridView.ColumnCount; j++) { if (dataGridView[j, i].ValueType == typeof(string)) { excel.Cells[i + 2, j + 1] = "'" + dataGridView[j, i].Value.ToString(); } else { excel.Cells[i + 2, j + 1] = dataGridView[j, i].Value.ToString(); } } } //Excel.XlFileFormat.xlOpenXMLWorkbook(.xlsx) //Excel.XlFileFormat.xlExcel8(Excel97 - 2003, .xls)
       //判断excel文件的保存格式是xls还是xlsx
var format = fileName.EndsWith(".xls") ? Excel.XlFileFormat.xlExcel8 : Excel.XlFileFormat.xlOpenXMLWorkbook; objWorkbook.SaveAs(fileName, format, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Excel.XlSaveAsAccessMode.xlShared, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value); return true; }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值