请教一个C#导出EXCEL问题 在C#WinForm程序中,首先加载EXCEL模板,然后利用程序筛选出数据,写入到EXCEL中;请问有相关的例子或举例说明下吗? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 自定义一个将DataGridView控件中数据导出到Excel函数 /// <summary> /// 将DataGridView控件中数据导出到Excel /// </summary> /// <param name="gridView">DataGridView对象</param> /// <param name="isShowExcle">是否显示Excel界面</param> /// <returns></returns> public bool ExportDataGridview(DataGridView gridView,bool isShowExcle) { if (gridView.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 < gridView.ColumnCount; i++) { excel.Cells[1, i + 1] = gridView.Columns[i].HeaderText; } //填充数据 for (int i = 0; i < gridView.RowCount-1; i++) { for (int j = 0; j < gridView.ColumnCount; j++) { if (gridView[j, i].ValueType == typeof(string)) { excel.Cells[i + 2, j + 1] = "'" + gridView[j, i].Value.ToString(); } else { excel.Cells[i + 2, j + 1] = gridView[j, i].Value.ToString(); } } } return true; } dataset 过滤数据打开excel赋值http://topic.csdn.net/u/20081205/09/34b7b148-8dae-45b7-890e-9a079240be37.html public void CreateExcel(DataTable dt, string FileName) { HttpResponse resp; resp = Page.Response; resp.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312"); resp.AppendHeader("Content-Disposition", "attachment;filename=" + FileName); string colHeaders = "", ls_item = ""; int i = 0; //定义表对象和行对像,同时用DataSet对其值进行初始化 DataRow[] myRow = dt.Select(""); //取得数据表各列标题,各标题之间以\t分割,最后一个列标题后加回车符 for (i =0; i < dt.Columns.Count; i++) { switch (i) { case 0: colHeaders += "编号" + "\t"; break; case 1: colHeaders += "属地" + "\t"; break; case 2: colHeaders += "团队名称" + "\t"; break; case 3: colHeaders += "客户经理" + "\t"; break; case 4: colHeaders += "小区名称" + "\t"; break; case 5: colHeaders += "物管名称/街办" + "\t"; break; case 6: colHeaders += "管理形式" + "\t"; break; case 7: colHeaders += "楼房栋数" + "\t"; break; case 8: colHeaders += "楼房套数" + "\t"; break; case 9: colHeaders += "实际入住数" + "\t"; break; case 10: colHeaders += "电信网点" + "\t"; break; case 11: colHeaders += "移动网点" + "\t"; break; case 12: colHeaders += "联通网点" + "\t"; break; case 13: colHeaders += "铁通网点" + "\t"; break; case 14: colHeaders += "长宽网点" + "\t"; break; case 15: colHeaders += "其他网点" + "\t"; break; case 16: colHeaders += "电信进线情况" + "\t"; break; case 17: colHeaders += "我品信息(手机)" + "\t"; break; case 18: colHeaders += "我品信息(宽带)" + "\t"; break; case 19: colHeaders += "我品信息(固话)" + "\t"; break; case 20: colHeaders += "竞品信息(手机)" + "\t"; break; case 21: colHeaders += "竞品信息(宽带)" + "\t"; break; case 22: colHeaders += "竞品信息(固话)" + "\n"; break; } } //向HTTP输出流中写入取得的数据信息 resp.Write(colHeaders); //逐行处理数据 foreach (DataRow row in myRow) { //在当前行中,逐列获得数据,数据之间以\t分割,结束时加回车符\n for (i = 0; i < dt.Columns.Count; i++) { if (i == dt.Columns.Count - 1) { ls_item += row[i].ToString() + "\n"; } else { ls_item += row[i].ToString() + "\t"; } } //当前行数据写入HTTP输出流,并且置空ls_item以便下行数据 resp.Write(ls_item); ls_item = ""; } //写缓冲区中的数据到HTTP头文档中 resp.End(); }这是我之前写的一个 你可以参考一下 可以将Excel 嵌入进来!http://www.cnblogs.com/jinglelin/archive/2007/07/31/837722.html http://www.cnblogs.com/zhangqifeng/archive/2009/06/10/1500537.html可以看一下这网页 string[] aList = name.Split(new char[] { ',' }); string fileName = DateTime.Now.ToString("yyyyMMddHHmmss") + ".csv"; StringBuilder sb = new StringBuilder(); foreach (InternalStock stock in list) { for (int i = 0; i < aList.Length; i++) { if (aList[i] == "model") { sb.Append(stock.Model.Trim()); sb.Append(","); } else if (aList[i] == "Factory") { sb.Append(stock.Factory != null ? stock.Factory.Trim() : ""); sb.Append(","); } else if (aList[i] == "Package") { sb.Append(stock.Package != null ? stock.Package.Trim() : ""); sb.Append(","); } else if (aList[i] == "Lotnum") { sb.Append(stock.Lotnum != null ? stock.Lotnum.Trim() : ""); sb.Append(","); } } sb.Append("\n"); } string temp = string.Format("attachment;filename={0}", fileName); Response.Charset = "GB2312"; Response.HeaderEncoding = System.Text.Encoding.GetEncoding("GB2312"); Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312"); Response.ClearHeaders(); Response.AppendHeader("Content-disposition", temp); Response.Write(sb); Response.End(); private void toolStripButton3_Click(object sender, EventArgs e) { if (dataGridView1.RowCount > 1) { SaveFileDialog saveFileDialog = new SaveFileDialog(); //Windows 窗体 SaveFileDialog 组件是一个预先配置的对话框。它与 Windows 使用的标准“保存文件”对话框相同 saveFileDialog.Filter = "Execl files (*.xls)|*.xls"; //获取或设置筛选器字符串,该字符串确定在 SaveFileDialog 中显示的文件类型 saveFileDialog.FilterIndex = 0; //索引 saveFileDialog.RestoreDirectory = true;//获取或设置一个值,该值使文件对话框将其当前目录还原为用户更改目录以搜索文件之前的初始值 saveFileDialog.CreatePrompt = true;//获取或设置一个值,该值指示如果用户指定一个不存在的文件,SaveFileDialog 是否提示用户以允许创建文件 saveFileDialog.Title = "Export Excel File To"; //获取或设置在文件对话框的标题栏中显示的文本 //saveFileDialog.ShowDialog();// 显示预置对话框 Stream myStream;//提供字节序列的一般视图,命名空间: System.IO if (DialogResult.OK == saveFileDialog.ShowDialog()) { //表示用户正确指定了文件, //你的代码 myStream = saveFileDialog.OpenFile();//为用户使用 SaveFileDialog 选定的文件名创建读/写文件流 StreamWriter sw = new StreamWriter(myStream, System.Text.Encoding.GetEncoding(0));//用指定的编码及默认缓冲区大小,为指定的流初始化 StreamWriter 类的新实例 string str = ""; try { //写标题 for (int i = 0; i < dataGridView1.ColumnCount; i++) { if (i > 0) { str = str + "\t"; } str = str + dataGridView1.Columns[i].HeaderText; } sw.WriteLine(str); //写内容 for (int j = 0; j < dataGridView1.Rows.Count; j++) { string tempStr = ""; for (int k = 0; k < dataGridView1.Columns.Count; k++) { if (k > 0) { tempStr += "\t"; // 间隔字符 } if (dataGridView1.Rows[j].Cells[k].Value == null) { tempStr += ""; } else { tempStr += dataGridView1.Rows[j].Cells[k].Value.ToString().Trim(); } } sw.WriteLine(tempStr); } sw.Close(); myStream.Close(); MessageBox.Show("导入完成!"); } catch (Exception E) { MessageBox.Show(E.ToString()); } finally { sw.Dispose(); sw.Close(); myStream.Dispose(); myStream.Close(); } } } else { MessageBox.Show("没有数据可以导出!", "提示"); } } 关闭了设计窗口之后只剩下代码了,怎么打开设计窗口 在C#的winform中怎么直接在DataGridView里面修改,添加数据.(添加,修改到数据库里) 代码设置IP地址 为什么会死机?此程序有BUG?? 2个常用的小问题,帮助解决,谢谢! 求C#中把十进制转换为八进制的代码 请大家给介绍几本好的关于C#开发C/S的书 关于线程和 Invoke() 方法 如何判断一个字符串当中是否包含某一个字符? 如何在C#中使用win32 C++库中API函数?? 求DATAGRIDVIEW列标题宽度解决方法 C#扩充代码段包
/// <summary>
/// 将DataGridView控件中数据导出到Excel
/// </summary>
/// <param name="gridView">DataGridView对象</param>
/// <param name="isShowExcle">是否显示Excel界面</param>
/// <returns></returns>
public bool ExportDataGridview(DataGridView gridView,bool isShowExcle)
{
if (gridView.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 < gridView.ColumnCount; i++)
{
excel.Cells[1, i + 1] = gridView.Columns[i].HeaderText;
}
//填充数据
for (int i = 0; i < gridView.RowCount-1; i++)
{
for (int j = 0; j < gridView.ColumnCount; j++)
{
if (gridView[j, i].ValueType == typeof(string))
{
excel.Cells[i + 2, j + 1] = "'" + gridView[j, i].Value.ToString();
}
else
{
excel.Cells[i + 2, j + 1] = gridView[j, i].Value.ToString();
}
}
}
return true;
}
打开excel赋值http://topic.csdn.net/u/20081205/09/34b7b148-8dae-45b7-890e-9a079240be37.html
{
HttpResponse resp;
resp = Page.Response;
resp.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
resp.AppendHeader("Content-Disposition", "attachment;filename=" + FileName);
string colHeaders = "", ls_item = "";
int i = 0;
//定义表对象和行对像,同时用DataSet对其值进行初始化
DataRow[] myRow = dt.Select("");
//取得数据表各列标题,各标题之间以\t分割,最后一个列标题后加回车符
for (i =0; i < dt.Columns.Count; i++)
{
switch (i)
{
case 0: colHeaders += "编号" + "\t"; break;
case 1: colHeaders += "属地" + "\t"; break;
case 2: colHeaders += "团队名称" + "\t"; break;
case 3: colHeaders += "客户经理" + "\t"; break;
case 4: colHeaders += "小区名称" + "\t"; break;
case 5: colHeaders += "物管名称/街办" + "\t"; break;
case 6: colHeaders += "管理形式" + "\t"; break;
case 7: colHeaders += "楼房栋数" + "\t"; break;
case 8: colHeaders += "楼房套数" + "\t"; break;
case 9: colHeaders += "实际入住数" + "\t"; break;
case 10: colHeaders += "电信网点" + "\t"; break;
case 11: colHeaders += "移动网点" + "\t"; break;
case 12: colHeaders += "联通网点" + "\t"; break;
case 13: colHeaders += "铁通网点" + "\t"; break;
case 14: colHeaders += "长宽网点" + "\t"; break;
case 15: colHeaders += "其他网点" + "\t"; break;
case 16: colHeaders += "电信进线情况" + "\t"; break;
case 17: colHeaders += "我品信息(手机)" + "\t"; break;
case 18: colHeaders += "我品信息(宽带)" + "\t"; break;
case 19: colHeaders += "我品信息(固话)" + "\t"; break;
case 20: colHeaders += "竞品信息(手机)" + "\t"; break;
case 21: colHeaders += "竞品信息(宽带)" + "\t"; break;
case 22: colHeaders += "竞品信息(固话)" + "\n"; break;
}
}
//向HTTP输出流中写入取得的数据信息
resp.Write(colHeaders);
//逐行处理数据
foreach (DataRow row in myRow)
{
//在当前行中,逐列获得数据,数据之间以\t分割,结束时加回车符\n
for (i = 0; i < dt.Columns.Count; i++)
{ if (i == dt.Columns.Count - 1)
{
ls_item += row[i].ToString() + "\n";
}
else
{
ls_item += row[i].ToString() + "\t";
}
}
//当前行数据写入HTTP输出流,并且置空ls_item以便下行数据
resp.Write(ls_item);
ls_item = "";
}
//写缓冲区中的数据到HTTP头文档中
resp.End();
}
这是我之前写的一个 你可以参考一下
http://www.cnblogs.com/jinglelin/archive/2007/07/31/837722.html
可以看一下这网页
string fileName = DateTime.Now.ToString("yyyyMMddHHmmss") + ".csv";
StringBuilder sb = new StringBuilder();
foreach (InternalStock stock in list)
{
for (int i = 0; i < aList.Length; i++)
{
if (aList[i] == "model")
{
sb.Append(stock.Model.Trim());
sb.Append(",");
}
else if (aList[i] == "Factory")
{
sb.Append(stock.Factory != null ? stock.Factory.Trim() : "");
sb.Append(",");
}
else if (aList[i] == "Package")
{
sb.Append(stock.Package != null ? stock.Package.Trim() : "");
sb.Append(",");
}
else if (aList[i] == "Lotnum")
{
sb.Append(stock.Lotnum != null ? stock.Lotnum.Trim() : "");
sb.Append(",");
}
}
sb.Append("\n");
} string temp = string.Format("attachment;filename={0}", fileName);
Response.Charset = "GB2312";
Response.HeaderEncoding = System.Text.Encoding.GetEncoding("GB2312");
Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
Response.ClearHeaders();
Response.AppendHeader("Content-disposition", temp);
Response.Write(sb);
Response.End();
{
if (dataGridView1.RowCount > 1)
{
SaveFileDialog saveFileDialog = new SaveFileDialog(); //Windows 窗体 SaveFileDialog 组件是一个预先配置的对话框。它与 Windows 使用的标准“保存文件”对话框相同 saveFileDialog.Filter = "Execl files (*.xls)|*.xls"; //获取或设置筛选器字符串,该字符串确定在 SaveFileDialog 中显示的文件类型 saveFileDialog.FilterIndex = 0; //索引 saveFileDialog.RestoreDirectory = true;//获取或设置一个值,该值使文件对话框将其当前目录还原为用户更改目录以搜索文件之前的初始值 saveFileDialog.CreatePrompt = true;//获取或设置一个值,该值指示如果用户指定一个不存在的文件,SaveFileDialog 是否提示用户以允许创建文件 saveFileDialog.Title = "Export Excel File To"; //获取或设置在文件对话框的标题栏中显示的文本
//saveFileDialog.ShowDialog();// 显示预置对话框
Stream myStream;//提供字节序列的一般视图,命名空间: System.IO
if (DialogResult.OK == saveFileDialog.ShowDialog())
{
//表示用户正确指定了文件,
//你的代码 myStream = saveFileDialog.OpenFile();//为用户使用 SaveFileDialog 选定的文件名创建读/写文件流 StreamWriter sw = new StreamWriter(myStream, System.Text.Encoding.GetEncoding(0));//用指定的编码及默认缓冲区大小,为指定的流初始化 StreamWriter 类的新实例 string str = ""; try
{ //写标题 for (int i = 0; i < dataGridView1.ColumnCount; i++)
{ if (i > 0)
{ str = str + "\t"; } str = str + dataGridView1.Columns[i].HeaderText; }
sw.WriteLine(str); //写内容 for (int j = 0; j < dataGridView1.Rows.Count; j++)
{ string tempStr = ""; for (int k = 0; k < dataGridView1.Columns.Count; k++)
{ if (k > 0)
{ tempStr += "\t"; // 间隔字符 }
if (dataGridView1.Rows[j].Cells[k].Value == null)
{
tempStr += "";
}
else
{ tempStr += dataGridView1.Rows[j].Cells[k].Value.ToString().Trim();
}
} sw.WriteLine(tempStr); } sw.Close(); myStream.Close(); MessageBox.Show("导入完成!"); } catch (Exception E)
{
MessageBox.Show(E.ToString());
}
finally
{
sw.Dispose();
sw.Close();
myStream.Dispose();
myStream.Close();
}
}
}
else
{
MessageBox.Show("没有数据可以导出!", "提示");
}
}