Ошибка доступа к файлу при попытке прочтения файла Excel на сервере
Уважаемые коллеги, подскажите как решить следующую проблему.
Есть Экселевский файл, мне его необходимо прочитать.
Делаю следующим образом:
В результате при попытке открыть файл mxl - все происходит нормально, а при попытке открыть файл xlsx сиситема выдает ошибку:
Ошибка при выполнении операции: ....<имя файла>...... Доступ к файлу не может быть получен.
Платформа: 1С:Предприятие 8.3 (8.3.18.1363)
Есть Экселевский файл, мне его необходимо прочитать.
Делаю следующим образом:
&НаСервере
Функция СохранитьФайлНаСервере(Адрес, лб_ЭтоФайл1С, лстр_Результат)
Если лб_ЭтоФайл1С Тогда
лстр_ИмяФайла = ПолучитьИмяВременногоФайла("mxl");
Иначе
лстр_ИмяФайла = ПолучитьИмяВременногоФайла("xls");
КонецЕсли;
ДанныеХранилища = ПолучитьИзВременногоХранилища(Адрес);
Попытка
ДанныеХранилища.Записать(лстр_ИмяФайла);
Исключение
Возврат "Не удалось переместить файл на сервер по причине: " + ОписаниеОшибки();
КонецПопытки;
Возврат лстр_ИмяФайла;
КонецФункции
&НаСервере
Функция ПрочитатьФайлНаСервере(лстр_ИмяФайлаНаСервере, ВхРезультат)
ТабДокументЕксель = Новый ТабличныйДокумент;
Попытка
ТабДокументЕксель.Прочитать(лстр_ИмяФайлаНаСервере);
Исключение
ВхРезультат = ("Не удалось прочитать указанный файл по причине: " + ОписаниеОшибки());
Возврат Неопределено;
КонецПопытки;
Возврат ТабДокументЕксель;
КонецФункции
&НаКлиенте
Процедура ЗагрузитьДанныеИзЭксель(Команда)
Если НЕ ЗначениеЗаполнено(ИмяФайла) Тогда
ВывестиСообщениеПользователю("Не указн файл.");
Возврат;
КонецЕсли;
лстр_ИмяФайла = СокрЛП(ИмяФайла);
ТекФайл = Новый Файл(лстр_ИмяФайла);
Если НЕ ТекФайл.Существует() Тогда
ВывестиСообщениеПользователю("Указанный файл отсутствует.");
Возврат;
КонецЕсли;
лстр_Расширение = НРег(Прав(лстр_ИмяФайла, 3));
лб_ЭтоФайл1С = Ложь;
Если лстр_Расширение = "mxl" Тогда
лб_ЭтоФайл1С = Истина;
КонецЕсли;
//Передадим файл на сервер
ДвоичныеДанные = Новый ДвоичныеДанные(лстр_ИмяФайла);
Адрес = ПоместитьВоВременноеХранилище(ДвоичныеДанные, Новый УникальныйИдентификатор);
лстр_Результат = "";
лстр_ИмяФайлаНаСервере = СохранитьФайлНаСервере(Адрес, лб_ЭтоФайл1С, лстр_Результат);
Если лстр_Результат <> "" Тогда
ВывестиСообщениеПользователю(лстр_Результат);
Возврат;
КонецЕсли;
//Получим табличный документ на сервере из файла
ТабДокументЕксель = ПрочитатьФайлНаСервере(лстр_ИмяФайлаНаСервере, лстр_Результат);
Если лстр_Результат <> "" Тогда
ВывестиСообщениеПользователю(лстр_Результат);
Возврат;
КонецЕсли;
//Получим данные из табличного документа
ПрочитатьДанныеИзТабличногоДокумента(ТабДокументЕксель);
ПоказатьВ результате при попытке открыть файл mxl - все происходит нормально, а при попытке открыть файл xlsx сиситема выдает ошибку:
Ошибка при выполнении операции: ....<имя файла>...... Доступ к файлу не может быть получен.
Платформа: 1С:Предприятие 8.3 (8.3.18.1363)
По теме из базы знаний
Найденные решения
(7) Ваша проблема в Расширении файла. Вы читаете файл XLSX а присваиваете ему расширение:
ПолучитьИмяВременногоФайла("xls");
На сервере. У вас табличный документ пытается читать XLSX файл как XLS так как он зависим в данном случае от расширения.
Я прикрепил обработку которая нагляднно демонстрирует как прочитать любые EXCEL файлы (как xls так и xlsx) а также mxl одновременно
ПолучитьИмяВременногоФайла("xls");
На сервере. У вас табличный документ пытается читать XLSX файл как XLS так как он зависим в данном случае от расширения.
Я прикрепил обработку которая нагляднно демонстрирует как прочитать любые EXCEL файлы (как xls так и xlsx) а также mxl одновременно
Прикрепленные файлы:
ЧтениеИзEXCEL.epf
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(3) Прошу прощения не дописал, отправилось недописанным. Хотел предложить прочитать добавив параметр "ТипФайлаТабличногоДокумента" но при чтении он не используется, а только при записи. Здесь больше похоже на то, что при попытке чтения файл параллельно открыт и занят чем-то. Сейчас попробую понять из кода где ошибка.
(3) Вообще попробуйте для начала избавиться от разделения операций.
Сначала вы сохраняете файл на сервере потом его читаете в табдок и возвращаете.
Из кода видно что все происходит в контексте формы. Гораздо правильнее положить на форму реквизит "ТабДокументЕксель" с типом "ТабличныйДокумент" и уже на сервере организовать одну функцию которая будет сразу получив файл с клиента сохранять его на диск на сервере и сразу же читать значения в этот табличный документ, после чего вы уже обрабатываете его на сервере или как-то еще
Сначала вы сохраняете файл на сервере потом его читаете в табдок и возвращаете.
Из кода видно что все происходит в контексте формы. Гораздо правильнее положить на форму реквизит "ТабДокументЕксель" с типом "ТабличныйДокумент" и уже на сервере организовать одну функцию которая будет сразу получив файл с клиента сохранять его на диск на сервере и сразу же читать значения в этот табличный документ, после чего вы уже обрабатываете его на сервере или как-то еще
(7) Ваша проблема в Расширении файла. Вы читаете файл XLSX а присваиваете ему расширение:
ПолучитьИмяВременногоФайла("xls");
На сервере. У вас табличный документ пытается читать XLSX файл как XLS так как он зависим в данном случае от расширения.
Я прикрепил обработку которая нагляднно демонстрирует как прочитать любые EXCEL файлы (как xls так и xlsx) а также mxl одновременно
ПолучитьИмяВременногоФайла("xls");
На сервере. У вас табличный документ пытается читать XLSX файл как XLS так как он зависим в данном случае от расширения.
Я прикрепил обработку которая нагляднно демонстрирует как прочитать любые EXCEL файлы (как xls так и xlsx) а также mxl одновременно
Прикрепленные файлы:
ЧтениеИзEXCEL.epf
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот