本文實例講述了C#實現將DataTable內容輸出到Excel表格的方法。分享給大家供大家參考。具體如下:
1.關于本文
本文描述了一個函數(SaveToExcel),該函數可以將DataTable數據內的數據輸出到Excel表格中
2.相關說明
1)本文中使用這個函數將一個DataTable中的內容輸出到路徑名為addr的目錄下:
2)這個函數需要引用Microsoft.Office.Interop.Excel命名空間
需要添加引用:Microsoft Excel 14.0 Object Library
并在程序的最上方添加:
//按鈕:將數據保存到Excel表格中private void btnSave_Click(object sender, EventArgs e){ SaveToExcel(txtAddress.Text, (DataTable)dgvTable4Output.DataSource);}
3.程序界面
4.程序代碼
Load函數部分:設置數據源
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表格中
//按鈕:將數據保存到Excel表格中private void btnSave_Click(object sender, EventArgs e){ SaveToExcel(txtAddress.Text, (DataTable)dgvTable4Output.DataSource);}
函數SaveToExcel部分:
/// <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#程序設計有所幫助。
新聞熱點
疑難解答