Excel workbooks open 1c ошибка

Ошибка работы 1С 8 с Excel: Ошибка при вызове метода контекста (Open): Произошла исключительная ситуация (Microsoft Office Excel): Нет доступа к файлу

Описание ошибки:
Проявила себя в клиент-серверной базе. Релиз платформы 1С: Предприятие 8.3.13.1644.

Найденные решения:

Полная формулировка ошибки:

{Доработки Документ.УстановкаЦенНоменклатуры.Форма.Доп_ФормаИмпортXLS.Форма(83)}: Ошибка при вызове метода контекста (Open): Произошла исключительная ситуация (Microsoft Office Excel): Нет доступа к файлу ‘C:\1C_Arhiv\Тест загрузка прайсов\[имя_файла].xlsx’. Это может быть вызвано одной из следующих причин.

• Имени файла или пути не существует.
• Файл используется другой программой.
• Имя книги, которую вы пытаетесь сохранить, совпадает с именем открытой в данный момент книги.

1C 8 Произошла исключительная ситуация (Microsoft Office Excel): Нет доступа к файлу .xlsx

1С 8 работа с Excel Ошибка при вызове метода контекста (Open)

При доработке в расширении для конфигурации 1С: Комплексная автоматизация 8, ред. 2, которая должна загружать данные из файлов Excel и при попытке выполнения в коде РабочаяКнига = ExcelПриложение.WorkBooks.Open(ФормаИмпортXLS.ИмяФайла);. Что удивительно, но в более ранней редакции Комплексной, 1.1, эта проблема не возникала в этом же коде, хотя обе базы на одном сервере.

Проблема оказалась нова для автора этого текста только в 2020 году, хотя самой проблеме достаточно много времени (более 5 лет на момент написания). В обсуждении данной ошибки на сайте infostart.ru «Ошибка открытия файла Excel на сервере» обсуждается несколько предложений по решению проблемы, среди которых наиболее популярный вариант решения. Так же там много попутных предложений по настройке прав на стороне сервера, если вдруг популярный вариант окажется не актуальным.

1C 8

Популярность этого варианта подтверждается исчерпывающим обсуждением и вот на этом ресурсе: «v8.x: [РЕШЕНО] Ошибка при вызове метода контекста (Open) при работе с Excel»

1C 8.2 8.3 Произошла исключительная ситуация (Microsoft Office Excel): Нет доступа к файлу

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

1C 8 Ошибка при вызове метода контекста (Open): Произошла исключительная ситуация

Оцените, помогло ли Вам предоставленное описание решения ошибки?




© www.azhur-c.ru 2014-2020. Все права защищены. Использование текстов и изображений с данной страницы без письменного разрешения владельца запрещено. При использовании материалов с данной страницы обязательно указание ссылки на данную страницу.

23-09-2020

Журавлев А.С.
(Сайт azhur-c.ru)

Ошибка открытия .xls листа для чтения ☑ 0

falselight

27.04.20

05:05

Подскажите пожалуйста, в чем может быть ошибка, открытия .xls листа?

    Попытка

        Excel = Новый COMОбъект(«Excel.Application»);

        Excel.WorkBooks.Open(Файл);

    Исключение

        Сообщить(«Ошибка при открытии файла с помощью Excel! Загрузка не будет произведена!»);

        Сообщить(ОписаниеОшибки());

        Возврат 0;

    КонецПопытки;

Выходит сообщение об ошибке, —

Ошибка при открытии файла с помощью Excel! Загрузка не будет произведена!

{ВнешняяОбработка.LOADxls.Форма.Форма.Форма(18)}: Ошибка при вызове конструктора (COMОбъект): -2147220994(0x800401FE): Приложение было запущено, но оно не зарегистрировало фабрику классов

1

falselight

27.04.20

05:20

Ошибка, на этой строке.

Excel = Новый COMОбъект(«Excel.Application»);

Запустил другой конфигуратор. Там такой ошибки нет.

2

falselight

27.04.20

05:39

Может что известное. Хотел узнать.

Пока работаю под другим конфигуратором.

3

Василий Алибабаевич

27.04.20

08:00

(0)

1. Если все расположено на клиентской машине — нужно установить нормальный Excel.

2. Если на сервере — п. 1 и проверить права пользователя ОС на создание COM объектов.

4

SleepyHead

27.04.20

08:37

(0) А что, читать через табличный документ уже нельзя?

5

falselight

27.04.20

11:01

(3) (4) Дело в том что не работает на одной из версий платформы. На которой я начал делать.

Вот и не понял. Открыл другую, так как не давно пробовал делать тоже самое. и там так же.

В начале же нужно прочитать с Эксель. Вот с него не читалось.

6

H A D G E H O G s

27.04.20

11:23

ЛивингСтар, ты ли это?

7

SleepyHead

27.04.20

11:27

(5) Ты вообще понял, что написано в (4)?

Читай через табличный документ,а  не ком-объект. И будет тебе счастье.

8

ChMikle

27.04.20

14:17

(0) База какая SQL или файловая и где выполняется >>Excel = Новый COMОбъект(«Excel.Application»); в процедуре

&НаКлиенте или &НаСервере ?

9

Ram_zes

27.04.20

14:20

(0) считай это дерьмо через табличный документ

10

Ram_zes

27.04.20

14:21

(0) и да

Тут рука профи нужна.

zmb@list.ru

Загрузка файла будет 1500 на карту стоить. Предоплата 100%.

11

falselight

27.04.20

16:39

(4) Да как то привык так вот эксель открывать при загрузке с него.

А не копировать и вставлять в табличный документ.

12

falselight

27.04.20

16:40

(8) На сервере конечно, как обычно.

&НаСервере

Функция СоздатьТЗсXLSЛистов(Файл)

    Таблица = Новый ТаблицаЗначений;

    Попытка

        Excel = Новый COMОбъект(«Excel.Application»);

        Excel.WorkBooks.Open(Файл);

    Исключение

        Сообщить(«Ошибка при открытии файла с помощью Excel! Загрузка не будет произведена!»);

        Сообщить(ОписаниеОшибки());

        Возврат 0;

    КонецПопытки;

    Попытка

        Excel.Sheets(1).Select();  

    Исключение

        Excel.ActiveWorkbook.Close();     

        Excel = 0;

        Сообщить(«Файл » + Строка(Файл)+» не соответствует необходимому формату! Первый лист не найден!»);

        ОтменитьТранзакцию();

        Возврат 0;

13

falselight

27.04.20

16:40

(8) В данный момент файловая.

14

falselight

27.04.20

16:42

(10) А как вы сообщение отредактировали свое????

15

ChMikle

27.04.20

16:43

(12) Попробуйте создать процедуру  &НаКлиенте и в процедуре открыть файл . Кстати Ексель стоит на компе, где пытаетесь  файл считать.

&НаКлиенте процедура()

  Попытка

        Excel = Новый COMОбъект(«Excel.Application»);

        Excel.WorkBooks.Open(Файл);

    Исключение

        Сообщить(«Ошибка при открытии файла с помощью Excel! Загрузка не будет произведена!»);

        Сообщить(ОписаниеОшибки());

        Возврат 0;

    КонецПопытки;

16

falselight

27.04.20

17:13

(15) Тут вопрос был, почему под одной платформой не работает.

Идет ошибка что в (0). А под другой работает.

Я этого не мог понять. Может что с платформой.

Попробую ваш совет.

А ещё на сервере такой метод может не сработать, вроде как была как то у меня информация. Там как то иначе нужно.

Может это вот этот ваш совет про это. Я там встретился с тем что на сервере. делают копированием в табличный документ.

17

ChMikle

27.04.20

17:52

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

18

Cthulhu

27.04.20

18:07

(17): на клиенте бывает (штатно) таблицазначений? и она норм сериализуется при передаче на сервер???

19

Timon1405

27.04.20

18:16

20

Cthulhu

27.04.20

18:46

(19): метод «Прочитать» для таб.документов появился совсем недавно (в 15-м что ли релизе?)

ну и там (по ссылке) в принципе в коде не учтено, что книга читается в таб.документ с областями, имена которых совпадают с именами листов книги….

21

Cthulhu

27.04.20

18:48

(10): опс. пардон, ялох…

просто на практике недавно нарвался, что «прочитать» нормально работал на 15-м — и при этом напрочь отказывался на 14-м… пардон, про «недавно№ не читайте, по ссылке на 9-м проверено…

22

falselight

28.04.20

10:00

В файловой базе загрузка прошла успешно.

Сейчас перенес на сервер. На удаленный рабочий стол, там не работает. Ошибка http://joxi.ru/823qePbHDq86wr

тут нужно делать как в (19) или (15) или (4) советуют?

Ошибка при загрузке http://joxi.ru/KAx3R4VT1LKM62

и http://joxi.ru/823qePbHDq86wr

23

falselight

28.04.20

10:02

Ошибка на Колонки, на какие то из этих процедур видимо

&НаСервере

Функция СоздатьТЗсXLSЛистов(Файл)

    Таблица = Новый ТаблицаЗначений;

    Попытка

        Excel = Новый COMОбъект(«Excel.Application»);

        Excel.WorkBooks.Open(Файл);

    Исключение

        Сообщить(«Ошибка при открытии файла с помощью Excel! Загрузка не будет произведена!»);

        Сообщить(ОписаниеОшибки());

        Возврат 0;

    КонецПопытки;

    Попытка

        Excel.Sheets(1).Select();  

    Исключение

        Excel.ActiveWorkbook.Close();     

        Excel = 0;

        Сообщить(«Файл » + Строка(Файл)+» не соответствует необходимому формату! Первый лист не найден!»);

        ОтменитьТранзакцию();

        Возврат 0;

    КонецПопытки;    

    Версия = Лев(Excel.Version,Найти(Excel.Version, «.») — 1);

    Если Версия = «8» тогда

        ФайлСтрок   = Excel.Cells.CurrentRegion.Rows.Count;

        ФайлКолонок = Макс(Excel.Cells.CurrentRegion.Columns.Count, 13);

    Иначе

        ФайлСтрок   = Excel.Cells(1, 1).SpecialCells(11).Row;

        ФайлКолонок = Excel.Cells(1, 1).SpecialCells(11).Column;  

    Конецесли;

    Сч = 1;    

    //

    Таблица.Колонки.Добавить(«НоваяСтрока», ,»НоваяСтрока»);

    //

    Пока ЗначениеЗаполнено(Excel.Cells(1, Сч).Text) Цикл

        ИмяКолонки        = Excel.Cells(1, Сч).Text;

        //

        ИмяБезПробелов = СтрЗаменить(ИмяКолонки, » «, «»);     //

        ИмяБезПробелов = СтрЗаменить(ИмяБезПробелов, «(«, «»); //

        ИмяБезПробелов = СтрЗаменить(ИмяБезПробелов, «)», «»); //

        ИмяБезПробелов = СтрЗаменить(ИмяБезПробелов, «.», «»); //

        ИмяБезПробелов = СтрЗаменить(ИмяБезПробелов, «,», «»); //

        //

        ИмяКолонки     = СтрЗаменить(ИмяКолонки, » «, «»); //

        ИмяКолонки     = СтрЗаменить(ИмяКолонки, «(«, «»); //

        ИмяКолонки     = СтрЗаменить(ИмяКолонки, «)», «»); //

        ИмяКолонки     = СтрЗаменить(ИмяКолонки, «.», «»); //

        ИмяКолонки     = СтрЗаменить(ИмяКолонки, «,», «»); //

        //

        ИмяБезПробелов = СтрЗаменить(ИмяБезПробелов,»/»,»»);

        ИмяКолонки     = СтрЗаменить(ИмяКолонки,»/»,»»);

        НоваяКолонка   = Таблица.Колонки.Добавить(ИмяБезПробелов, ,ИмяКолонки);

        Сч                = Сч + 1;

    КонецЦикла;

    НомерСтроки = 1;

    Для НС = 2 по ФайлСтрок Цикл  

        НоваяСтрока                = Таблица.Добавить();        

        //

        НоваяСтрока[«НоваяСтрока»] = НомерСтроки;            

        //

        Для НомерКолонки = 1 по Таблица.Колонки.Количество()-1 Цикл

            ТекущееЗначение         = Excel.Cells(НС, НомерКолонки).Text;

            ИмяКолонки                = Таблица.Колонки[НомерКолонки].Имя;             

            НоваяСтрока[ИмяКолонки] = ТекущееЗначение;            

        КонецЦикла;

        НомерСтроки = НомерСтроки + 1;

    КонецЦикла;  

    //

    Excel.DisplayAlerts = 0;

    Excel.ActiveWorkbook.Close();

    Excel.Quit();

    Excel.DisplayAlerts = 1;

    //

    Возврат Таблица;

КонецФункции

//

&НаСервере

Процедура СоздатьТаблицуНаФорме(ТзДляСоздания)

    //

    Таблица          = РеквизитФормыВЗначение(«Товары»);

    МассивРеквизитов = Новый Массив;

    Для Каждого Колонка Из Таблица.Колонки Цикл

        МассивРеквизитов.Добавить(«Товары.» + Колонка.Имя);      

    КонецЦикла;

    //

    ИзменитьРеквизиты(,МассивРеквизитов);

    //

    ЭлементТаблица = Элементы.Найти(«Товары»);

    Если ЭлементТаблица <> Неопределено Тогда

        Элементы.Удалить(ЭлементТаблица);      

    КонецЕсли;    

    //

    ЭлементТаблица             = Элементы.Добавить(«Товары», Тип(«ТаблицаФормы»), Элементы.Группа7);

    ЭлементТаблица.ПутьКДанным = «Товары»;

    ЭлементТаблица.Отображение = ОтображениеТаблицы.Список;  

    //

    МассивРеквизитов.Очистить();

    Для Каждого Колонка ИЗ ТзДляСоздания.Колонки Цикл

        МассивТипов = Новый Массив;

        МассивТипов.Добавить(Колонка.ТипЗначения);

        НоваяКолонка = Новый РеквизитФормы(Колонка.Имя, Новый ОписаниеТипов(МассивТипов), «Товары»);

        МассивРеквизитов.Добавить(НоваяКолонка);

    КонецЦикла;

    //

    ИзменитьРеквизиты(МассивРеквизитов);

    ЗначениеВРеквизитФормы(ТзДляСоздания, «Товары»);

    //

    ЭлементТЗ = Элементы.Товары;

    Для Каждого Колонка ИЗ ТзДляСоздания.Колонки Цикл

        НовыйЭлементФормы             = Элементы.Добавить(«Товары» + Колонка.Имя, Тип(«ПолеФормы»), ЭлементТЗ);

        НовыйЭлементФормы.Вид         = ВидПоляФормы.ПолеВвода;

        НовыйЭлементФормы.ПутьКДанным = «Товары.» + Колонка.Имя;

    КонецЦикла;

КонецПроцедуры

//

24

ChMikle

28.04.20

10:26

(22) с правами на доступ к екселю (или он вообще не установлен на компе гдк стоит сервер 1С) у пользователя под которым запущен сервер 1С

25

falselight

28.04.20

10:47

(24) Эксель стоит. Открывается. Видимо там принцип работы какой то другой. Отличный от того что выполняется в файловой версии на персональном компьютере.

26

falselight

28.04.20

10:50

(25) Принцип обработки файла кодом из 1с, я имею ввиду

27

ChMikle

28.04.20

10:51

(25) когда в серверной версии вы на сервере запускаете работу с екселем, то создается сом объект на компе где стоит сервер 1С и под правами пользователя , под которыми он запущен.

28

ChMikle

28.04.20

10:53

+(27) 1Ссервер м.б. запущен не под тем пользователем, под которым вы заходите для проверки прав доступа к екселю

29

falselight

28.04.20

11:01

(28) Да на этом сервере у меня органиченные права. то есть получается этот код не отработает там?

Как можно выйти из положения?

30

falselight

28.04.20

11:05

(17) &НаКлиенте не доступна     Таблица = Новый ТаблицаЗначений;

31

ChMikle

28.04.20

11:06

(29) администратор системного подключать и проверять права именно на доступ к екселю под пользователем , под которым сервер 1С  запущен

(30) К екселю подключается из под разных платформ ?

32

ChMikle

28.04.20

11:15

(30) на форме создайте элемент ТаблицаЗначений , колонки добавьте и потом перебором переписывайте

33

falselight

28.04.20

11:25

(31) На сервере под удаленным рабочим столом одна платформа.

(32) И на сервере не работает отладка, не посмотрю как выполняется код. Одно видно что ругается на Колонки сначала (22) .

34

falselight

28.04.20

11:40

(32) А как мне эксель то открыть?

35

falselight

28.04.20

12:56

Проверил, да, на клиенте может эксель открыть. Почему тогда такая проблема, не совсем пойму, из за чего.

36

ikea

28.04.20

13:10

(35) А как файл Excel на сервер с клиента передается? Через временное хранилище?

37

Мимохожий Однако

28.04.20

13:18

Повторюсь. Не надо СОМ. Используй чтение в табличный документ из файла методами 1С.

38

Cthulhu

28.04.20

13:29

если уж так хоццца через com

попробуй включи пользователя, под которым запускается сервер приложений 1С Предприятия 8,  в группу Distributed COM Users — если не поможет, то дополнительно включить его в группу локальных администраторов.

(о результате — отпишись?)

39

Cthulhu

28.04.20

13:31

(36): тогда бы ошибка была про файл. который не найден —  не на этапе создания com-объекта, а при открытии файла….

40

Cthulhu

28.04.20

13:33

41

falselight

28.04.20

13:39

(37) Буду пробовать сейчас этот вариант.

Ещё раз. спасибо за мотивацию.

42

falselight

28.04.20

16:00

После того как с табличного документа я заполню &НаСервере таблицу значений,

где мне заполнять табличную часть на форме обработки? &НаКлиенте или на &НаСервере ?

А то утомился, подумал спрошу дельный совет. С табличного документа, я заполнил таблицу значений на сервере. Дальше?

Что бы на форме заполнить.

Что бы это все работало на удаленном рабочем столе, на сервере в базе ms sql server.

43

Фрэнки

28.04.20

16:09

(42) Так ты на Сервере заполняй сразу в Объект, который из реквизита формы в значение получен. А затем обратно из значения в реквизит формы

у тебя что нет типовой? там же есть такое уже готовое, что подсмотреть можно.

44

falselight

28.04.20

16:15

(43) Буду сейчас пробовать!

45

falselight

28.04.20

16:15

(43) То есть сама таблица значений что есть у обработки, и положена на форму обработки для визуального отображения не доступна &НаСервере ?

