mvc - export to excel c#




Microsoft Office Excel no puede acceder al archivo 'c: \ inetpub \ wwwroot \ Timesheet \ App_Data \ Template.xlsx' (4)

Tengo mi código de la siguiente manera:

Microsoft.Office.Interop.Excel.Application oXL = null;
Microsoft.Office.Interop.Excel.Sheets sheets;
Application excel = new Microsoft.Office.Interop.Excel.Application();


excel.Workbooks.Add(System.Reflection.Missing.Value);

/*
    * Here is the complete detail's about Workbook.Open()
    * 
    *  Excel.Workbooks.Open(String Filename, Object UpdateLinks, Object ReadOnly, Object Format, 
    *  Object Password, Object WriteResPassword, Object IgnoreReadOnlyRecommended, Object Origin,
    *  Object Delimiter, Object Editable, Object Notify, Object Converter, Object AddToMru, Object Local, Object CorruptLoad)
    */

Workbook workbook = excel.Workbooks.Open(
    System.Web.HttpContext.Current.Server.MapPath("~/App_Data/Template.xlsx"),
    Missing.Value, true, Missing.Value, Missing.Value,
    Missing.Value, Missing.Value, Missing.Value,
    Missing.Value, Missing.Value, Missing.Value,
    Missing.Value, Missing.Value, Missing.Value,
    Missing.Value);
sheets = workbook.Worksheets;

Ahora para la línea: -

workbook = excel.Workbooks.Open(
    System.Web.HttpContext.Current.Server.MapPath("~/App_Data/Template.xlsx"),
    Missing.Value, true, Missing.Value, Missing.Value,
    Missing.Value, Missing.Value, Missing.Value,
    Missing.Value, Missing.Value, Missing.Value,
    Missing.Value, Missing.Value, Missing.Value,
    Missing.Value);

Se ejecuta directamente desde el estudio visual (F5) pero cuando intento acceder a él con IIS no funciona. Lanza el error de la siguiente manera:

Microsoft Office Excel no puede acceder al archivo 'c: \ inetpub \ wwwroot \ Timesheet \ App_Data \ Template.xlsx'. Hay varias razones posibles:
• El nombre o la ruta del archivo no existe.
• El archivo está siendo utilizado por otro programa.
• El libro de trabajo que está intentando guardar tiene el mismo nombre que un libro de trabajo actualmente abierto.

He intentado el trabajo como:

  • La carpeta y el archivo existen, dando acceso al IUSR _ ### (usuario de IIS) y al usuario de ASPNET en la carpeta donde está el archivo.
    • En Servicios de componentes (DCOM) se le otorga acceso al usuario apropiado.

Ya he dado todos los permisos a la carpeta donde existe la plantilla (.xlsx)

¿¿Alguna sugerencia??


Déjenme señalar que en mi lugar, agregar el directorio c: \ windows \ syswow64 \ config \ systemprofile \ desktop no funcionó.

El punto es que WOW64 significa Windows en Windows64, eso significa que en realidad se aplica a los programas de 32 bits que se ejecutan en el sistema operativo de 64 bits.

Como tengo Excel de 64 bits instalado, el directorio correcto resultó ser el c: \ windows \ system32 \ config \ systemprofile \ desktop


Envolví mi WCF en un servicio de Windows. La creación de las carpetas de escritorio me lo resolvió en una máquina, pero no en otra.

Mi problema al final fue que mi servicio de Windows no se ejecutó bajo un usuario activo de la máquina. La configuración del servicio para ejecutar bajo un usuario que está activo en la máquina resolvió este problema para mí hasta ahora.

Solo la combinación de

  • Carpeta de escritorio existente
  • Servicio que se ejecuta bajo una cuenta de usuario real

funcionó para mí

Este artículo me llevó a la solución completa: no puedo acceder al archivo de Excel


Me gustaría agregar algo a la respuesta de Eric Bonnot: la respuesta funcionó en parte porque trabajé en un servidor IIS con un usuario no administrador con el PIA powerpoint .

Me di cuenta de que no podía abrir un archivo pptx si este tenía un medio (imagen, por ejemplo) en él.

El "truco" era agregar también los derechos del usuario de Windows (el que usa el PIA) en los directorios systemprofile / AppData .

Espero que esto ayude


Previamente intenté con este problema, luego lo resolví.

Solución:

Puse el permiso completo en una carpeta en particular (carpeta secundaria y archivos) y comprobé que funcionaba bien.