急啊,怎么样把WINFORM中的datagridview导出成Excel文件. 急啊,怎么样把WINFORM中的datagridview导出成Excel文件.希望各位大侠给出能用的源码!谢谢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 datagridview导出成Excel文件并没有什么直接简易的方法要么就是调用Excel类库,逐行甚至逐格地写Excel文件;要么可以考虑使用一些第三方的表格控件,例如FarPoint Spread控件,他就直接提供了SaveExcel()方法 也可以从dgv的数据源入手 使用sql语句来操作excel例如: string strCmd = string.Empty; conn = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Excel 8.0;HDR=No';" + "Data Source= " + @"d:\test.xls"); cmd = new OleDbCommand(); cmd.Connection = conn; conn.Open(); strCmd = "create Table [Sheet1]("; foreach (DataColumn dc in ds.Tables[0].Columns) { strCmd += "[" + dc.ColumnName + "] nvarchar(20),"; } strCmd = strCmd.Trim().Substring(0, strCmd.Length - 1); strCmd += ")"; cmd.CommandText = strCmd; cmd.ExecuteNonQuery(); foreach (DataRow dr in ds.Tables[0].Rows) { if (dr.RowState != System.Data.DataRowState.Deleted) { strCmd = "insert into [Sheet1] values("; foreach (DataColumn dc in ds.Tables[0].Columns) { strCmd += "'" + dr[dc.ColumnName].ToString() + "',"; } strCmd = strCmd.Substring(0, strCmd.Length - 1); strCmd += ")"; cmd.CommandText = strCmd; cmd.ExecuteNonQuery(); } } conn.Close(); 把excel的com组件加入程序,加载命名空间,然后直接可以使用了 先添加引用Office,Excel Excel.Application excelApp=new Excel.ApplicationClass(); Excel.Workbook excelBook; Excel.Worksheet excelWorkSheet;//Excel中的sheet Excel.Range range;//单元格 excelBook=excelApp.Workbooks.Open(路径, "..... "); 用这种方式处理导出Excel public static void ExeclReport(DataGridView _Grid) { SaveFileDialog FileDialog = new SaveFileDialog(); FileDialog.Filter = "Excel (*.xls)|*.xls"; FileDialog.FilterIndex = 1; FileDialog.RestoreDirectory = true; if (FileDialog.ShowDialog() == DialogResult.OK) { XmlDocument doc = new XmlDocument(); doc.LoadXml("<?xml version='1.0'?><NewDataSet/>"); for (int i =0; i < _Grid.Rows.Count; i++) { XmlElement xel = doc.CreateElement("Sheet1"); string innerxml = null; for (int z = 0; z < _Grid.Columns.Count; z++) { if (_Grid.Columns[z].Width > 0) { string Caption = _Grid.Columns[z].HeaderText; System.Collections.IEnumerator myEnumerator = Caption.GetEnumerator(); while ((myEnumerator.MoveNext()) && (myEnumerator.Current != null)) { char _user = (char)myEnumerator.Current; if (char.IsPunctuation(_user)) { Caption=Caption.Replace(_user.ToString(), string.Empty); } if (char.IsSeparator(_user)) { Caption=Caption.Replace(_user.ToString(), string.Empty); } } innerxml += string.Format("<{0}>{1}</{0}>", Caption, _Grid[i,z].Value.ToString()); } } xel.InnerXml =innerxml; doc.DocumentElement.AppendChild((XmlNode)xel); } doc.Save(FileDialog.FileName); } } 有二种方法解决:一: 像楼上说的用第三方控件,或,自己建一个Execl.applicationClass() 然后freach datagrid 存入workSheet,再转存二: 把execel文件当数据库来使用, string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" +"Data Source="+ Path +";"+"Extended Properties=Excel 8.0;"; OleDbConnection conn = new OleDbConnection(strConn); conn.Open(); ...... 这时,你需要掉前建一个execel文件,这很容易解决的 完整代码,我就不写了,网上多的是,baidu一下,再google一下,就一大把了 C#有谁能帮忙解释下面月份? 关于vs的部署与安装策略。 【新手求助】C/S模式,以及传输加密 C#操作word高难问题 [提问] 问题没有搞定,继续问!!谢谢。 引用了第三方类库DLL,有它的源码,如何将它的源码加入到调试路径中 应用页面参数,异常 求助!!!关于C# timer的使用!在程序中就是出不来自己画的图 使用vs2005添加数据源功能出现的问题,很急,谢谢大家 sos 我想在工作组中的另一台机器上创建Asp.net Web应用失败 如果输出GB2312码? 【急】关于Common language runtime debugging services(公共语言运行库调试服务)
conn = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Excel 8.0;HDR=No';" + "Data Source= " + @"d:\test.xls");
cmd = new OleDbCommand();
cmd.Connection = conn;
conn.Open();
strCmd = "create Table [Sheet1](";
foreach (DataColumn dc in ds.Tables[0].Columns)
{
strCmd += "[" + dc.ColumnName + "] nvarchar(20),";
}
strCmd = strCmd.Trim().Substring(0, strCmd.Length - 1);
strCmd += ")";
cmd.CommandText = strCmd; cmd.ExecuteNonQuery(); foreach (DataRow dr in ds.Tables[0].Rows)
{
if (dr.RowState != System.Data.DataRowState.Deleted)
{
strCmd = "insert into [Sheet1] values(";
foreach (DataColumn dc in ds.Tables[0].Columns)
{
strCmd += "'" + dr[dc.ColumnName].ToString() + "',";
} strCmd = strCmd.Substring(0, strCmd.Length - 1);
strCmd += ")"; cmd.CommandText = strCmd; cmd.ExecuteNonQuery();
}
}
conn.Close();
Excel.Workbook excelBook;
Excel.Worksheet excelWorkSheet;//Excel中的sheet
Excel.Range range;//单元格
excelBook=excelApp.Workbooks.Open(路径, "..... ");
{
SaveFileDialog FileDialog = new SaveFileDialog();
FileDialog.Filter = "Excel (*.xls)|*.xls";
FileDialog.FilterIndex = 1;
FileDialog.RestoreDirectory = true;
if (FileDialog.ShowDialog() == DialogResult.OK)
{
XmlDocument doc = new XmlDocument();
doc.LoadXml("<?xml version='1.0'?><NewDataSet/>");
for (int i =0; i < _Grid.Rows.Count; i++)
{
XmlElement xel = doc.CreateElement("Sheet1");
string innerxml = null;
for (int z = 0; z < _Grid.Columns.Count; z++)
{
if (_Grid.Columns[z].Width > 0)
{
string Caption = _Grid.Columns[z].HeaderText;
System.Collections.IEnumerator myEnumerator = Caption.GetEnumerator();
while ((myEnumerator.MoveNext()) && (myEnumerator.Current != null))
{
char _user = (char)myEnumerator.Current;
if (char.IsPunctuation(_user))
{
Caption=Caption.Replace(_user.ToString(), string.Empty);
}
if (char.IsSeparator(_user))
{
Caption=Caption.Replace(_user.ToString(), string.Empty);
}
}
innerxml += string.Format("<{0}>{1}</{0}>", Caption, _Grid[i,z].Value.ToString());
}
}
xel.InnerXml =innerxml;
doc.DocumentElement.AppendChild((XmlNode)xel);
}
doc.Save(FileDialog.FileName);
}
}
一:
像楼上说的用第三方控件,或,自己建一个Execl.applicationClass() 然后freach datagrid
存入workSheet,再转存
二:
把execel文件当数据库来使用,
string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" +"Data Source="+ Path +";"+"Extended Properties=Excel 8.0;";
OleDbConnection conn = new OleDbConnection(strConn);
conn.Open();
......
这时,你需要掉前建一个execel文件,这很容易解决的 完整代码,我就不写了,网上多的是,baidu一下,再google一下,就一大把了