Pergunta

Eu tenho um arquivo Excel no servidor web onde meu site foi implantado.O cenário, eu tenho uma tela que permite ao usuário baixar um arquivo Excel do servidor web e salvar na unidade local e selecionar o mesmo caminho do arquivo para exportar os dados, mas estou recebendo o erro abaixo.

O ASP.NET não está autorizado a acessar o recurso solicitado.Considere conceder direitos de acesso ao recurso à identidade da solicitação ASP.NET.O ASP.NET possui uma identidade de processo básica (normalmente {Machine} Aspnet no IIS 5 ou serviço de rede no IIS 6) que é usado se o aplicativo não estiver sendo transmitido.Se o aplicativo estiver se passando por meio, a identidade será o usuário anônimo (normalmente iusr_machinename) ou o usuário de solicitação autenticado.Para conceder acesso ASP.NET a um arquivo, clique com o botão direito do mouse no arquivo no Explorer, escolha "Propriedades" e selecione a guia Segurança.Clique em "Adicionar" para adicionar o usuário ou grupo apropriado.Destaque a conta do ASP.NET e verifique as caixas para obter o acesso desejado.

Este é o meu código:

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
        }
    }
}
Foi útil?

Solução

Você não pode usar o Office Automation com segurança em um processo de servidor.Veja a resposta para Editando um documento Excel com macros em ASP.NET para saber até onde você precisa ir para tornar isso seguro.Ver Serviço Web ASP.NET usando Office 2010 COM para saber o que pode acontecer se você tentar chamá-lo do ASP.NET.

O problema, resumidamente, é que o Office Automation foi projetado para a automação, a partir de um aplicativo de desktop, dos produtos Microsoft Office, que são aplicativos de desktop.Todo tipo de coisa não funciona corretamente quando você as usa em um aplicativo de servidor.

Outras dicas

Você tem acesso de área de trabalho remota a este servidor?

Você precisará definir as permissões na pasta para a qual o arquivo Excel está sendo exportado, bem como configurar as permissões em DCOMCNFG para que o usuário do AppPool possa automatizar o Excel.(Iniciar, Executar, DCOMCNFG, Serviços de Componentes, Computadores, Configuração DCOM e clique com o botão direito no objeto Microsoft Excel.

Você já considerou um redator de Excel?Como EP Plus.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top