Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将数据集导出到EXCEL_C#_Asp.net_Export To Excel - Fatal编程技术网

C# 将数据集导出到EXCEL

C# 将数据集导出到EXCEL,c#,asp.net,export-to-excel,C#,Asp.net,Export To Excel,我使用以下代码将字段从数据库表导出到excel中。我想做的是能够编写一条SQL语句,从多个表中检索字段并将它们导出到excel中。此代码只允许我导出一个表。另外,如何显示保存提示对话框?样本代码将不胜感激-非常感谢 protected void export_Click(object sender, EventArgs e) { string sql = null; string data = null; string path = save_a

我使用以下代码将字段从数据库表导出到excel中。我想做的是能够编写一条SQL语句,从多个表中检索字段并将它们导出到excel中。此代码只允许我导出一个表。另外,如何显示保存提示对话框?样本代码将不胜感激-非常感谢

protected void export_Click(object sender, EventArgs e)
{

        string sql = null;
        string data = null;
        string path = save_as.Text;

        int i = 0;
        int j = 0;

        Excel.Application xlApp;
        Excel.Workbook xlWorkBook;
        Excel.Worksheet xlWorkSheet;
        object misValue = System.Reflection.Missing.Value;

        xlApp = new Excel.ApplicationClass();
        xlWorkBook = xlApp.Workbooks.Add(misValue);
        xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);

        //connectionString = "data source=servername;initial catalog=databasename;user id=username;password=password;";
        SqlConnection cnn = new SqlConnection(GetConnectionString());
        cnn.Open();
        sql = "SELECT Story, CreationDate FROM Story";
        SqlDataAdapter dscmd = new SqlDataAdapter(sql, cnn);
        DataSet ds = new DataSet();
        dscmd.Fill(ds);

        for (i = 0; i <= ds.Tables[0].Rows.Count - 1; i++)
        {
            for (j = 0; j <= ds.Tables[0].Columns.Count - 1; j++)
            {
                data = ds.Tables[0].Rows[i].ItemArray[j].ToString();
                xlWorkSheet.Cells[i + 1, j + 1] = data;
            }
        }

        xlWorkBook.SaveAs(path+".xls", Excel.XlFileFormat.xlWorkbookNormal, misValue, misValue, misValue, misValue, Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue);
        xlWorkBook.Close(true, misValue, misValue);
        xlApp.Quit();

        releaseObject(xlWorkSheet);
        releaseObject(xlWorkBook);
        releaseObject(xlApp);

        //MessageBox.Show("Excel file created , you can find the file c:\\csharp.net-informations.xls");
    }

    private void releaseObject(object obj)
    {
        try
        {
            System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
            obj = null;
        }
        catch (Exception ex)
        {
            obj = null;
            //MessageBox.Show("Exception Occured while releasing object " + ex.ToString());
        }
        finally
        {
            GC.Collect();
        }
    }
protectedvoid导出\u单击(对象发送方,事件参数e)
{
字符串sql=null;
字符串数据=null;
字符串路径=另存为.Text;
int i=0;
int j=0;
Excel.applicationxlapp;
Excel.工作簿;
Excel工作表;
对象错误值=System.Reflection.Missing.Value;
xlApp=new Excel.ApplicationClass();
xlWorkBook=xlApp.Workbooks.Add(错误值);
xlWorkSheet=(Excel.Worksheet)xlWorkBook.Worksheets.get_项(1);
//connectionString=“数据源=服务器名;初始目录=数据库名;用户id=用户名;密码=密码;”;
SqlConnection cnn=新的SqlConnection(GetConnectionString());
cnn.Open();
sql=“选择故事,从故事创建日期”;
SqlDataAdapter dscmd=新的SqlDataAdapter(sql,cnn);
数据集ds=新数据集();
dscmd.Fill(ds);

对于(i=0;i您可以根据您的需求执行内部或外部操作来获取数据

// your sql query would be look like this
sql = "SELECT Story, CreationDate, otherTableColumn_1 FROM Story inner join otherTable on Story.commonField = otherTable.commonField";
否则,如果表之间不相关,那么您可以通过此

// your sql query would be look like this
sql = "SELECT Story, CreationDate, otherTableColumn_1 FROM Story, otherTable";
下面是在客户端系统上显示SaveAs对话框来保存excel工作表

Response.Clear();
Response.ContentType = "application/vnd.ms-excel";
Response.AddHeader("Content-Disposition", "attachment; filename=" yourfilename.xls");
// specify excel file format, could be 2000, XP, 2003, e.t.c
workbook.SaveToStream(Response.OutputStream, FileFormat.XLS97);
Response.End();

另一种解决方案是检索任意多个数据集,并将它们导出到同一ExcelApp中的不同工作簿中。为此,应将
Excel.Application xlApp
作为全局变量取出

关于保存步骤和消息框的东西,只需按照这个非常方便。我昨天刚刚测试过它,它很甜

这应该是这样的:

DialogResult iRet = MessageBox.Show( sMsg, "Save Data?", 
        MessageBoxButtons.YesNo );
    if (iRet == DialogResult.Yes)
           xlWorkBook.SaveAs(path+".xls", 
               Excel.XlFileFormat.xlWorkbookNormal, etc...);

在ASP.NET环境中执行办公自动化是不安全的。相反,您应该生成一个csv、html表或xlsx文件并将其发送到客户端。对于xlsx,您可以使用Office Open XML SDK稍微简化一些事情


正如Samuel Neff所说,避免办公室自动化,这很容易出错,而且需要在运行代码的计算机上安装Office。Open Office XML SDK不需要安装Office。我使用了EPPlus库,这使得使用OO XML SDK非常容易。