Имя: Пароль:
1C
1С v8
УФ и Excel
0 Nikitos
 
01.12.11
14:05
День добрый.

Задача донельзя банальна. Нужно считать с листа экселя данные и затем из обработать.

Получаю СОМ-объект (любым способом), например :

Док = ПолучитьCOMОбъект("E:\Users.xlsx");

И пытаюсь получить данные из нужной мне ячейки:

ФИО = Док.WorkSheets(1).Cells(4, 4).Value;


Данные в ячейке стопроцентно есть. Но почему-то возвращается значение "Неопределено".

В чем может быть проблема? Натолкните на мысль. Первый раз с таким сталкиваюсь.
1 DrShad
 
01.12.11
14:09
я обычно через COMSafeAray получаю все что есть в файле и затем юзаю
2 Масянька
 
01.12.11
14:10
Excel    = СоздатьОбъект("Excel.Application");
Книга    = Excel.Application.Workbooks.Open(ИмяФайлаЗагрузки);
Лист    = Книга.WorkSheets(1);
мГТД    = СокрЛП(Строка(Лист.Cells(КонтекстДокумента.НомерСтроки + 1, 6).Value));
3 Nikitos
 
01.12.11
14:12
(2) ну 7ка мне ни к чему. Там у меня все работает.
4 Nikitos
 
01.12.11
14:13
(1) можно чуть поподробнее? чего-то я в хелпе не догоняю про это.
5 Федор Сумкин
 
01.12.11
14:13
Бывает (я так понимаю, зависит от Офиса, в котором создан файл), что адресация сдвигается на единицу...
И по строкам и поколонкам...
Тобишь, начинаеться не с "1", а с "0".
Соответственно, ты можешь "не попасть" в нужную ячейку...
Проверь это...
6 Федор Сумкин
 
01.12.11
14:14
(5) Единственное, по листам не помню... Может и Лист быть "сдвинут"
7 Nikitos
 
01.12.11
14:15
(5) нет. Пробовал двигать и листы и ячейки - все мимо :(
8 DrShad
 
01.12.11
14:17
(7) мыло давай - кину обработку чтоб наглядней было
9 чувак
 
01.12.11
14:18
Походу у автора 2007 эксел.
10 Nikitos
 
01.12.11
14:19
2010 офис
11 Федор Сумкин
 
01.12.11
14:19
(9) у меня 2010 - все работает....
12 DrShad
 
01.12.11
14:19
(10) у меня тоже :)
13 DrShad
 
01.12.11
14:20
(10) ну ты мыло даешь?
14 Масянька
 
01.12.11
14:20
(3) Ой-ой-ой! А какая разница? Ты, случайно про Open не забыл? И нумерация строк начинается с 2.
15 чувак
 
01.12.11
14:20
(3) Нет, тебе кагбе намекают про метод получения СОМ-объекта
16 Nikitos
 
01.12.11
14:21
(13) npopkov  собака яндек.ру
17 Nikitos
 
01.12.11
14:22
(14)(15) как бы я привел только один из способов того как получал объект
18 DrShad
 
01.12.11
14:24
(17) лови, юзай на здоровье
19 чувак
 
01.12.11
14:24
(17) А ты попробуй заполнят область в 10 строк и 10 столбцов с самого верха и немножко пошамани. Может после этого тоже пусто?
20 Nikitos
 
01.12.11
14:25
(18) спасибо. получил
21 DrShad
 
01.12.11
14:25
(20) если что стучись в аську
22 чувак
 
01.12.11
14:26
Автор, если получится, напиши. Чтоб тут не зависли мы.
23 Nikitos
 
01.12.11
14:28
(21) ок. спасибо
(22) обязательно
24 Масянька
 
01.12.11
14:29
Кстати, отличие 7 от 8:
Excel    = Новый COMОбъект("Excel.Application");
Книга    = Excel.Application.Workbooks.Open(ИмяФайлаЗагрузки);
Лист     = Книга.WorkSheets(1);

Работает - как швейцарские часы.
25 Nikitos
 
01.12.11
14:30
(24) да вот не прокатило почему-то...
это самый первый вариант был
26 Федор Сумкин
 
01.12.11
14:32
А может, у тя какой-то файл защищенный или запароленный...
Может, оно и не должно читаться.. ))
Эт я так - как гипотеза...
Попробуй создать новый файл, в него скопируй данные...
27 Масянька
 
01.12.11
14:33
(25) А случайно Excel открытый не висит? В диспетчере?
28 Nikitos
 
01.12.11
14:34
(26) да пробовал уже...
(27) Excel открытый точно не висит.
29 Buster007
 
01.12.11
14:35
ЭксельКом = ПолучитьCOMОбъект(ПутьКфайлу);
ЭксельЛист = ЭксельКом.Sheets("ИмяЛиста");
КакоеТоЗначение = ЭксельЛист.Cells(КонтекстДокумента.НомерСтроки + 1, 6).Value;
30 Масянька
 
01.12.11
14:36
(28) Уверен? При работе из 7/8 при возниквении ошибки после открытия Excel, он не ЗАКРЫВАЕТСЯ - проверено много-много раз. И в диспетчере висит. Принудительно надо закрывать.
31 Nikitos
 
01.12.11
14:37
(30) стопроцентно.
32 Масянька
 
01.12.11
14:38
Тады должно работать...
33 Nikitos
 
01.12.11
14:40
В общем и целом с подсказки (29) заработала вот такая конструкция:

Док = ПолучитьCOMОбъект("E:\Users.xlsx");
Лист = Док.Sheets(Док.Sheets.Item(1).Name);
ФИОУчастника = Лист.Cells(4, 4).Value;
34 Масянька
 
01.12.11
14:48
А лист имеет имя?
35 Nikitos
 
01.12.11
14:55
"Лист1" - как стандартно был Excel'ем обозван
36 Масянька
 
01.12.11
14:57
А листов в книге несколько?
37 Nikitos
 
01.12.11
15:03
3 по умолчанию.
Хотя я изначально обращался к конкретному листу:

ФИО = Док.WorkSheets(1).Cells(4, 4).Value;

все равно почему-то не прокатывало.
38 vmv
 
01.12.11
15:09
(0) наиболее вероятно, что вы патаетесь читать на клиенте то, что он(клиент) читать не имеет права.

разнесите код правильно между клиентом и сервером - это первое о чем нужно думать при работе в управляемой форме с сом и объектными типами данных
39 Nikitos
 
01.12.11
15:14
(38) читал на сервере, то, если что:
"Синтаксис:

ПолучитьCOMОбъект(<ИмяФайла>, <ИмяКлассаCOM>)

     ..................

Доступность:

Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение."
40 marvak
 
01.12.11
15:16
(0)
У меня один раз было, что  в  Док.WorkSheets(х).Cells(х,х).Value ничего не было, а данные были в  Док.WorkSheets(х).Cells(х,х).Value1 или в Док.WorkSheets(х).Cells(х,х).Value2, не помню точно уже, проверь есть ли эти свойства и что в них в твоем случае
41 Масянька
 
01.12.11
15:16
По-моему (найти не могу у себя) там была фишка (Excel), что если в книге несколько листов с информацией, то нужно использовать именно имя листа, а не номер.
42 Nikitos
 
01.12.11
15:18
(40) там есть Value2, но тоже было пусто
(41) ни разу не сталкивался с таким. Всегда смело использовал номер.
43 vmv
 
01.12.11
15:21
(39)

COMSafeArray.GetValue()

Доступность:
Сервер, толстый клиент, внешнее соединение

по сути на ваше

Док.WorkSheets(1).Cells(4, 4).Value

накладывается такое же ограничение, задумайтесь
44 vmv
 
01.12.11
15:23
(41) нет, идексы листов ексель в управлемой форме работают, проблема в вызовах конкретных ваших реализаций)
45 Nikitos
 
01.12.11
15:24
(43) Не согласен. COMSafeArray вообще нигде не использовал - это во-первых, а во-вторых, как написано в (39) читал на сервере.

Так что не согласен категорически.
46 vmv
 
01.12.11
15:27
Чаще всего у меня возникала ситуация Неопределено при чтении данных в упр. из сом именно по причине неверной локализации кода на сервере и клиенте.

у меня все, дерзайте
Основная теорема систематики: Новые системы плодят новые проблемы.