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 ответов
Попробуй это:
- Создать каталог
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).
- Для каталога 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
В моем случае я последовал приведенным здесь предложениям и решил проблему.
Шаги:
- Пробег
dcomcnfg
- Перейдите в корневой каталог консоли \Component Services\Computers\My Computer\DCOM Config\Microsoft Excel Application.
- Щелкните правой кнопкой мыши приложение Microsoft Excel
- Выбрать свойства
- Перейдите на вкладку Identity
- Выберите Интерактивный пользователь.
На шаге 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 для ЛЮБОГО сетевого файла. Локальный доступ к файлам в порядке.