数据库数据到 Excel 文件 (C#)

Database Data to Excel File (C#)

我想在我的程序中包含一个选项,用于将一些数据从数据库导出到 excel 文件。我的数据库 table 中有多个列,但只会导出两个列(项目和数量)。 'category' 表示数据属于哪个 dgv。 但是无论如何,回到问题...我如何从我的数据库 读取 数据到新的 excel 文件?

到目前为止,这是我的代码:

        private void excelToolStripMenuItem_Click(object sender, EventArgs e)
        {
        //EXPORT TO EXCEL
        string fname = "Inventory Report.xls";
        Workbook wb = new Workbook();
        Worksheet ws1 = new Worksheet("Electrical");

        Connection();
        sqlconnection.Open();

        //string dbQuery = "SELECT * FROM inventory_table WHERE category= 0";
        sqlcmd = new SqlCommand("SELECT * FROM inventory_table WHERE category= 0", sqlconnection);

        using (SqlDataReader sqldr = sqlcmd.ExecuteReader())
        {
            if (sqldr.HasRows)
            {
                while (sqldr.Read())
                {
                    //HOW DO I READ TO EXCEL???
                }

                sqldr.Close();
                wb.Worksheets.Add(ws1);
                wb.Save(fname);
            }

        }
    }

更新:

private void excelToolStripMenuItem_Click(object sender, EventArgs e)
    {
        Connection();
        sqlconnection.Open();

        using (sqlcmd = new SqlCommand("SELECT * FROM inventory_table WHERE category= 0"))
        {
            using (SqlDataAdapter sqlda = new SqlDataAdapter())
            {
                sqlcmd.Connection = sqlconnection;
                sqlda.SelectCommand = sqlcmd;

                using (DataTable dt = new DataTable())
                {
                    sqlda.Fill(dt);

                    using (XLWorkbook wb = new XLWorkbook())
                    {
                        string fname = "Inventory Report.xlsx";
                        wb.Worksheets.Add(dt, "inventory_table");
                        wb.SaveAs(fname);

                    }
                }
            }
        }
    }

如果您正在通过网络应用程序或类似的东西创建 excel 文档,您可以查看 EPPlus,它可以作为 NuGet 包提供,并且似乎可以满足您的需要。

否则请查看有关使用 office 互操作对象的 MS docs。首先为 Microsoft.Office.Interop.Excel 添加一个引用,然后在您的代码中添加一个 using 语句:

using Excel = Microsoft.Office.Interop.Excel;

然后像这样创建一个新的 excel 文档:

var excelDoc = new Excel.Application();
excelDoc.Visible = true;
excelDoc.Workbooks.Add();
Excel._Worksheet wksht = (Excel.Worksheet)excelDoc.ActiveSheet;

最后,您需要遍历从数据库中获取的数据并将其插入某处:

wksht.Cells[1, "A"] = "Some data";

当然,您可能希望使用可以在循环时递增的索引变量。希望这对您有所帮助!

编辑

就获取适当的数据而言,只需快速编辑您的 SQL 语句即可。现在您正在使用:

SELECT * FROM inventory_table WHERE category = 0

在 select 语句中使用 * 将拉入 table 中的每一列。相反,你应该准确地告诉它你想要什么:

SELECT things, stuff, junk FROM inventory_table WHERE category = 0

或者您可以使用 Linq,我发现它可以使查询代码更清晰:

var getThings = (from i in db.inventory_table select i.things);

因此,您需要为 System.Linq 添加一个 using 语句,并将 db 声明为 ApplicationDbContext。