|
Работа с Екселем | ☑ | ||
---|---|---|---|---|
0
88g88
14.09.18
✎
15:49
|
Приветствую форумчане.
Подскажите как прочитать информацию из ексель файла. |
|||
1
88g88
14.09.18
✎
15:49
|
Функция ПрочитатьЛистExcel(ТЗ = Неопределено, ЛистЭксель = Неопределено, НомерПервойСтроки = 1, НомерПервойКолонки = 1, ВсегоСтрок = 0, ВсегоКолонок = 0) Экспорт
Если ЛистЭксель = Неопределено Тогда ЛистЭксель = ПолучитьCOMОбъект(,"Excel.Application"); КонецЕсли; Если ВсегоСтрок = 0 Тогда ВсегоСтрок = ЛистЭксель.Cells.SpecialCells(11).Row; КонецЕсли; Если ВсегоКолонок = 0 Тогда ВсегоКолонок = ЛистЭксель.Cells.SpecialCells(11).Column; КонецЕсли; Если ТЗ = Неопределено Тогда ТЗ = Новый ТаблицаЗначений; Для Счетчик = 1 По ВсегоКолонок Цикл ТЗ.Колонки.Добавить("Колонка"+Счетчик, Новый ОписаниеТипов("Строка")); КонецЦикла; КонецЕсли; Для Счетчик = НомерПервойСтроки По ВсегоСтрок Цикл НоваяСтрока = ТЗ.Добавить(); КонецЦикла; Область = ЛистЭксель.Range(ЛистЭксель.Cells(НомерПервойСтроки,НомерПервойКолонки), ЛистЭксель.Cells(ВсегоСтрок,ВсегоКолонок)); Данные = Область.Value.Выгрузить(); Для Счетчик = 0 По ВсегоКолонок-1 Цикл ТЗ.ЗагрузитьКолонку(Данные[Счетчик], Счетчик); КонецЦикла; ЛистЭксель = Неопределено; Возврат ТЗ; КонецФункции |
|||
2
user-ok
14.09.18
✎
15:50
|
тихо сам с собою я веду беседу....
|
|||
3
Скиурус
14.09.18
✎
15:50
|
Продолжайте наблюдения, нам ужасно интересно
|
|||
4
88g88
14.09.18
✎
15:50
|
Есть вот такой код с вот такой ошибкой.
{ВнешняяОбработка.СнабжениеМатериалы.Форма.Форма.Форма(635)}: Значение не является значением объектного типа (Cells) ВсегоСтрок = ЛистЭксель.Cells.SpecialCells(11).Row; |
|||
5
Tatitutu
14.09.18
✎
15:51
|
да не боись открывай
тоже самое почти что txt (Блокнот) или doc (Word) двойной клик и файл откроется дождись открытия и читай слева на право сверху вниз там может быть несколько листов (это фишка Excel) |
|||
6
88g88
14.09.18
✎
15:52
|
Ошибка проявляется при попытке обращения к строке.
Даже при явном указании строк при чте нии области то же самое |
|||
7
rphosts
14.09.18
✎
15:52
|
(4) а ему предшествует чтото типа
ЛистЭксель = ПолучитьCOMОбъект(,"Excel.Application"); |
|||
8
Tatitutu
14.09.18
✎
15:53
|
(4) идешь в конфигуратор и смотришь
где у тебя ЛистЭксель инициализируется |
|||
9
rphosts
14.09.18
✎
15:53
|
файл открыт, страничка файла выбрана?
|
|||
10
Tatitutu
14.09.18
✎
15:54
|
(9) Подожди...давай из далека
Эксель на компьютере установлен ? Где вызываешь эту процедуру? |
|||
11
88g88
14.09.18
✎
15:54
|
(7)
Если ЛистЭксель = Неопределено Тогда ЛистЭксель = ПолучитьCOMОбъект(,"Excel.Application"); КонецЕсли; |
|||
12
88g88
14.09.18
✎
15:54
|
(10) Внешняя обработка, база УПП
|
|||
13
88g88
14.09.18
✎
15:54
|
(10) да 2010 32 бит
|
|||
14
s03
14.09.18
✎
15:55
|
(11) Это ты само приложение Excel инициализируешь, а потом ещё файл открыть надо, лист выбрать/указать и только после этого строки/колонки
|
|||
15
s03
14.09.18
✎
15:56
|
в общем - в гугл, там примеров по самое небалуйся
|
|||
16
88g88
14.09.18
✎
15:59
|
(15) от туда и взял))) ток вот не работал с екселем. вот и наткнулся на непонимание.
|
|||
17
1Сергей
14.09.18
✎
15:59
|
Если лист один и файл небольшой, то можно просто загрузить файл в табличный документ. А потом по нему пробежаться
|
|||
18
88g88
14.09.18
✎
16:00
|
(14) как его указать? лист.
|
|||
19
s03
14.09.18
✎
16:02
|
(16) а только один пример нашел? второй-третий хотя бы взглянуть пробовал?
|
|||
20
1Сергей
14.09.18
✎
16:02
|
Вот, недавно что-то делал. Может, поможет
Ехель = ПолучитьCOMОбъект("", "Excel.Application"); //Ехель.Visible = 1; ... Попытка Ехель.Workbooks.Open(СтрокаФайлов.Путь + СтрокаФайлов.ИмяФайла); Щит = Воркбук.Sheets(1); Исключение СтрокаФайлов.Статус = "Не удалось открыть файл"; Продолжить; КонецПопытки; ЧислоСтолбцов = Щит.Cells(1,1).SpecialCells(11).Column; ЧислоСтрок = Щит.Cells(1,1).SpecialCells(11).Row; ... |
|||
21
1Сергей
14.09.18
✎
16:03
|
Пардон,
Воркбук = Ехель.Workbooks.Open(СтрокаФайлов.Путь + СтрокаФайлов.ИмяФайла); |
|||
22
Temai
14.09.18
✎
16:05
|
Держи еще кода, мне не жалко
Excel = Новый COMОбъект("Excel.Application"); Книга = Excel.WorkBooks.Open(Вложение); Excel.Visible = 0; Excel.ActiveWindow.DisplayWorkbookTabs = 1; Excel.ActiveWindow.TabRatio = 0.6; Лист = Книга.WorkSheets(1); ВсегоСтрок = Лист.Cells.SpecialCells(11).Row;//-кол-во строк всего ВсегоКолонок = Лист.Cells.SpecialCells(11).Column;//-кол-во колонок всего Для а = 1 По ВсегоСтрок Цикл Для б = 1 по ВсегоКолонок Цикл Если Лев(Лист.Cells(а, б).FormulaR1C1, 1) = "=" Тогда Лист.Cells(а, б).FormulaR1C1 = Лист.Cells(а, б).FormulaR1C1; КонецЕсли; Конеццикла; Конеццикла; FullName = Excel.ActiveWorkbook.FullName; Excel.DisplayAlerts = false; Excel.ActiveWorkbook.SaveAs(FullName, 51);// 18 - xls 97-2003; 51 - xlsx 2007-2013 //Excel.Visible = 1; // если нужно поработать дальше с книгой Excel.Application.Quit();// если просто выходим |
|||
23
MyNameIs
14.09.18
✎
16:06
|
ТабДок = Новый ТабличныйДокумент;
ТабДок.Прочитать("C:\temp\Таблица1.xlsx"); |
|||
24
1Сергей
14.09.18
✎
16:07
|
(23) как там по листам прыгать?
Раньше нельзя было. Уже завезли? |
|||
25
Temai
14.09.18
✎
16:08
|
(1) Твой код:
Если ЛистЭксель = Неопределено Тогда ЛистЭксель = ПолучитьCOMОбъект(,"Excel.Application"); КонецЕсли; Если ВсегоСтрок = 0 Тогда ВсегоСтрок = ЛистЭксель.Cells.SpecialCells(11).Row; КонецЕсли; Разумеется у тебя падает с ошибкой у тебя лист не определен, возьми код из 22 |
|||
26
d4rkmesa
14.09.18
✎
16:09
|
(0) Правильный подход в (17) и (23)
|
|||
27
s03
14.09.18
✎
16:10
|
(26) не факт, у ТС УПП, а значит, возможно 8.2
|
|||
28
MyNameIs
14.09.18
✎
16:15
|
(24) вроде свойство ВысотаТаблицы включает в себя все листы
|
|||
29
88g88
14.09.18
✎
16:16
|
(22) Попробую сейчас
|
|||
30
88g88
14.09.18
✎
16:23
|
(22) Во вложении что должно быть?
|
|||
31
Dimma
14.09.18
✎
16:23
|
(0)
Почитай http://www.sky1c.ru/node/88 или лучше http://catalog.mista.ru/public/341855/ если 1С старше 8.3.6 |
|||
32
88g88
14.09.18
✎
16:41
|
Как обход строк в нем делать?
|
|||
33
1Сергей
14.09.18
✎
16:41
|
(30) полное имя файла
|
|||
34
88g88
14.09.18
✎
16:44
|
Сделал тестовый файл, получил 1 столбец 5 сток.
То есть нашел, открыл, получил значение по строкам и столбцам. Вижу обработчик но что в нем не пойму Для а = 1 По ВсегоСтрок Цикл Для б = 1 по ВсегоКолонок Цикл Если Лев(Лист.Cells(а, б).FormulaR1C1, 1) = "=" Тогда Лист.Cells(а, б).FormulaR1C1 = Лист.Cells(а, б).FormulaR1C1; КонецЕсли; Конеццикла; Конеццикла; |
|||
35
88g88
14.09.18
✎
16:48
|
к примеру в обработчик написать сообщить и значение по ячейкам в столбце.
принцип обращения не пойму. |
|||
36
88g88
16.10.18
✎
13:24
|
(22) В продолжение темы.
Использовал код в сообщении 22. Локально под пользователем все работает. Но в регламентированном задании не отрабатывает код. ошибку выдает "Значение не является значением объектного типа (Application)" Сталкивался кто с подобным? подскажите как исправить. |
|||
37
Cool_Profi
16.10.18
✎
13:25
|
(36) У тебя (точнее у пользователя, под которым 1с-сервер крутится) правов нет. Или вообще на сервере ексельне установлен
|
|||
38
88g88
16.10.18
✎
13:27
|
(37) На сервере офисный пакет есть. все в порядке.
По вопросу прав в какую сторону копать? |
|||
39
88g88
16.10.18
✎
13:36
|
(38) пользователь 1с сервера USR1CV8 учетная запись не доменная.
|
|||
40
Cyberhawk
16.10.18
✎
13:46
|
Завязывай уже с СОМ-объектами
|
|||
41
ЦиркУехал
16.10.18
✎
13:52
|
это все уже прошлый век
теперь модно так берешь табличный документ со структурой выводишь его, в него копируешь из Экселя, и загружаешь табличны документ !! все круть неимоверная. никаких комов никаких Эксель подключений вообще быстро и удобно. |
|||
42
Cyberhawk
16.10.18
✎
13:55
|
(41) Это какая-то чешуя ручная
|
|||
43
ЦиркУехал
16.10.18
✎
13:56
|
(42) да норм, все быстро.
ctrl-a ctrl-c ctrl-v все! |
|||
44
1Сергей
16.10.18
✎
13:59
|
(43) поясни за "табличный документ со структурой"
ето как |
|||
45
88g88
16.10.18
✎
14:05
|
(41) (42) (43) (44)
Все не просто. в документе коды номенклатуры. Занесены они в последовательности согласно настроению внутреннего заказчика. То-есть никакой. 1С открывает файл, находит все коды, формирует запрос (из 15 вложенных запросов). После построчно проходит по всем кодам, ищет в запросе соответствия движений, и записывает их в соответственные строки и конкретные столбцы екселья. Не спрашивайте зачем, даже понять не пытаюсь. Заказчик просит, директор ножками топает :) |
|||
46
Cyberhawk
16.10.18
✎
14:19
|
Почему не пошлешь заказчика?
|
|||
47
ЦиркУехал
16.10.18
✎
14:32
|
(44) Пример есть в ЕРП и в УТ и в КА...
например Заказ Клиента /загрузить из внешнего файла. |
|||
48
88g88
16.10.18
✎
15:10
|
(46)
И уволиться нафиг! |
|||
49
Cyberhawk
16.10.18
✎
15:11
|
(48) Один из лучших способов поднять зп
|
|||
50
shadow_sw
17.10.18
✎
06:54
|
Попытка
Ex = новый COMОбъект("Excel.Application"); WB = Ex.Workbooks.Open(ИмяФайла); WS = WB.WorkSheets(1); Arr = WS.UsedRange.Value; WB.Close(0); Исключение Возврат; КонецПопытки; МассивКолонок = Arr.выгрузить(); ВсегоСтрок = (МассивКолонок.Получить(0).Количество())-1; Для Строка=0 по ВсегоСтрок Цикл |
|||
51
88g88
17.10.18
✎
11:08
|
В итоге...
Агент сервера 1С запускался под учетной записью 1С. Созданной по умолчанию при установки программного обеспечения. Создали нового пользователя с необходимыми правами в домене и папками доступа. После службе, Агент сервера 1с, указали что запускаться она будет от имени этого пользователя. Никаких дополнительных настроек подключения к SQL не понадобилось. Просто смена пользователя запускающего службу. После чего все проблемы исчезли. Как и писалось ранее офисный пакет необходим на сервере где стоит "сервер 1с", не путать с SQL. (Внимание: Название службы не точное, но что то в этом роде;)) Спасибо всем кто не скупился на дельные советы и поднимал настроение! |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |