【问题标题】:Database Data to Excel File (C#)数据库数据到 Excel 文件 (C#)
【发布时间】:2015-03-25 20:35:43
【问题描述】:

我想在我的程序中包含一个选项,以将一些数据从数据库导出到 Excel 文件。我的数据库表中有多个列,但只会导出两列(项目和数量)。 “类别”表示数据属于哪个 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);

                    }
                }
            }
        }
    }

【问题讨论】:

  • 看起来写到像this这样的csv文件会更简单,或者如果你更喜欢excel,看看这个question
  • @scurrie 我已经研究过这个选项,但这对我来说不是一个合理的解决方案。
  • 澄清一下,问题是从数据库中获取数据还是将数据写入 excel 文件?还是两者兼而有之?
  • @scurrie 我从数据库中获取数据没有问题。我已经能够从数据库中获取数据并将其显示到 dgv 上而没有问题。但是,我不明白的是如何将数据“传输”(也称为读取)到 excel 文件。
  • 我发现这样的任务在 Excel VBA 中更容易完成。您必须恢复到 ADO(或 DAO)才能获得记录集,但是一旦拥有它,您就可以更好地控制该过程。我开发了一个简单的记录集到工作表代码集,只修改 SQL。

标签: c# database winforms export-to-excel


【解决方案1】:

如果您通过 Web 应用程序或类似工具创建 excel 文档,您可以查看 EPPlus,它作为 NuGet 包提供,似乎可以满足您的需求。

否则,请查看有关使用办公室互操作对象的 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 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。

【讨论】:

  • 就是这样,我从未获取任何数据。我只是想直接从数据库中读取到 excel 文件。
  • 我已经用有效的新代码更新了我的问题。但是,代码的问题是我将数据库表中的所有列都放入 DataTable 中,这反过来又会导致 excel 出现一些问题。如何仅从数据库中获取特定列?
  • @John Ahhh 我现在明白了,哈哈。对不起,我花了一秒钟才明白你在问什么。无论如何,我更新了我的答案;我认为快速编辑您的 SQL 语句应该可以解决问题
  • 是的,它可以完美运行!谢谢你的帮助:)
  • 不费吹灰之力@John,很高兴它有帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-24
  • 1970-01-01
  • 2019-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多