|
УФ и 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
|
Чаще всего у меня возникала ситуация Неопределено при чтении данных в упр. из сом именно по причине неверной локализации кода на сервере и клиенте.
у меня все, дерзайте |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |