簡體   English   中英

另存為對話框以將文件導出到excel C#

[英]save as dialog box for exporting file to excel C#

我將多個數據表作為不同的工作表導出到單個excel文件,並且工作正常。 但是,excel文件將保存到指定的路徑。 我想要一個“另存為”對話框,用戶可以從中選擇保存文件的路徑。 我在按鈕單擊上嘗試了以下代碼:

protected void excelexport(object sender, EventArgs e)
{
    try
    {
        string sql = null;
        string data = null;
        string path = "C:\\inetpub/wwwroot/MahindraEarth/exportexcel/exportexcel";

        int i = 0;
        int j = 0;

        Excel.Application xlApp;
        Excel.Workbook xlWorkBook;
        xlApp = new Excel.ApplicationClass();

        object misValue = System.Reflection.Missing.Value;

        xlApp = new Excel.ApplicationClass();
        xlWorkBook = xlApp.Workbooks.Add(misValue);

        System.Data.DataTable dt = new System.Data.DataTable();
        System.Data.DataTable dts = new System.Data.DataTable(); ;
        System.Data.DataTable dss = new System.Data.DataTable();
        Enquiry gs = new Enquiry();
        ResultClass objres = gs.fn_GetEnquiryList();
        if (objres.bStatus)
        {
            eslist<Enquiry> OBJLIST = objres.objData as eslist<Enquiry>;
            if (OBJLIST.Count > 0)
            {
                dt = (DataTable)OBJLIST;
            }
        }
        Operator op = new Operator();
        ResultClass objrest = op.fn_GetOperatorList();
        if (objrest.bStatus)
        {
            eslist<Operator> OBJLISTS = objrest.objData as eslist<Operator>;
            if (OBJLISTS.Count > 0)
            {
                dts = (DataTable)OBJLISTS;
            }
        }
        Contact co = new Contact();
        ResultClass objress = co.fn_GetContactList();
        if (objress.bStatus)
        {
            eslist<Contact> OBJLISS = objress.objData as eslist<Contact>;
            if (OBJLISS.Count > 0)
            {
                dss = (DataTable)OBJLISS;
            }
        }

        DataSet dataSet = new DataSet();
        dataSet.Tables.Add(dt);
        dataSet.Tables.Add(dts);
        dataSet.Tables.Add(dss);
        SaveFileDialog saveFileDialog = new SaveFileDialog();

        String[] Worksheets = new String[dataSet.Tables.Count];
        Excel.Worksheet[] xlWorkSheet = new Excel.Worksheet[dataSet.Tables.Count];
        for (int k = 0; k < dataSet.Tables.Count; k++)
        {
            DataTable dst = dataSet.Tables[k];
            xlWorkSheet[k] = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(k + 1);

            for (i = 0; i <= dst.Rows.Count - 1; i++)
            {
                for (j = 0; j <= dst.Columns.Count - 1; j++)
                {
                    xlWorkSheet[k].Cells[1, j + 1] = dataSet.Tables[k].Columns[j].ColumnName;
                    data = dst.Rows[i].ItemArray[j].ToString();
                    xlWorkSheet[k].Cells[i + 2, j + 1] = data;
                    xlWorkSheet[k].Name = dataSet.Tables[k].TableName;
                }
            }
        }

        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();
        for (int p = 0; p < 3; p++)
        {
            releaseObject(xlWorkSheet[p]);
        }
        releaseObject(xlWorkBook);
        releaseObject(xlApp);
        exportsuccess.Style.Add("display", "");
    }
    catch (Exception ex)
    {
    }
}
private void releaseObject(object obj)
{
    try
    {
        System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
        obj = null;
    }
    catch (Exception ex)
    {
        obj = null;
    }
    finally
    {
        GC.Collect();
    }
}

如何獲取“另存為”對話框,以便將多個數據表保存在多個工作表中而不是單個工作表中。

謝謝,

試試這個。 這應該給您“另存為”對話框。 一些代碼看起來應該與您的代碼相似,這應該使您對應將此代碼摘錄附加到何處有所了解。

    #region Save & Quit
    //Save and quit, use SaveCopyAs since SaveAs does not always work
    Guid id = Guid.NewGuid();
    string uniqueFileName = id.ToString() + ".xls";
    string fileName = Server.MapPath("~/" + uniqueFileName);
    xlApp.DisplayAlerts = false; //Supress overwrite request
    xlWorkBook.SaveAs(fileName, Microsoft.Office.Interop.Excel.XlFileFormat.xlWorkbookNormal, misValue, misValue, misValue, misValue, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue);
    xlWorkBook.Close(true, misValue, misValue);
    xlApp.Quit();

    //Release objects
    releaseObject(xlWorkSheet);
    releaseObject(xlWorkBook);
    releaseObject(xlApp);

    //Give the user the option to save the copy of the file anywhere they desire
    String FilePath = Server.MapPath("~/" + uniqueFileName);
    System.Web.HttpResponse response = System.Web.HttpContext.Current.Response;
    response.ClearContent();
    response.Clear();
    response.ContentType = "application/vnd.ms-excel";
    response.AddHeader("Content-Disposition", "attachment; filename=MyClaimsReport-" + DateTime.Now.ToShortDateString() + ".xls;");
    response.TransmitFile(FilePath);
    response.Flush();
    response.Close();

    //Delete the temporary file
    DeleteFile(fileName);
    #endregion

private void DeleteFile(string fileName)
{
    if (File.Exists(fileName))
    {
        try
        {
            File.Delete(fileName);
        }
        catch (Exception ex)
        {
            //Could not delete the file, wait and try again
            try
            {
                System.GC.Collect();
                System.GC.WaitForPendingFinalizers();
                File.Delete(fileName);
            }
            catch
            {
                //Could not delete the file still
            }
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM