学习笔记 DataGridView数据导出为Excel
DataGridView数据导出为Excel
怎样把WinForm下的“DGV”里的绑定数据库后的数据导出到Excel中。
比如:在窗体里有个一“DGV”,DataGridView1,绑定了数据源,怎样把它里面的数据导出到Excel中?
用流保存成xls文件. 这种方法比较好,不用引用Excel组件. 下面是具体例子,可以参考
using System.IO; /// <summary>
/// 另存新档按钮
/// </summary>
private void SaveAs() //另存新档按钮 导出成Excel
{
SaveFileDialog saveFileDialog = new SaveFileDialog();
saveFileDialog.Filter = "Execl files (*.xls)|*.xls";
saveFileDialog.FilterIndex = 0;
saveFileDialog.RestoreDirectory = true;
saveFileDialog.CreatePrompt = true;
saveFileDialog.Title = "Export Excel File To";
saveFileDialog.ShowDialog();
Stream myStream;
myStream = saveFileDialog.OpenFile();
//StreamWriter sw = new StreamWriter(myStream, System.Text.Encoding.GetEncoding("gb2312"));
StreamWriter sw = new StreamWriter(myStream, System.Text.Encoding.GetEncoding(-0));
string str = "";
try
{
//写标题
for (int i = 0; i < dgvAgeWeekSex.ColumnCount; i++)
{
if (i > 0)
{
str += "\t";
}
str += dgvAgeWeekSex.Columns[i].HeaderText;
}
sw.WriteLine(str);
//写内容
for (int j = 0; j < dgvAgeWeekSex.Rows.Count; j++)
{
string tempStr = "";
for (int k = 0; k < dgvAgeWeekSex.Columns.Count; k++)
{
if (k > 0)
{
tempStr += "\t";
}
tempStr += dgvAgeWeekSex.Rows[j].Cells[k].Value.ToString();
} sw.WriteLine(tempStr);
}
sw.Close();
myStream.Close();
}
catch (Exception e)
{
MessageBox.Show(e.ToString());
}
finally
{
sw.Close();
myStream.Close();
}
}
- #region DataGridView数据显示到Excel
- /// <summary>
- /// 打开Excel并将DataGridView控件中数据导出到Excel
- /// </summary>
- /// <param name="dgv">DataGridView对象 </param>
- /// <param name="isShowExcle">是否显示Excel界面 </param>
- /// <remarks>
- /// add com "Microsoft Excel 11.0 Object Library"
- /// using Excel=Microsoft.Office.Interop.Excel;
- /// </remarks>
- /// <returns> </returns>
- public bool DataGridviewShowToExcel(DataGridView dgv, bool isShowExcle)
- {
- if (dgv.Rows.Count == 0)
- return false;
- //建立Excel对象
- Excel.Application excel = new Excel.Application();
- excel.Application.Workbooks.Add(true);
- excel.Visible = isShowExcle;
- //生成字段名称
- for (int i = 0; i < dgv.ColumnCount; i++)
- {
- excel.Cells[1, i + 1] = dgv.Columns[i].HeaderText;
- }
- //填充数据
- for (int i = 0; i < dgv.RowCount - 1; i++)
- {
- for (int j = 0; j < dgv.ColumnCount; j++)
- {
- if (dgv[j, i].ValueType == typeof(string))
- {
- excel.Cells[i + 2, j + 1] = "'" + dgv[j, i].Value.ToString();
- }
- else
- {
- excel.Cells[i + 2, j + 1] = dgv[j, i].Value.ToString();
- }
- }
- }
- return true;
- }
- #endregion
- #region DateGridView导出到csv格式的Excel
- /// <summary>
- /// 常用方法,列之间加\t,一行一行输出,此文件其实是csv文件,不过默认可以当成Excel打开。
- /// </summary>
- /// <remarks>
- /// using System.IO;
- /// </remarks>
- /// <param name="dgv"></param>
- private void DataGridViewToExcel(DataGridView dgv)
- {
- SaveFileDialog dlg = new SaveFileDialog();
- dlg.Filter = "Execl files (*.xls)|*.xls";
- dlg.FilterIndex = 0;
- dlg.RestoreDirectory = true;
- dlg.CreatePrompt = true;
- dlg.Title = "保存为Excel文件";
- if (dlg.ShowDialog() == DialogResult.OK)
- {
- Stream myStream;
- myStream = dlg.OpenFile();
- StreamWriter sw = new StreamWriter(myStream, System.Text.Encoding.GetEncoding(-0));
- string columnTitle = "";
- try
- {
- //写入列标题
- for (int i = 0; i < dgv.ColumnCount; i++)
- {
- if (i > 0)
- {
- columnTitle += "\t";
- }
- columnTitle += dgv.Columns[i].HeaderText;
- }
- sw.WriteLine(columnTitle);
- //写入列内容
- for (int j = 0; j < dgv.Rows.Count; j++)
- {
- string columnValue = "";
- for (int k = 0; k < dgv.Columns.Count; k++)
- {
- if (k > 0)
- {
- columnValue += "\t";
- }
- if (dgv.Rows[j].Cells[k].Value == null)
- columnValue += "";
- else
- columnValue += dgv.Rows[j].Cells[k].Value.ToString().Trim();
- }
- sw.WriteLine(columnValue);
- }
- sw.Close();
- myStream.Close();
- }
- catch (Exception e)
- {
- MessageBox.Show(e.ToString());
- }
- finally
- {
- sw.Close();
- myStream.Close();
- }
- }
- }
- #endregion
- #region DataGridView导出到Excel,有一定的判断性
- /// <summary>
- ///方法,导出DataGridView中的数据到Excel文件
- /// </summary>
- /// <remarks>
- /// add com "Microsoft Excel 11.0 Object Library"
- /// using Excel=Microsoft.Office.Interop.Excel;
- /// using System.Reflection;
- /// </remarks>
- /// <param name= "dgv"> DataGridView </param>
- public static void DataGridViewToExcel(DataGridView dgv)
- {
- #region 验证可操作性
- //申明保存对话框
- SaveFileDialog dlg = new SaveFileDialog();
- //默然文件后缀
- dlg.DefaultExt = "xls ";
- //文件后缀列表
- dlg.Filter = "EXCEL文件(*.XLS)|*.xls ";
- //默然路径是系统当前路径
- dlg.InitialDirectory = Directory.GetCurrentDirectory();
- //打开保存对话框
- if (dlg.ShowDialog() == DialogResult.Cancel) return;
- //返回文件路径
- string fileNameString = dlg.FileName;
- //验证strFileName是否为空或值无效
- if (fileNameString.Trim() == " ")
- { return; }
- //定义表格内数据的行数和列数
- int rowscount = dgv.Rows.Count;
- int colscount = dgv.Columns.Count;
- //行数必须大于0
- if (rowscount <= 0)
- {
- MessageBox.Show("没有数据可供保存 ", "提示 ", MessageBoxButtons.OK, MessageBoxIcon.Information);
- return;
- }
- //列数必须大于0
- if (colscount <= 0)
- {
- MessageBox.Show("没有数据可供保存 ", "提示 ", MessageBoxButtons.OK, MessageBoxIcon.Information);
- return;
- }
- //行数不可以大于65536
- if (rowscount > 65536)
- {
- MessageBox.Show("数据记录数太多(最多不能超过65536条),不能保存 ", "提示 ", MessageBoxButtons.OK, MessageBoxIcon.Information);
- return;
- }
- //列数不可以大于255
- if (colscount > 255)
- {
- MessageBox.Show("数据记录行数太多,不能保存 ", "提示 ", MessageBoxButtons.OK, MessageBoxIcon.Information);
- return;
- }
- //验证以fileNameString命名的文件是否存在,如果存在删除它
- FileInfo file = new FileInfo(fileNameString);
- if (file.Exists)
- {
- try
- {
- file.Delete();
- }
- catch (Exception error)
- {
- MessageBox.Show(error.Message, "删除失败 ", MessageBoxButtons.OK, MessageBoxIcon.Warning);
- return;
- }
- }
- #endregion
- Excel.Application objExcel = null;
- Excel.Workbook objWorkbook = null;
- Excel.Worksheet objsheet = null;
- try
- {
- //申明对象
- objExcel = new Microsoft.Office.Interop.Excel.Application();
- objWorkbook = objExcel.Workbooks.Add(Missing.Value);
- objsheet = (Excel.Worksheet)objWorkbook.ActiveSheet;
- //设置EXCEL不可见
- objExcel.Visible = false;
- //向Excel中写入表格的表头
- int displayColumnsCount = 1;
- for (int i = 0; i <= dgv.ColumnCount - 1; i++)
- {
- if (dgv.Columns[i].Visible == true)
- {
- objExcel.Cells[1, displayColumnsCount] = dgv.Columns[i].HeaderText.Trim();
- displayColumnsCount++;
- }
- }
- //设置进度条
- //tempProgressBar.Refresh();
- //tempProgressBar.Visible = true;
- //tempProgressBar.Minimum=1;
- //tempProgressBar.Maximum=dgv.RowCount;
- //tempProgressBar.Step=1;
- //向Excel中逐行逐列写入表格中的数据
- for (int row = 0; row <= dgv.RowCount - 1; row++)
- {
- //tempProgressBar.PerformStep();
- displayColumnsCount = 1;
- for (int col = 0; col < colscount; col++)
- {
- if (dgv.Columns[col].Visible == true)
- {
- try
- {
- objExcel.Cells[row + 2, displayColumnsCount] = dgv.Rows[row].Cells[col].Value.ToString().Trim();
- displayColumnsCount++;
- }
- catch (Exception)
- {
- }
- }
- }
- }
- //隐藏进度条
- //tempProgressBar.Visible = false;
- //保存文件
- objWorkbook.SaveAs(fileNameString, Missing.Value, Missing.Value, Missing.Value, Missing.Value,
- Missing.Value, Excel.XlSaveAsAccessMode.xlShared, Missing.Value, Missing.Value, Missing.Value,
- Missing.Value, Missing.Value);
- }
- catch (Exception error)
- {
- MessageBox.Show(error.Message, "警告 ", MessageBoxButtons.OK, MessageBoxIcon.Warning);
- return;
- }
- finally
- {
- //关闭Excel应用
- if (objWorkbook != null) objWorkbook.Close(Missing.Value, Missing.Value, Missing.Value);
- if (objExcel.Workbooks != null) objExcel.Workbooks.Close();
- if (objExcel != null) objExcel.Quit();
- objsheet = null;
- objWorkbook = null;
- objExcel = null;
- }
- MessageBox.Show(fileNameString + "\n\n导出完毕! ", "提示 ", MessageBoxButtons.OK, MessageBoxIcon.Information);
- }
- #endregion
学习笔记 DataGridView数据导出为Excel的更多相关文章
- vb.net-三种将datagridview数据导出为excel文件的函数
第一种方法较慢,但是数据格式都比较好,需要引用excel的 Microsoft.Office.Interop.Excel.dll office.dll #Region "导出excel函数 ...
- Asp.net网页中DataGridView数据导出到Excel
经过上网找资料,终于找到一种可以直接将GridView中数据导出到Excel文件的方法,归纳方法如下: 1. 注:其中的字符集格式若改为“GB2312”,导出的部分数据可能为乱码: 导出之前需要关闭分 ...
- datagridview数据导出到excel
/// <summary> /// 导出Excel /// </summary> /// <param name="mydgv">控件 Data ...
- 如何使用 Excel 对象将 DataGridView 数据导出到 Excel
转载出处:https://code.msdn.microsoft.com/How-to-insert-image-into-93964561 本项目阐述如何使用 Open XML SDK 将图像插入到 ...
- 吴裕雄--天生自然ORACLE数据库学习笔记:数据导出与导入
create directory dump_dir as 'd:\dump'; grant read,write on directory dump_dir to scott; --在cmd下 exp ...
- 将Datagridview中的数据导出至Excel中
首先添加一个模块ImportToExcel,并添加引用 然后导入命名空间: Imports Microsoft.Office.Interop Imports System.Da ...
- VSTO学习笔记(十四)Excel数据透视表与PowerPivot
原文:VSTO学习笔记(十四)Excel数据透视表与PowerPivot 近期公司内部在做一种通用查询报表,方便人力资源分析.统计数据.由于之前公司系统中有一个类似的查询使用Excel数据透视表完成的 ...
- 机房收费系统——在VB中将MSHFlexGrid控件中的数据导出到Excel
机房收费系统中,好多查询的窗体都包含同一个功能:将数据库中查询到的数据显示在MSHFlexGrid控件中,然后再把MSHFlexGrid控件中的数据导出到Excel表格中. 虽然之前做过学生信息管理系 ...
- VSTO 学习笔记(十一)开发Excel 2010 64位自定义公式
原文:VSTO 学习笔记(十一)开发Excel 2010 64位自定义公式 Excel包含很多公式,如数学.日期.文本.逻辑等公式,非常方便,可以灵活快捷的对数据进行处理,达到我们想要的效果.Exce ...
随机推荐
- Nginx配置SSI
一.什么是SSISSI:Server Side Include,是一种基于服务端的网页制作技术,大多数(尤其是基于Unix平台)的web服务器如Netscape Enterprise Server等均 ...
- 简明python教程 --C++程序员的视角(一):数值类型、字符串、运算符和控制流
最初的步骤 Python是大小写敏感的 任何在#符号右面的内容都是注释 >>> help('print')在“print”上使用引号,那样Python就可以理解我是希望获取关于“pr ...
- input内强制保留小数点后两位 位数不足时自动补0
input内强制保留小数点后两位 位数不足时自动补0 小数点后位数超出2位时进行四舍五入 需引入jquery包 1.11.2版本 1 function xiaoshu(x) 2 { 3 var f = ...
- 0-systemctl开机启动项
防火墙:iptables Apache服务名称:httpd MySQL服务名称:mysqld VSFTP服务名称:vsftpd <!--CentOS7新指令--> 使某服务 自动启动 sy ...
- Windows消息机制概述
消息是指什么? 消息系统对于一个win32程序来说十分重要,它是一个程序运行的动力源泉.一个消息,是系统定义的一个32位的值,他唯一的定义了一个事件,向 Windows发出一个通知,告诉应用程 ...
- 助手系列之python的FTP服务器
电脑的OS是Win7,Python版本是2.7.9,安装了pip 因为python没有内置可用的FTP SERVER,所以先选一个第三方的组件安装上,这里我选的是pyftpdlib pip insta ...
- ssh-keygen -t rsa P “” -f ~/.ssh/id_rsa不提示直接生成密钥
ssh-keygen -t rsa P "" -f ~/.ssh/id_rsa不提示直接生成密钥
- jQuery 选择器 (基础恶补之三)+Ajax
jQuery load() 方法 jQuery load() 方法是简单但强大的 AJAX 方法. load() 方法从服务器加载数据,并把返回的数据放入被选元素中. 语法: $(selector). ...
- (原创)关于SQL Server 2005 的自动远程数据库备份
由于项目需要,需要对目标服务器上的数据库每天进行备份并转移,查阅网上的一些帮助,结合自己的实际需要,写了这篇文章,希望对有同样需求的朋友有所帮助.目标服务器:192.168.1.197,备份服务器:1 ...
- 2016年12月20日 星期二 --出埃及记 Exodus 21:15
2016年12月20日 星期二 --出埃及记 Exodus 21:15 "Anyone who attacks his father or his mother must be put to ...