1. 程式人生 > >C#匯出資料庫表至Excel中

C#匯出資料庫表至Excel中


新增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