Question

I have a excel file on web server where my website deployed. The scenario, I have a screen which allow user to download an Excel file from web server and save to local drive then select the same file path to export the data, but I'm getting the below error.

ASP.NET is not authorized to access the requested resource. Consider granting access rights to the resource to the ASP.NET request identity. ASP.NET has a base process identity (typically {MACHINE}\ASPNET on IIS 5 or Network Service on IIS 6) that is used if the application is not impersonating. If the application is impersonating via , the identity will be the anonymous user (typically IUSR_MACHINENAME) or the authenticated request user. To grant ASP.NET access to a file, right-click the file in Explorer, choose "Properties" and select the Security tab. Click "Add" to add the appropriate user or group. Highlight the ASP.NET account, and check the boxes for the desired access.

This is my code:

private void btnExportToExcel_Click(object sender, System.EventArgs e)
{
    Microsoft.Office.Interop.Excel.ApplicationClass appExcel = new Microsoft.Office.Interop.Excel.ApplicationClass();
    DataSet dsResult = new DataSet();
    object missingValue = System.Reflection.Missing.Value;
    decimal wkOpenBal = 0.00m;
    decimal wkAddition = 0.00m; 
    decimal wkDisposal = 0.00m;
    string rptDt = "";

    decimal os_p = 0.00M;
    decimal os_s = 0.00M;
    decimal closs_16_25 = 0.00M;
    decimal closs_26 = 0.00M;
    decimal os_clr_p = 0.00M;
    decimal os_whs_p = 0.00M;
    decimal os_clr_s = 0.00M;
    decimal os_whs_s = 0.00M;           
    decimal mark_to_mkt = 0.00M;
    decimal mark_to_mkt_error = 0.00M;


    if(txtWeeklyFile.Value != "")
    {
        //DATABASE CALL
        objBursaSubmission = (IBursaSubmission) ObjectFactory.Instance.GetObject(ObjectIdentifier.BursaSubmissionManager);                      
        dsResult = objBursaSubmission.GetReportData(txtRptdt.Text);

        try
        {
            if(dsResult != null && dsResult.Tables[0].Rows.Count > 0)
            {
                if(System.IO.File.Exists(txtWeeklyFile.Value.ToString()))
                {
                    wkOpenBal = Convert.ToDecimal(dsResult.Tables[0].Rows[0]["WK_OPENBAL"]);
                    wkAddition = Convert.ToDecimal(dsResult.Tables[0].Rows[0]["WK_ADDITION"]);
                    wkDisposal = Convert.ToDecimal(dsResult.Tables[0].Rows[0]["WK_DISPOSAL"]);
                    rptDt = dsResult.Tables[0].Rows[0]["LOGICAL_DT"].ToString();                

                    os_p = Convert.ToDecimal(dsResult.Tables[0].Rows[0]["OS_P"]);
                    os_s = Convert.ToDecimal(dsResult.Tables[0].Rows[0]["OS_S"]);
                    closs_16_25 = Convert.ToDecimal(dsResult.Tables[0].Rows[0]["CLOSS_16_25"]);
                    closs_26 = Convert.ToDecimal(dsResult.Tables[0].Rows[0]["CLOSS_26"]);
                    os_clr_p = Convert.ToDecimal(dsResult.Tables[0].Rows[0]["OS_CLR_P"]);
                    os_whs_p = Convert.ToDecimal(dsResult.Tables[0].Rows[0]["OS_WHS_P"]);
                    os_clr_s = Convert.ToDecimal(dsResult.Tables[0].Rows[0]["OS_CLR_S"]);
                    os_whs_s = Convert.ToDecimal(dsResult.Tables[0].Rows[0]["OS_WHS_S"]);
                    mark_to_mkt = Convert.ToDecimal(dsResult.Tables[0].Rows[0]["MARK_TO_MKT"]);
                    mark_to_mkt_error = Convert.ToDecimal(dsResult.Tables[0].Rows[0]["mark_to_mkt_error"]);

                    decimal clr_total_p = os_clr_p + os_whs_p;
                    decimal clr_total_s = os_clr_s + os_whs_s;

                    Microsoft.Office.Interop.Excel.Workbook wBook = appExcel.Workbooks.Open(txtWeeklyFile.Value.ToString(),Type.Missing,Type.Missing,Type.Missing,
                        Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,
                        Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing);

                    //SHEET MARKET POSITION SHEET 1                                                             
                    Worksheet sheetMarktetPosition1 = (Worksheet)wBook.Sheets[1];                       
                    Range mPositionRange = sheetMarktetPosition1.UsedRange;                 

                    ((Microsoft.Office.Interop.Excel.Range)mPositionRange.Cells[6,7]).Value2 = rptDt.ToString();

                    ((Microsoft.Office.Interop.Excel.Range)mPositionRange.Cells[14,3]).Value2 = os_p.ToString();
                    ((Microsoft.Office.Interop.Excel.Range)mPositionRange.Cells[14,7]).Value2 = mark_to_mkt.ToString();                         
                    ((Microsoft.Office.Interop.Excel.Range)mPositionRange.Cells[16,3]).Value2 = os_s.ToString();                            
                    ((Microsoft.Office.Interop.Excel.Range)mPositionRange.Cells[15,5]).Value2 = "";
                    ((Microsoft.Office.Interop.Excel.Range)mPositionRange.Cells[40,3]).Value2 = clr_total_p.ToString();
                    ((Microsoft.Office.Interop.Excel.Range)mPositionRange.Cells[41,3]).Value2 = clr_total_s.ToString();
                }
            }
        }
        catch (Exception ex)
        {
            //code for any other type of exception
        }
    }
}
Was it helpful?

Solution

You cannot safely use Office Automation from a server process. See the answer to Editing an Excel document with Macros in ASP.NET to learn how far you have to go to make this safe. See ASP.NET Web Service using office 2010 COM to learn what can happen if you just try calling it from ASP.NET.

The problem, briefly, is that Office Automation was designed for the automation, from a desktop application, of the Microsoft Office products, which are desktop applications. All sorts of things don't work properly when you're using them from a server application.

OTHER TIPS

Do you have remote desktop access to this server?

You will need to set the permissions on the folder that the Excel file is being exported to as well as setup the permissions in DCOMCNFG so that the AppPool user can automate Excel. (Start, Run, DCOMCNFG, Component Services, Computers, DCOM Config and right click the Microsoft Excel object.

Have you considered an Excel writer instead? Such as EPPlus.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top