Microsoft Office Excel не может получить доступ к файлу 'c:\inetpub\wwwroot\Timesheet\App_Data\Template.xlsx'

У меня есть мой код следующим образом:

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;

Теперь по линии:

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);

Он выполняется непосредственно из визуальной студии (F5), но когда я пытаюсь получить к нему доступ через IIS, он не работает. Выдает ошибку следующим образом:

Microsoft Office Excel не может получить доступ к файлу "c:\inetpub\wwwroot\Timesheet\App_Data\Template.xlsx". Есть несколько возможных причин:
• Имя файла или путь не существует.
• Файл используется другой программой.
• Книга, которую вы пытаетесь сохранить, имеет то же имя, что и текущая открытая книга.

Я попытался обойти как:-

  • Папка и файл существуют, предоставляя доступ к IUSR_### (пользователю IIS) и пользователю ASPNET в папке, где находится файл.
    • У Component Services(DCOM) предоставлен доступ к соответствующему пользователю.

Я уже дал все разрешения на папку, где существует шаблон (.xlsx)

Какие-либо предложения??

9 ответов

Решение

Попробуй это:

  1. Создать каталог

C:\Windows\SysWOW64\ Config \ systemprofile \ Desktop

(для 32-разрядной версии Excel/Office на 64-разрядном компьютере с Windows) или

C:\Windows\System32\ Config \ systemprofile \ Desktop

(для 32-разрядной версии Office на 32-разрядном компьютере с Windows или 64-разрядной версии Office на 64-разрядном компьютере с Windows).

  1. Для каталога Desktop добавьте разрешения " Полный доступ" для соответствующего пользователя (например, в Win7 и IIS 7 и DefaultAppPool установите разрешения для пользователя IIS AppPool \ DefaultAppPool).

Оригинальный пост с ответом:

Позвольте мне заметить, что вместо меня добавление каталога c:\windows\syswow64\config\systemprofile\desktop не сработало.

Дело в том, что WOW64 означает Windows на Windows64, что означает, что он действительно применяется для 32-разрядных программ, работающих на 64-разрядной ОС.

Поскольку у меня установлен 64-битный Excel, правильным каталогом оказался каталог c:\windows\system32\config\systemprofile\desktop

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

Шаги:

  1. Пробег dcomcnfg
  2. Перейдите в корневой каталог консоли \Component Services\Computers\My Computer\DCOM Config\Microsoft Excel Application.
  3. Щелкните правой кнопкой мыши приложение Microsoft Excel
  4. Выбрать свойства
  5. Перейдите на вкладку Identity
  6. Выберите Интерактивный пользователь.

На шаге 2, если вы не можете найти этот путь, попробуйте запустить mmc comexp.msc /32 вместо того dcomcnfg.

Я хотел бы добавить кое-что к ответу Эрика Бонно: ответ сработал частично, когда я работал на сервере IIS с пользователем без прав администратора с PowerPoint PIA.

Я заметил, что не могу открыть файл pptx, если в этом файле есть носитель (например, картинка).

"Хаком" было добавить также права пользователю windows (тот, который использует PIA) на каталоги systemprofile/AppData.

Надеюсь это поможет

Следующее решение сработало для меня.

Создайте каталог C:\Windows\SysWOW64\config\systemprofile\Desktop

Ранее я пытался решить эту проблему, затем решил.

Решение:

Я поставил полное разрешение для конкретной папки (подпапка и файлы) и проверил, работает ли она нормально.

Я завернул свой WCF в службу Windows. Создание папок рабочего стола решило это для меня на одном компьютере, но не на другом.

В итоге моя проблема заключалась в том, что моя служба Windows не работала под активным пользователем машины. Настройка службы для работы под пользователем, который активен на машине, до сих пор решала эту проблему для меня.

Только сочетание

  • Существующая папка на рабочем столе
  • Сервис работает под реальной учетной записью пользователя

у меня это работает

Эта статья приводит меня к полному решению: Не удается получить доступ к файлу Excel

В моем случае ни одно из предложенных решений не сработало (изменение пользователя в настройках dcom, создание папки на рабочем столе и предоставление пользователю полного доступа к ней и т. д.).

Я наконец понял, что у меня 64-битная версия Excel. Удаление 64-разрядной версии и установка 32-разрядной версии Excel решили мое решение этой ошибки. Это было при использовании Windows 10 и Microsoft Office Excel 2010.

Это работает

excel.exe /safe

Это не делает и дает ту же ошибку, что и обычный запуск Excel

excel.exe / автоматизация

Это также происходит для всех приложений MS Office 2007 для ЛЮБОГО сетевого файла. Локальный доступ к файлам в порядке.

Другие вопросы по тегам