C#匯出資料庫表至Excel中
阿新 • • 發佈:2018-11-11
新增Microsoft.Office.Interop.Excel引用
寫程式碼時,可能會報這個錯:無法嵌入互操作型別 請改用適用的介面。那就要將嵌入互操作型別的值改為False。
一個例子的完整程式碼
using System; using System.Windows.Forms; using Microsoft.Office.Interop.Excel; using System.Data.SqlClient; namespace WindowsFormsApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { //儲存檔案對話方塊 SaveFileDialog sfd = new SaveFileDialog(); sfd.Filter = "Excel檔案|*.xlsx|Word檔案|*.docx"; sfd.FilterIndex = 0; if (sfd.ShowDialog() == DialogResult.OK) { //連線資料庫,查詢資料 using (SqlConnection conn = new SqlConnection(@"server=pc;database=Mytest;trusted_connection=true")) { using (SqlDataAdapter sda = new SqlDataAdapter("select * from Table_2", conn)) { using (System.Data.DataTable dt = new System.Data.DataTable()) { //將資料庫中查到的資料填充到DataTable資料表 sda.Fill(dt); //呼叫匯出Excel的方法,傳入DataTable資料表和路徑 ExportExcel(dt, sfd.FileName); } } } } } void ExportExcel(System.Data.DataTable dt, string filepath) { //建立Excel應用程式類的一個例項,相當於從電腦開始選單開啟Excel ApplicationClass xlsxapp = new ApplicationClass(); //新建一張Excel工作簿 Workbook wbook = xlsxapp.Workbooks.Add(true); //第一個sheet頁 Worksheet wsheet = (Worksheet)wbook.Worksheets.get_Item(1); //將DataTable的列名顯示在Excel表第一行 for (int i = 0; i < dt.Columns.Count; i++) { //注意Excel表的行和列的索引都是從1開始的 wsheet.Cells[1, i + 1] = dt.Columns[i].ColumnName; } //遍歷DataTable,給Excel賦值 for (int i = 0; i < dt.Rows.Count; i++) { for (int j = 0; j < dt.Columns.Count; j++) { //從第二行第一列開始寫入資料 wsheet.Cells[i + 2, j + 1] = dt.Rows[i][j]; } } //儲存檔案 wbook.SaveAs(filepath); //釋放資源 xlsxapp.Quit(); } } }
獲取Excel、DataTable、DataGridView表中單元格值的方式
//Excel(行和列的索引是從1開始,不是從0開始)
值=xxx.Cells[行,列]
//DataTable
值=xxx.Rows[行][列]
//DataGridView
值=xxx.Rows[行].Cells[列].Value