46

H A D G E H O G s

28.04.20

16:17

Ахахаха, жесть жестяночка.

47

Cthulhu

28.04.20

16:19

(45): во-первых, реквизит №тз» и объект «тз» — это две большие разницы.

ну и во-вторых — а вы попробуйте эту «тз» передать в параметре на сервер… а потом расскажите…

(46) ага. :)))

48

falselight

28.04.20

16:21

Смысл в том, что получив таблицу значений с эксель

хочу вывести это на форму. Вот и узнаю что бы без проб, как сразу правильно делать?

http://joxi.ru/RmznO4eiRZ5wVm

Намек хотя бы.

49

Фрэнки

28.04.20

16:27

(48) такая ТЗ, как у тебя на картинке видна = реквизит формы. Поэтому нужно через

ТекущийОбъект = РеквизитФормыВЗначение(«Книги»);

ЗдесьПишемСвойКодЗаполнения(ТекущийОбъект);

ЗначениеВРеквизитФормы(ТекущийОбъект, «Книги»);



тогда увидишь свою заполненную тз на форме

50

ChMikle

28.04.20

17:01

(48) делал загрузку с формы, поищу обработку , если найду вышлю

51

Мимохожий Однако

28.04.20

17:12

(48) достаточно поместить табличное поле на форму, связанную с прочитанной таблицей. Посмотри типовую обработку по загрузке данных из табличного документа.

52

ChMikle

28.04.20

17:29

Куда выслать обработку ?

53

falselight

29.04.20

04:04

(52) Спасибо. Я сам делаю тут. Все равно по загрузке свои особенности.

Или вы тоже грузили в УТ 11.4

Вес товара с упаковкой (г), г    

Высота предмета, см    

Высота упаковки, см    

Глубина предмета, см    

Глубина упаковки, см    

Ширина предмета, см    

Ширина упаковки, см

54

falselight

29.04.20

04:35

(52) Ну, а если есть интересные какие примеры. Можно сюда. MyRezume2020@yandex.ru

55

falselight

29.04.20

04:59

На сервере удалось прочитать, вот таким кодом.

Сейчас уже и дальше можно обрабатывать.

//

&НаКлиенте

Процедура ФайлДляЗагрузкиНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)

    СтандартнаяОбработка = ложь;

    ВыбратьФайл(«ФайлДляЗагрузки»);

КонецПроцедуры

//

&НаКлиенте

Процедура ВыбратьФайл(ФайлДляЗагрузки)

    #Если ВебКлиент Тогда

    Результат = ПодключитьРасширениеРаботыСФайлами();

    Если Не Результат Тогда

        УстановитьРасширениеРаботыСФайлами();

        Если Не ПодключитьРасширениеРаботыСФайлами() Тогда

            ВызватьИсключение «Ошибка. Ваш браузер не поддерживает работу с файлами.»;

        КонецЕсли;

    КонецЕсли;

    #КонецЕсли

    Диалог                         = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);

    Диалог.Заголовок             = «Выберите файл»;

    Диалог.ПолноеИмяФайла         = «»;

    Диалог.МножественныйВыбор     = Ложь;

    Диалог.Фильтр               = «Документ Excel (*.xls, *.xlsx)|*.xls;*.xlsx|»;

    Оповещение                  = Новый ОписаниеОповещения(«ОповещениеПослеВыбораФайлаДляОткрытия», ЭтотОбъект, ФайлДляЗагрузки);    

    Диалог.Показать(Оповещение);

КонецПроцедуры

//

&НаКлиенте

Процедура ОповещениеПослеВыбораФайлаДляОткрытия(ВыбранныеФайлы, ДопПараметры) Экспорт

    Если ТипЗнч(ВыбранныеФайлы) = Тип(«Массив»)    Тогда

        Объект[ДопПараметры] = ВыбранныеФайлы[0];

    КонецЕсли;

КонецПроцедуры

//

&НаКлиенте

Процедура Прочитать(Команда)

    Если Не ЗначениеЗаполнено(Объект.ФайлДляЗагрузки) Тогда

        Сообщить(«Не указан файл. Обработка не выполнена.»);

        Возврат;

    КонецЕсли;    

    ВыбФайл = Новый Файл(Объект.ФайлДляЗагрузки);

    Если Не ВыбФайл.Существует() Тогда

        Сообщить(«Файл не существует!»);

        Возврат;

    КонецЕсли;  

    ТДВыгрузка = Новый ТабличныйДокумент;

    мПрочитатьТабличныйДокументИзExcel(ТДВыгрузка, Объект.ФайлДляЗагрузки, 1);

    ПрочитатьНаСервере(ТДВыгрузка);

КонецПроцедуры

//

&НаКлиенте

Функция мПрочитатьТабличныйДокументИзExcel(ТабличныйДокумент, ИмяФайла, НомерЛистаExcel = 1) Экспорт

    xlLastCell = 11;

    ВыбФайл    = Новый Файл(ИмяФайла);

    Если НЕ ВыбФайл.Существует() Тогда

        Сообщить(«Файл не существует!»);

        Возврат Ложь;

    КонецЕсли;

    Попытка

        Excel = Новый COMОбъект(«Excel.Application»);

        Excel.WorkBooks.Open(ИмяФайла);

        ExcelЛист = Excel.Sheets(НомерЛистаExcel);

    Исключение

        Сообщить(«Ошибка. Возможно неверно указан номер листа книги Excel.»);

        Возврат Ложь;

    КонецПопытки;

    SpecialCells = Excel.Sheets(НомерЛистаExcel).Cells.SpecialCells(11);

    RowCount     = SpecialCells.Row;

    ColumnCount  = SpecialCells.Column;

    Для Column = 1 По ColumnCount Цикл

        ТабличныйДокумент.Область(«C» + Формат(Column, «ЧГ=»)).ШиринаКолонки = ExcelЛист.Columns(Column).ColumnWidth;

    КонецЦикла;

    Для Row = 1 По RowCount Цикл

        Для Column = 1 По ColumnCount Цикл

            Если ТипЗнч(ExcelЛист.Cells(Row,Column).Value) = Тип(«Число») Тогда

                ЗначениеЗамена = СтрЗаменить(ExcelЛист.Cells(Row,Column).Value, » «, «»);

            Иначе

                ЗначениеЗамена = ExcelЛист.Cells(Row,Column).Value

            КонецЕсли;    

            ТабличныйДокумент.Область(«R» + Формат(Row, «ЧГ=») +»C» + Формат(Column, «ЧГ=»)).Текст = ЗначениеЗамена;

        КонецЦикла;

    КонецЦикла;

    Excel.WorkBooks.Close();

    Excel = 0;

    Возврат Истина;

КонецФункции //

//

&НаСервере

Процедура ПрочитатьНаСервере(Макет)

    ТЗсXLS = Новый ТаблицаЗначений;

    ТЗсXLS.Колонки.Добавить(«», Новый ОписаниеТипов(«Строка»));

    ТЗсXLS.Колонки.Добавить(«OzonID»,                Новый ОписаниеТипов(«Строка»));

    ТЗсXLS.Колонки.Добавить(«Баркод»,                Новый ОписаниеТипов(«Строка»));

    ТЗсXLS.Колонки.Добавить(«Наименование»,        Новый ОписаниеТипов(«Строка»));

    ТЗсXLS.Колонки.Добавить(«Автор»,                Новый ОписаниеТипов(«Строка»));

    ТЗсXLS.Колонки.Добавить(«Год»,                    Новый ОписаниеТипов(«Строка»));

    ТЗсXLS.Колонки.Добавить(«Издательство»,        Новый ОписаниеТипов(«Строка»));

    ТЗсXLS.Колонки.Добавить(«Артикул»,                Новый ОписаниеТипов(«Строка»));

    ТЗсXLS.Колонки.Добавить(«Комплектация»,        Новый ОписаниеТипов(«Строка»));

    ТЗсXLS.Колонки.Добавить(«ВесТовараСУпаковкой», Новый ОписаниеТипов(«Строка»));

    ТЗсXLS.Колонки.Добавить(«ВысотаПредмета»,        Новый ОписаниеТипов(«Строка»));

    ТЗсXLS.Колонки.Добавить(«ВысотаУпаковки»,        Новый ОписаниеТипов(«Строка»));

    ТЗсXLS.Колонки.Добавить(«ГлубинаПредмета»,        Новый ОписаниеТипов(«Строка»));

    ТЗсXLS.Колонки.Добавить(«ГлубинаУпаковки»,        Новый ОписаниеТипов(«Строка»));

    ТЗсXLS.Колонки.Добавить(«ШиринаПредмета»,        Новый ОписаниеТипов(«Строка»));

    ТЗсXLS.Колонки.Добавить(«ШиринаУпаковки»,        Новый ОписаниеТипов(«Строка»));

    ТЗсXLS.Колонки.Добавить(«Количество»,            Новый ОписаниеТипов(«Строка»));

    ТЗсXLS.Колонки.Добавить(«Цена»,                Новый ОписаниеТипов(«Строка»));

    ТЗсXLS.Колонки.Добавить(«НомерСтроки»,           Новый ОписаниеТипов(«Строка»));

    //

    Для Стр = 2 По Макет.ВысотаТаблицы Цикл

        НоваяСтрока                     = ТЗсXLS.Добавить();        

        НоваяСтрока.OzonID                 = СокрЛП(Макет.Область(Стр, 1).Текст);

        НоваяСтрока.Баркод                 = СокрЛП(Макет.Область(Стр, 2).Текст);

        НоваяСтрока.Наименование         = СокрЛП(Макет.Область(Стр, 2).Текст);

        НоваяСтрока.Автор                 = СокрЛП(Макет.Область(Стр, 2).Текст);

        НоваяСтрока.Год                 = СокрЛП(Макет.Область(Стр, 2).Текст);

        НоваяСтрока.Издательство         = СокрЛП(Макет.Область(Стр, 2).Текст);

        НоваяСтрока.Артикул             = СокрЛП(Макет.Область(Стр, 2).Текст);

        НоваяСтрока.Комплектация         = СокрЛП(Макет.Область(Стр, 2).Текст);

        НоваяСтрока.ВесТовараСУпаковкой = СокрЛП(Макет.Область(Стр, 2).Текст);

        НоваяСтрока.ВысотаПредмета         = СокрЛП(Макет.Область(Стр, 2).Текст);

        НоваяСтрока.ВысотаУпаковки         = СокрЛП(Макет.Область(Стр, 2).Текст);

        НоваяСтрока.ГлубинаПредмета     = СокрЛП(Макет.Область(Стр, 2).Текст);

        НоваяСтрока.ГлубинаУпаковки     = СокрЛП(Макет.Область(Стр, 2).Текст);

        НоваяСтрока.ШиринаПредмета         = СокрЛП(Макет.Область(Стр, 2).Текст);

        НоваяСтрока.ШиринаУпаковки         = СокрЛП(Макет.Область(Стр, 2).Текст);

        НоваяСтрока.Количество             = СокрЛП(Макет.Область(Стр, 2).Текст);

        НоваяСтрока.Цена                 = СокрЛП(Макет.Область(Стр, 2).Текст);        

        НоваяСтрока.НомерСтроки         = Стр;

    КонецЦикла;

    //

    ТзКнигиНаФорме = РеквизитФормыВЗначение(«Книги»);

    Для Каждого СтрТЗсXLS Из ТЗсXLS Цикл

        НоваяСтрока                     = ТзКнигиНаФорме.Добавить();        

        НоваяСтрока.НомерСтроки         = СокрЛП(СтрТЗсXLS.НомерСтроки-1);        

        НоваяСтрока.OzonID                 = СокрЛП(СтрТЗсXLS.OzonID);

        НоваяСтрока.Баркод                 = СокрЛП(СтрТЗсXLS.Баркод);

        НоваяСтрока.Наименование         = СокрЛП(СтрТЗсXLS.Наименование);

        НоваяСтрока.Автор                 = СокрЛП(СтрТЗсXLS.Автор);

        НоваяСтрока.Год                 = СокрЛП(СтрТЗсXLS.Год);

        НоваяСтрока.Издательство         = СокрЛП(СтрТЗсXLS.Издательство);

        НоваяСтрока.Артикул             = СокрЛП(СтрТЗсXLS.Артикул);

        НоваяСтрока.Комплектация         = СокрЛП(СтрТЗсXLS.Комплектация);

        НоваяСтрока.ВесТовараСУпаковкой = СокрЛП(СтрТЗсXLS.ВесТовараСУпаковкой);

        НоваяСтрока.ВысотаПредмета         = СокрЛП(СтрТЗсXLS.ВысотаПредмета);

        НоваяСтрока.ВысотаУпаковки         = СокрЛП(СтрТЗсXLS.ВысотаУпаковки);

        НоваяСтрока.ГлубинаПредмета     = СокрЛП(СтрТЗсXLS.ГлубинаПредмета);

        НоваяСтрока.ГлубинаУпаковки     = СокрЛП(СтрТЗсXLS.ГлубинаУпаковки);

        НоваяСтрока.ШиринаПредмета         = СокрЛП(СтрТЗсXLS.ШиринаПредмета);

        НоваяСтрока.ШиринаУпаковки         = СокрЛП(СтрТЗсXLS.ШиринаУпаковки);

        НоваяСтрока.Количество             = СокрЛП(СтрТЗсXLS.Количество);

        НоваяСтрока.Цена                 = СокрЛП(СтрТЗсXLS.Цена);        

    КонецЦикла;

    ЗначениеВРеквизитФормы(ТзКнигиНаФорме, «Книги»);    

КонецПроцедуры

//

Nikoly
16.07.2011 15:31 Прочитано: 22244

