C# 通过Visual Studio桌面应用程序按钮创建Excel工作簿单击并填充sql数据

C# 通过Visual Studio桌面应用程序按钮创建Excel工作簿单击并填充sql数据,c#,sql-server,excel,visual-studio-2012,C#,Sql Server,Excel,Visual Studio 2012,Visual Studio 2012 Windows桌面版 Microsoft SQL Server 2008 Excel 2007 我创建了一个桌面应用程序,用于使用数据绑定将数据输入SQL数据库。我现在需要创建一个报告,以excel工作簿的形式从应用程序客户端的SQL数据库中提取这些信息 我的问题是:如何从桌面应用程序将SQL视图中的所有列导出到excel工作簿中 我有下面的基础工作,但不确定如何将视图数据放入工作表中 private void button_Click(object sen

Visual Studio 2012 Windows桌面版 Microsoft SQL Server 2008 Excel 2007

我创建了一个桌面应用程序,用于使用数据绑定将数据输入SQL数据库。我现在需要创建一个报告,以excel工作簿的形式从应用程序客户端的SQL数据库中提取这些信息

我的问题是:如何从桌面应用程序将SQL视图中的所有列导出到excel工作簿中

我有下面的基础工作,但不确定如何将视图数据放入工作表中

private void button_Click(object sender, EventArgs e)
{
    try
    {
        Excel.Application oXL = new Excel.Application();
        oXL.Visible = true;

        Excel.Workbook oWB = oXL.Workbooks.Add();
        Excel.Worksheet oSheet = oWB.ActiveSheet;
        oSheet.Cells[1, 1] = "Hello World!";

    }
    catch (Exception ex)
    {
    MessageBox.Show("Error");
    }
}
解决方案由OP

用下面的代码解决了这个问题。也许不是最漂亮的,但它让我度过了一天

using Excel = Microsoft.Office.Interop.Excel;
using Microsoft.SqlServer.Server;

private void button_Click(object sender, EventArgs e)
{
    try
    {
        SqlConnection conn = new SqlConnection();
        conn.ConnectionString = dataSet1.Properties.Settings.Default.ConnectionString.ToString();
        SqlCommand cmd = new SqlCommand();
        cmd.CommandText = "SELECT * FROM dbo.Table";

        SqlDataAdapter da = new SqlDataAdapter(cmd.CommandText, conn);
        DataSet ds = new DataSet();
        da.Fill(ds, "dbo.Table");
        DataTable dt = ds.Tables["dbo.Table"];

        Excel.Application oXL = new Excel.Application();
        Excel.Workbook oWB = oXL.Workbooks.Add();
        Excel.Worksheet oSheet = oWB.ActiveSheet;

        //Puts column headers starting in Row 5
        int col = 0, row = 5;
        foreach (DataColumn dc in dt.Columns)
        {
            oXL.Cells[row, ++col] = dc.ColumnName.ToString();
        }

        //Fills data starting in row 6
        foreach (DataRow dr in dt.Rows)
        {
            row++;
            col = 0;
            foreach (DataColumn dc in dt.Columns)
            {
                oXL.Cells[row, ++col] = dr[dc.ColumnName];
            }
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show("Error");
    }
}

我已经编辑了你的标题。请看,如果一致意见是否定的,他们就不应该这样做。你的基本知识是正确的,我建议你获取查询数据并在工作簿中逐个单元格地输入,你也可能希望禁用Excel中的屏幕更新。谢谢@Rafael!成功了@如果发生这种情况,请将您的更新代码作为您自己问题的答案,以便将来的访问者很容易找到它。@Rafael it表示,我在提问后的两个小时内无法找到它,因为我在这个论坛上没有足够的影响力