终于有时间可把下面的WinForm对EXCEL的操作方法与大家分享了。前面介绍了如何把获取SHEET名称和如何获取SHEET里面数据两种方法。其实这两种方法都是在为EXCEL数据导入数据库作准备,至数据怎么导入数据库将会在以后学习不断分享给大家。下面就介绍下如何把数据放SHEET中:

方法1:

View Code
 1         public void DataToExcel(DataTable dt)
2 {
3 try
4 {
5 if (dt == null) return;
6
7 Microsoft.Office.Interop.Excel.ApplicationClass myExcel = new Microsoft.Office.Interop.Excel.ApplicationClass();
8 Microsoft.Office.Interop.Excel.Workbook xBk; //工作薄
9 Microsoft.Office.Interop.Excel.Worksheet xSt; //工作Sheet
10
11 xBk = myExcel.Workbooks.Add(true);
12 xSt = (Microsoft.Office.Interop.Excel.Worksheet)xBk.ActiveSheet;
13
14 myExcel.Visible = true;
15
16 for (int i = 1; i <= dt.Columns.Count; ++i)
17 {
18 xSt.Cells[1, i] = dt.Columns[i - 1].ColumnName;
19 }
20
21 for (int i = 2; i <= dt.Rows.Count + 1; ++i)
22 {
23 for (int j = 1; j <= dt.Columns.Count; ++j)
24 {
25 xSt.Cells[i, j] = dt.Rows[i - 2][j - 1].ToString();
26 }
27 }
28
29 for (int i = 1; i <= dt.Columns.Count; ++i)
30 {
31 Microsoft.Office.Interop.Excel.Range selectRange = xSt.get_Range(xSt.Cells[1, i], xSt.Cells[dt.Rows.Count + 1, i]);
32 selectRange.Columns.AutoFit();
33 }
34 }
35 catch
36 {
37
38 }
39 }

方法2:

View Code
 1         public void dataToExcel(DataTable dt)
2 {
3
4 SaveFileDialog dlg = new SaveFileDialog();
5 dlg.Filter = "Execl files (*.xls)|*.xls";
6 dlg.FilterIndex = 0;
7 dlg.RestoreDirectory = true;
8 dlg.Title = "保存为Excel文件";
9 dlg.FileName = DateTime.Now.Ticks.ToString().Trim();
10
11 if (dlg.ShowDialog() == DialogResult.OK)
12 {
13 Stream myStream = dlg.OpenFile();
14 StreamWriter sw = new StreamWriter(myStream, System.Text.Encoding.GetEncoding(-0));
15 string columnTitle = "";
16 try
17 {
18 //写入列标题
19 for (int i = 0; i < dt.Columns.Count; i++)
20 {
21 if (i > 0)
22 {
23 columnTitle += "\t";
24 }
25 columnTitle += dt.Columns[i].ColumnName;
26 }
27 sw.WriteLine(columnTitle);
28
29 //写入列内容
30 for (int j = 0; j < dt.Rows.Count; j++)
31 {
32 string columnValue = "";
33 for (int k = 0; k < dt.Columns.Count; k++)
34 {
35 if (k > 0)
36 {
37 columnValue += "\t";
38 }
39 if (dt.Rows[j][k].ToString() == "")
40 columnValue += "null";
41 else
42 columnValue += dt.Rows[j][k].ToString().Trim();
43 }
44 sw.WriteLine(columnValue);
45 }
46 }
47 catch (Exception e)
48 {
49 MessageBox.Show(e.ToString());
50 }
51 finally
52 {
53 sw.Close();
54 myStream.Close();
55 }
56 }
57 }
58 }

显然第二种方法要比第一种方法执行速度要快得多,但是第二种方法保存的文件不是真正的EXCEL文件,而用流写的一定格式的类EXCEL文件。希望这种方法都能够帮助你。如何还有其它方法,请各位提示。以供大家共同进步。

不足还望指正,谢谢。

作者: Aland.liu 发表于 2011-07-25 18:27 原文链接

推荐.NET配套的通用数据层ORM框架:CYQ.Data 通用数据层框架
新浪微博粉丝精灵,刷粉丝、刷评论、刷转发、企业商家微博营销必备工具"