您的位置:首页 -> 软件教程 -> 应用软件 -> 杂类工具
软件教程分类查找
办公软件 图形图像 视频播放 格式转换 手机辅助 系统工具 电脑学习 下载工具 浏览器 QQ 专区 聊天 输入法 安全杀毒
第一部分 新手入门
第一章 软件介绍
第二章 新建保存文档
第三章 撤销与恢复
第二部分 数据输入
第三部分 表格制作
第四部分 数据管理
第五部分 图表插入
第六部分 公式与函数
第七部分 保护打印
精品软件课程
更多>>

C#实现将DataTable内容输出到Excel表格的方法

6.0
出处:2345软件大全 时间:2017-08-24 人气:107

核心提示:这篇文章主要介绍了C#实现将DataTable内容输出到Excel表格的方法,较为详细的分析了C#基于DataTable保存Excel数据的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下

  本文实例讲述了C#实现将DataTable内容输出到Excel表格的方法。分享给大家供大家参考。具体如下:

  1.关于本文

  本文描述了一个函数(SaveToExcel),该函数可以将DataTable数据内的数据输出到Excel表格中

C#实现将DataTable内容输出到Excel表格的方法

  2.相关说明

  1)本文中使用这个函数将一个DataTable中的内容输出到路径名为addr的目录下:

  复制代码代码如下:public void SaveToExcel(string addr, System.Data.DataTable dt)

  2)这个函数需要引用Microsoft.Office.Interop.Excel命名空间

  需要添加引用:Microsoft Excel 14.0 Object Library

C#实现将DataTable内容输出到Excel表格的方法

  并在程序的最上方添加:

  复制代码代码如下:using Excel = Microsoft.Office.Interop.Excel;

  3)文程序在窗体的保存按钮(btnSave)单击事件中调用了函数SaveToExcel:

?

1
2
3
4
5
//按钮:将数据保存到Excel表格中
private void btnSave_Click(object sender, EventArgs e)
{
  SaveToExcel(txtAddress.Text, (DataTable)dgvTable4Output.DataSource);
}

  3.程序界面

C#实现将DataTable内容输出到Excel表格的方法

  4.程序代码

  Load函数部分:设置数据源

?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
private void FormMain_Load(object sender, EventArgs e)
{
  System.Data.DataTable dt;
  string s1 = "甲乙丙丁戊己庚辛壬癸";
  string s2 = "子丑寅卯辰巳午未申酉戌亥";
  dt = new System.Data.DataTable("天干地支表");
  //行表格
  dt.Columns.Add("列0"); dt.Columns.Add("列1");
  dt.Columns.Add("列2"); dt.Columns.Add("列3");
  dt.Columns.Add("列4"); dt.Columns.Add("列5");
  dt.Columns.Add("列6"); dt.Columns.Add("列7");
  dt.Columns.Add("列8"); dt.Columns.Add("列9");
  dt.Rows.Add("", "", "", "", "", "", "", "", "", "");
  dt.Rows.Add("", "", "", "", "", "", "", "", "", "");
  dt.Rows.Add("", "", "", "", "", "", "", "", "", "");
  dt.Rows.Add("", "", "", "", "", "", "", "", "", "");
  dt.Rows.Add("", "", "", "", "", "", "", "", "", "");
  dt.Rows.Add("", "", "", "", "", "", "", "", "", "");
  //生成干支表
  int x = 0, y = 0;
  for (int i = 0; i < 6; i++)
  {
    for (int j = 0; j < 10; j++)
    {
      dt.Rows[i][j] = s1[x].ToString() + s2[y].ToString();
      x++; x = (x < s1.Length ? x : 0);
      y++; y = (y < s2.Length ? y : 0);
    }
  }
  dgvTable4Output.DataSource = dt;
}

  btnSave单击事件部分:调用函数,将数据源存储到Excel表格中

?

1
2
3
4
5
//按钮:将数据保存到Excel表格中
private void btnSave_Click(object sender, EventArgs e)
{
  SaveToExcel(txtAddress.Text, (DataTable)dgvTable4Output.DataSource);
}

  函数SaveToExcel部分:

?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
/// <summary>
/// 将数据表保存到Excel表格中
/// </summary>
/// <param name="addr">Excel表格存放地址(程序运行目录后面的部分)</param>
/// <param name="dt">要输出的DataTable</param>
public void SaveToExcel(string addr, System.Data.DataTable dt)
{
  //0.注意:
  // * Excel中形如Cells[x][y]的写法,前面的数字是列,后面的数字是行!
  // * Excel中的行、列都是从1开始的,而不是0
  //1.制作一个新的Excel文档实例
  Excel::Application xlsApp = new Excel::Application();
  xlsApp.Workbooks.Add(true);
  /* 示例输入:需要注意Excel里数组以1为起始(而不是0)
    * for (int i = 1; i < 10; i++)
    * {
    *   for (int j = 1; j < 10; j++)
    *   {
    *     xlsApp.Cells[i][j] = "-";
    *   }
    * }
    */
  //2.设置Excel分页卡标题
  xlsApp.ActiveSheet.Name = dt.TableName;
  //3.合并第一行的单元格
  string temp = "";
  if (dt.Columns.Count < 26)
  {
    temp = ((char)('A' + dt.Columns.Count)).ToString();
  }
  else if (dt.Columns.Count <= 26 + 26 * 26)
  {
    temp = ((char)('A' + (dt.Columns.Count - 26) / 26)).ToString()
      + ((char)('A' + (dt.Columns.Count - 26) % 26)).ToString();
  }
  else throw new Exception("列数过多");
  Excel::Range range = xlsApp.get_Range("A1", temp + "1");
  range.ClearContents(); //清空要合并的区域
  range.MergeCells = true; //合并单元格
  //4.填写第一行:表名,对应DataTable的TableName
  xlsApp.Cells[1][1] = dt.TableName;
  xlsApp.Cells[1][1].Font.Name = "黑体";
  xlsApp.Cells[1][1].Font.Size = 25;
  xlsApp.Cells[1][1].Font.Bold = true;
  xlsApp.Cells[1][1].HorizontalAlignment = Excel.XlVAlign.xlVAlignCenter;//居中
  xlsApp.Rows[1].RowHeight = 60; //第一行行高为60(单位:磅)
  //5.合并第二行单元格,用于书写表格生成日期
  range = xlsApp.get_Range("A2", temp + "2");
  range.ClearContents(); //清空要合并的区域
  range.MergeCells = true; //合并单元格
  //6.填写第二行:生成时间
  xlsApp.Cells[1][2] = "报表生成于:" + DateTime.Now.ToString();
  xlsApp.Cells[1][2].Font.Name = "宋体";
  xlsApp.Cells[1][2].Font.Size = 15;
  //xlsApp.Cells[1][2].HorizontalAlignment = 4;//右对齐
  xlsApp.Cells[1][2].HorizontalAlignment = Excel.XlVAlign.xlVAlignCenter;//居中
  xlsApp.Rows[2].RowHeight = 30; //第一行行高为60(单位:磅)
  //7.填写各列的标题行
  xlsApp.Cells[1][3] = "序号";
  for (int i = 0; i < dt.Columns.Count; i++)
  {
    xlsApp.Cells[i + 2][3] = dt.Columns[i].ColumnName;
  }
  xlsApp.Rows[3].Font.Name = "宋体";
  xlsApp.Rows[3].Font.Size = 15;
  xlsApp.Rows[3].Font.Bold = true;
  xlsApp.Rows[3].HorizontalAlignment = Excel.XlVAlign.xlVAlignCenter;//居中
  //设置颜色
  range = xlsApp.get_Range("A3", temp + "3");
  range.Interior.ColorIndex = 33;
  //8.填写DataTable中的数据
  for (int i = 0; i < dt.Rows.Count; i++)
  {
    xlsApp.Cells[1][i + 4] = i.ToString();
    for (int j = 0; j < dt.Columns.Count; j++)
    {
      xlsApp.Cells[j + 2][i + 4] = dt.Rows[i][j];
    }
  }
  range = xlsApp.get_Range("A4", temp + (dt.Rows.Count + 3).ToString());
  range.Interior.ColorIndex = 37;
  range.HorizontalAlignment = Excel.XlVAlign.xlVAlignCenter;
  //9.描绘边框
  range = xlsApp.get_Range("A1", temp + (dt.Rows.Count + 3).ToString());
  range.Borders.LineStyle = 1;
  range.Borders.Weight = 3;
  //10.打开制作完毕的表格
  //xlsApp.Visible = true;
  //11.保存表格到根目录下指定名称的文件中
  xlsApp.ActiveWorkbook.SaveAs(Application.StartupPath + "/" + addr);
  xlsApp.Quit();
  xlsApp = null;
  GC.Collect();
}

  希望本文所述对大家的C#程序设计有所帮助。