При работе на сервере, регламентного задания, обработка открывает через Excel = Новый COMОбъект(«Excel.Application»); Excel.Application.Workbooks.Open(ИмяФайла) документ, мне выдается ошибка:
Ошибка при вызове метода контекста (Open): Произошла исключительная ситуация (Microsoft Office Excel): Нет доступа к файлу ‘C:\1С\НовыйДокумент.xls’. Это может быть вызвано одной из следующих причин.
• Имени файла или пути не существует.
• Файл используется другой программой.
• Имя книги, которую вы пытаетесь сохранить, совпадает с именем открытой в данный момент книги.
Если запускаю обработку не в регламентном задании, то все выполняется без ошибок. Подскажите что это за ошибка и как мне читать данные из Excel в регламентном задании?


Изменено 16.07.11 15:32:46 по причине: Другая категория

Yandex
Возможно, вас также заинтересует

Реклама на портале

Nikoly
19.07.2011 18:27 Ответ № 1

http://forum.mista.ru/topic.php?id=522217
Создать папку C:\Windows\SysWOW64\config\systemprofile\Desktop и C:\Windows\System32\config\systemprofile\Desktop (в зависимости от разрядности вашей системы)

Подсказка: Щелкнув по значку (справа от названия вопроса), вы получите список ответов на похожие вопросы!

Добрый день! Дайте права пользователю 1cv83 на Microsoft Excel Application в Службах компонент.

Нажмите на “Пуск/Start”-> “Панель управления/Control Panel”

Далее “АдминистрированиеAdministrative Tools”-> “Службы компонентов/Component Services”

Откройте папку “Службы компонентов/ Component Services” и выберите “Настройка DCOM/DCOM Config”

Среди служб выберите “Microsoft Excel Application” и откройте его свойсва, вкладку “Безопасность/Security” и в разделе “Разрешения на запуск и активацию/Launch and Activation Permissions” настроить разрешения – выбрать “Настроить/Customize” и нажать “Изменить/Edit”.

Добавьте пользователя 1cv83 и нажмите “Применить/Apply” в свойствах безопасности компоненты.

Заключительным этапам будет создание папки с соответствующими правами пользователю 1cv83

C:\Windows\System32\config\systemprofile\Desktop – для Microsoft Office 2010

C:\Windows\SysWOW64\config\systemprofile\Desktop – для Microsoft Office 2007 (windows server x64)

C:\Windows\System32\config\systemprofile\Desktop – для Microsoft Office 2007 (windows server x86)

Желаем удачи и скорейшего решения проблемы!

Произошла исключительная ситуация (Microsoft Office Excel): Невозможно получить свойство Open класса Workbooks

При разработке в 1С, при попытке выполнить открытие COM-объекта Microsoft Excel на серверной базе данных 1С появляется ошибка «Произошла исключительная ситуация (Microsoft Office Excel): Невозможно получить свойство Open класса Workbooks».

Запуск обработки, вызвавшей данную ошибку, производится на серверной операционной системе Microsoft Windows 2012. Также возможна при запуске на ОС Windows 2008 Server. Права пользователя полные. Причем, запуск на операционной системе не относящейся к семейству серверных происходит без возникновения исключительной ситуации.

Сообщить(«Выгрузка в файл Microsoft Excel…»);

Путь= КаталогВременныхФайлов() + «\FILENAME.xls»;

Файл= Новый Файл(Путь);

Если Файл.Существует() = 0 Тогда

ТабДокумент = Новый ТабличныйДокумент;

ТабДокумент.Записать(Путь, ТипФайлаТабличногоДокумента.XLS);

КонецЕсли;

Попытка

ExcelПриложение = Новый COMОбъект(«Excel.Application»);

Исключение

Сообщить(«Ошибка при загрузке Microsoft Excel.» + Символы.ПС + ОписаниеОшибки(), СтатусСообщения.Внимание);

Возврат;

КонецПопытки;

ExcelФайл = ExcelПриложение.WorkBooks.Open(Путь);

ExcelЛист = ExcelФайл.Worksheets(1);

Возникновение ошибки происходит на предпоследней строке кода.

Решение для устранения исключительной ситуации:

Для нормальной работы MS Office, папка «Desktop» должна находиться в каталоге «systemprofile» системного каталога ОС. Причем, Windows 2003 имеет в своем составе такие папки.

Поэтому необходимо их создать в каталоге «Windows» операционной системы.

— для Windows 2008 Server x64:

C:\Windows\SysWOW64\config\systemprofile\Desktop

— для Windows 2008 Server x86:

C:\Windows\System32\config\systemprofile\Desktop

Оцените статью:

Загрузка…

Если Вы заметили ошибку, то выделите ее мышью и нажмите Ctrl+Enter

Понравилась статья? Поделить с друзьями:
  • Excel vba проверка на ошибку
  • Excel vba поиск ошибок
  • Excel vba ошибка при открытии файла
  • Excel vba ошибка поддержки безопасных каналов
  • Excel vba если ошибка то пропустить