C#如何实现datagridview写入excel

把图片上方的 DATAGRIDVIEW的数据 复制到下面的EXCEL中 对号入座,姓名,上午的打卡时间,下午的打卡时间 ?

谢谢 求代码

  导出数据为Excel文件在开发项目时比较常见的一种需求 。以前对于数据量较小的情况使用 Microsoft.Office.Interop.Excel.Workbooks相关类,编写起来也比较麻烦,对于数据量较大的情况,在此与大家共享使用SteamWriter类输出Excel文件的方法。经过具体测试,通过在程序中使用多线程配置该方法,导出300000行+17列的约130M的数据需要31秒左右。

  [csharp] view plaincopyprint?
  1. /// <summary>
  2. /// 导出文件,使用文件流。该方法使用的数据源为DataTable,导出的Excel文件没有具体的样式。
  3. /// </summary>
  4. /// <param name="dt"></param>
  5. public static string ExportToExcel(System.Data.DataTable dt, string path)
  6. {
  7. KillSpecialExcel();
  8. string result = string.Empty;
  9. try
  10. {
  11. // 实例化流对象,以特定的编码向流中写入字符。
  12. StreamWriter sw = new StreamWriter(path, false, Encoding.GetEncoding("gb2312"));
  13.
  14. StringBuilder sb = new StringBuilder();
  15. for (int k = 0; k < dt.Columns.Count; k++)
  16. {
  17. // 添加列名称
  18. sb.Append(dt.Columns[k].ColumnName.ToString() + "\t");
  19. }
  20. sb.Append(Environment.NewLine);
  21. // 添加行数据
  22. for (int i = 0; i < dt.Rows.Count; i++)
  23. {
  24. DataRow row = dt.Rows[i];
  25. for (int j = 0; j < dt.Columns.Count; j++)
  26. {
  27. // 根据列数追加行数据
  28. sb.Append(row[j].ToString() + "\t");
  29. }
  30. sb.Append(Environment.NewLine);
  31. }
  32. sw.Write(sb.ToString());
  33. sw.Flush();
  34. sw.Close();
  35. sw.Dispose();
  36.
  37. // 导出成功后打开
  38. //System.Diagnostics.Process.Start(path);
  39. }
  40. catch (Exception)
  41. {
  42. result = "请保存或关闭可能已打开的Excel文件";
  43. }
  44. finally
  45. {
  46. dt.Dispose();
  47. }
  48. return result;
  49.}
  50./// <summary>
  51./// 结束进程
  52./// </summary>
  53.private static void KillSpecialExcel()
  54.{
  55. foreach (System.Diagnostics.Process theProc in System.Diagnostics.Process.GetProcessesByName("EXCEL"))
  56. {
  57. if (!theProc.HasExited)
  58. {
  59. bool b = theProc.CloseMainWindow();
  60. if (b == false)
  61. {
  62. theProc.Kill();
  63. }
  64. theProc.Close();
  65. }
  66. }
  67.}
  

  B/S 导出:

  // 保存错误信息
  GridView gv = new GridView();
  gv.DataSource = dtError;
  gv.DataBind();
  gv.Attributes.Add("style", "vnd.ms-excel.numberformat:@");
  
  HttpResponse hResponse = this.Response;
  string fileName1 = "新员工格式验证错误统计" + DateTime.Now.ToString("yyyyMMdd");
  
  hResponse.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(fileName1, System.Text.Encoding.UTF8) + ".xls");
  hResponse.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312");
  hResponse.ContentType = "application/ms-excel";
  this.EnableViewState = false;
  
  StringWriter tw = new StringWriter();
  System.Web.UI.HtmlTextWriter hw = new System.Web.UI.HtmlTextWriter(tw);
  gv.RenderControl(hw);
  
  hResponse.Write(tw);
  hResponse.End();
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-01-03
加我扣 四零四7五零三八九
第2个回答  2014-01-10
using System;
using System.Reflection; // 引用这个才能使用Missing字段
using Excel=Microsoft.Office.Interop.Excel;

namespace CExcel1
{
class Class1
{
[STAThread]
static void Main(string[] args)
{
//创建Application对象
Excel.Application xApp=new Excel.ApplicationClass();

xApp.Visible=true;
//得到WorkBook对象, 可以用两种方式之一: 下面的是打开已有的文件
Excel.Workbook xBook=xApp.Workbooks._Open(@"D:\Sample.xls",
Missing.Value,Missing.Value,Missing.Value,Missing.Value
,Missing.Value,Missing.Value,Missing.Value,Missing.Value
,Missing.Value,Missing.Value,Missing.Value,Missing.Value);
//xBook=xApp.Workbooks.Add(Missing.Value);//新建文件的代码
//指定要操作的Sheet,两种方式:

Excel.Worksheet xSheet=(Excel.Worksheet)xBook.Sheets[1];
//Excel.Worksheet xSheet=(Excel.Worksheet)xApp.ActiveSheet;

//读取数据,通过Range对象
Excel.Range rng1=xSheet.get_Range("A1",Type.Missing);
Console.WriteLine(rng1.Value2);

//读取,通过Range对象,但使用不同的接口得到Range
Excel.Range rng2=(Excel.Range)xSheet.Cells[3,1];
Console.WriteLine(rng2.Value2);
//写入数据
Excel.Range rng3=xSheet.get_Range("C6",Missing.Value);
rng3.Value2="Hello";
rng3.Interior.ColorIndex=6; //设置Range的背景色

//保存方式一:保存WorkBook
xBook.SaveAs(@"D:\CData.xls",
Missing.Value,Missing.Value,Missing.Value,Missing.Value,Missing.Value,
Excel.XlSaveAsAccessMode.xlNoChange,Missing.Value,Missing.Value,Missing.Value,
Missing.Value,Missing.Value);

//保存方式二:保存WorkSheet
xSheet.SaveAs(@"D:\CData2.xls",
Missing.Value,Missing.Value,Missing.Value,Missing.Value,
Missing.Value,Missing.Value,Missing.Value,Missing.Value,Missing.Value);

//保存方式三
xBook.Save();

xSheet=null;
xBook=null;
xApp.Quit(); //这一句是非常重要的,否则Excel对象不能从内存中退出
xApp=null;
}
}
}
第3个回答  2014-01-03
相似回答