Набор данных EXPORT в EXCEL - PullRequest
       9

Набор данных EXPORT в EXCEL

2 голосов
/ 12 февраля 2011

Я использую следующий код для экспорта полей из таблицы базы данных в 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();
        }
    }

Ответы [ 3 ]

1 голос
/ 08 июня 2011

Автоматизация Office небезопасна в среде ASP.NET. Вместо этого вы должны сгенерировать файл csv, html или файл xlsx и отправить его клиенту. Для xlsx вы можете использовать Office Open XML SDK, чтобы немного упростить задачу.

http://www.microsoft.com/downloads/en/details.aspx?FamilyID=c6e744e5-36e9-45f5-8d8c-331df206e0d0&displaylang=en

0 голосов
/ 12 февраля 2011

Другое решение состоит в том, чтобы получить столько наборов данных, сколько вы хотите, и экспортировать их в разные рабочие книги в том же ExcelApp.Для этого Вы должны извлечь Excel.Application xlApp в качестве глобальной переменной.

Что касается шага сохранения и содержимого окна сообщений, просто следуйте этому очень удобному руководству , чтобы лучше взаимодействовать с c # .Я только что проверил вчера, это сладко.

Это должно выглядеть так:

DialogResult iRet = MessageBox.Show( sMsg, "Save Data?", 
        MessageBoxButtons.YesNo );
    if (iRet == DialogResult.Yes)
           xlWorkBook.SaveAs(path+".xls", 
               Excel.XlFileFormat.xlWorkbookNormal, etc...);
0 голосов
/ 12 февраля 2011

Вы можете выполнить внутреннее или внешнее извлечение данных в соответствии с вашими требованиями.

// 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";

И здесь для отображения листа 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();
...