Hemil Gandhi Ответов: 2

В Excel ошибка в CSV-файл после развертывания 80070005 отказано в доступе.


Я использую приведенный ниже код для сохранения моего файла в формате csv из xls, I studio code работает нормально, но если я размещаю приложение, оно выдает ошибку при нажатии кнопки.
Подробности ошибки указаны ниже.... plz help

Server Error in '/NPCI' Application.
Retrieving the COM class factory for component with CLSID {00024500-0000-0000-C000-000000000046} failed due to the following error: 80070005 Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED)).
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Сведения Об Исключении: Система.UnauthorizedAccessException: получение фабрики COM-класса для компонента с CLSID {00024500-0000-0000-C000-000000000046} не удалось из-за следующей ошибки: 80070005 Доступ запрещен. (Исключение из HRESULT: 0x80070005 (E_ACCESSDENIED)).

ASP.NET не имеет права доступа к запрошенному ресурсу. Рассмотрите возможность предоставления прав доступа к ресурсу пользователю. ASP.NET запросите удостоверение личности. ASP.NET имеет базовое удостоверение процесса (обычно {MACHINE}\ASPNET на IIS 5 или сетевую службу на IIS 6 и IIS 7, а также настроенное удостоверение пула приложений на IIS 7.5), которое используется, если приложение не олицетворяет себя. Если приложение олицетворяет себя через <identity impersonate="true"/>, то это будет анонимный пользователь (обычно IUSR_MACHINENAME) или аутентифицированный пользователь запроса.

Чтобы грант ASP.NET доступ к файлу, щелкните правой кнопкой мыши файл в Проводнике, выберите "Свойства" и выберите вкладку Безопасность. Нажмите кнопку "Добавить", чтобы добавить соответствующего пользователя или группу. Выделите ASP.NET учетная запись и установите флажки для желаемого доступа.

Что я уже пробовал:

Imports Excel = Microsoft.Office.Interop.Excel
Imports System.Configuration
Imports ClosedXML.Excel

Dim xlsApp As New Excel.Application
        Dim xlsWorkBook As Excel.Workbook
        Dim xlsWorkSheet As Excel.Worksheet
        xlsApp = New Excel.Application
        xlsWorkBook = xlsApp.Workbooks.Open(excelPath)
        xlsWorkSheet = xlsWorkBook.Worksheets(1) ' You could also do it by name: "sheet1"
        'xlsWorkSheet.Rows("1:5").Delete()
        'xlsWorkSheet.Rows("37:100").Delete()
        xlsApp.DisplayAlerts = False
        xlsWorkBook.SaveAs(csvPath, FileFormat:=Excel.XlFileFormat.xlCSV, CreateBackup:=False)
        xlsWorkBook.Close()

F-ES Sitecore

То, что вы делаете, не поддерживается и не будет работать. Используйте что-то, предназначенное для управления файлами Excel из asp.net например, XDoc, EPPlus, Excel ODBC Driver и т. д.

Hemil Gandhi

Я пробовал все другие способы, но получил ту же ошибку "данные повреждены". Пожалуйста, предложите что-нибудь еще....

Hemil Gandhi

на самом деле я хочу импортировать данные excel в базу данных, но не могу загрузить файл excel, поэтому я решил сохранить его как csv & затем импортировать его в БД, пожалуйста, предложите, что я должен сделать, чтобы полностью заполнить мое требование.

2 Ответов

Рейтинг:
2

OriginalGriff

Прочтите сообщение об ошибке - это довольно ясно:

failed due to the following error: 80070005 Access is denied.

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

Проверьте содержимое переменных excelPath и csvPath, а также проверьте, каковы права доступа к папке. Если это раньше работало в dev, но не работает в prod, то очень вероятно, что вы используете исполняемую папку приложения для хранения своих данных, и это не сработает.

Мы ничего не можем сделать для вас - у нас нет доступа к вашим системам!


Hemil Gandhi

Dim Upath As String = "~/Uploads/" + CDate(Today.Дата).ToString("yyyyMMdd")
Dim excelPath As String = сервер.MapPath(Upath + "/BKP/") + Path.GetFileName(FileUpload1.PostedFile.имя файла)
Dim csvPath As String = сервер.MapPath(Upath) + "/" + Path.GetFileNameWithoutExtension(FileUpload1.PostedFile.Имя файла) + ".csv"

Я использую вышеуказанные пути сначала я копирую исходный файл в папку uploads/yyyymmdd/bkp и затем сохраняю csv-файл в папку uploads/yyyymmdd/ path, я проверил, что система может копировать файлы в папку bkp, но при сохранении csv она выдает ошибку. я уже предоставил необходимые права на папку.

Richard MacCutchan

Вы уверены в справочнике yyyymmdd существует?

Hemil Gandhi

Защищенный Суб CreateDirectory()
Dim Upath As String = "~/Uploads/" + CDate(Today.Дата).ToString("yyyyMMdd")
Dim folderPath As String = сервер.MapPath(Upath)
'Проверьте, существует ли каталог (папка).
Если нет Directory.Exists(folderPath), то
'Если каталог (папка) не существует. Создать ее.
Каталог.CreateDirectory(путь к папке)
Конец, Если

Dim bkppath As String = Upath + "/" + "BKP"
Dim bfolderPath As String = сервер.MapPath(bkppath)
'Проверьте, существует ли каталог (папка).
Если нет Directory.Exists(bfolderPath), то
'Если каталог (папка) не существует. Создать ее.
Каталог.CreateDirectory(bfolderPath)
Конец, Если
Конец Подводной Лодки

Я убедился, что они существуют.

OriginalGriff

Скорее всего, выбранный вами путь, который находится под вашим веб - сайтом и, следовательно, "принадлежит" IIS (приложению, которое запускает ваш сайт), недоступен для использования, под которым работает Excel.
Когда вы создаете приложение ExcelApplication, оно запускает экземпляр Excel (предполагая, что Office установлен на веб - сервере, что ни в коем случае не является заданным) и не обязательно работает под тем же пользователем, что и IIS-на самом деле это очень маловероятно.
Видеть здесь:
https://support.microsoft.com/en-gb/help/257757/considerations-for-server-side-automation-of-office

Hemil Gandhi

как мне записать журнал, чтобы я узнал, что система сталкивается с ошибкой на какой строке??

OriginalGriff

До вас - досье.AppendText-самый примитивный, но он работает ...

Рейтинг:
1

Dave Kreskowiak

О чем еще никто не упоминал, так это о том, что вы не можете использовать Office Interop, в вашем случае Excel, в веб-приложении. Он может прекрасно работать на вашем компьютере, но в многопользовательском приложении и развернутом на веб-сервере Office не поддерживается.

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


Hemil Gandhi

Вы хотите, чтобы я внес некоторые изменения в настройки пула приложений??

скажите, пожалуйста, что именно мне следует делать ??
Заранее спасибо

Dave Kreskowiak

Нет, это разрешения NTFS. Щелкните правой кнопкой мыши папку, в которую вы пытаетесь выполнить запись, и выберите пункт Свойства. На вкладке Безопасность это разрешения NTFS для каждой учетной записи, которая имеет что-то настроенное. Если учетная запись, под которой вы запускаете сайт, отсутствует в списке, она будет доступна только для чтения для этой учетной записи. Вы должны добавить учетную запись и настроить разрешения для нее.

И ОПЯТЬ ЖЕ, ВЫ НЕ МОЖЕТЕ ИСПОЛЬЗОВАТЬ OFFICE INTEROP В ASP.NET ПРИЛОЖЕНИЕ! ОН НЕ БУДЕТ РАБОТАТЬ В МНОГОПОЛЬЗОВАТЕЛЬСКОЙ СРЕДЕ!