![]() |
![]() |
![]() |
|
Можно ли засосать Excel лист в таблицу значений, быстро!? | ☑ | ||
---|---|---|---|---|
0
Гений 1С
гуру
05.07.07
✎
16:51
|
Потому что через Excel.Application (OLE) в час по чайной ложке.
|
|||
1
Immortal
05.07.07
✎
16:51
|
через ADO ещё можно попробовать
|
|||
2
Лис в курятнике
05.07.07
✎
16:53
|
ключевое слово "засосать", умеючи то долго....
|
|||
3
asady
05.07.07
✎
16:56
|
(0) абрахамс давал идею через comsafearray
быстрее уж быть не может |
|||
4
Гений 1С
гуру
05.07.07
✎
17:03
|
(3) где!
|
|||
5
Матрейя
05.07.07
✎
17:05
|
4. www.itpb.ru/forum4 посиом пройдись.....
|
|||
6
vde69
05.07.07
✎
17:08
|
самый быстрый способ - через ADO
только он местами сложнее.... по скольку поддерживает доступ только к данным, а не к обьектам |
|||
7
Гений 1С
гуру
05.07.07
✎
17:09
|
(6) а мне и нужны только данные
|
|||
8
asady
05.07.07
✎
17:10
|
(4) ну поищи - у меня в архивах есть но они дома - только завтра что-то выложу.
|
|||
9
asady
05.07.07
✎
17:11
|
(0) вот кстати способ через ВК
http://www.infostart.ru/projects/621/?&desc=1&ref=1173 |
|||
10
vde69
05.07.07
✎
17:11
|
(7) тогда ADO, + в нем можно использовать запросы SQL и получать сразу готовые выборки
|
|||
11
Гений 1С
гуру
05.07.07
✎
17:13
|
(9) ВК не катит.
|
|||
12
Гений 1С
гуру
05.07.07
✎
17:13
|
(10) Кинь пример
|
|||
13
Гений 1С
гуру
05.07.07
✎
17:14
|
Странно, что в 1це есть метод записи табличного документа в Эксель, но нет обратной операции.
|
|||
14
Babay
05.07.07
✎
17:15
|
Пожно через ODBC драйвер. Строка подключения:
Driver={Microsoft Excel Driver (*.xls)};DriverId=790;Dbq=C:\MyExcel.xls;DefaultDir=c:\mypath; Потом пишешь простой запрос: SELECT * FROM [sheet1$] Или через OLE DB. Вот строка: Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\MyExcel.xls;Extended Properties="Excel 8.0;HDR=Yes;IMEX=1"; |
|||
15
Immortal
05.07.07
✎
17:16
|
(9)*** Для работы компоненты потребуется установленный Microsoft .NET Framework 2.0, который можно скачать отсюда.
LOL! |
|||
16
Babay
05.07.07
✎
17:17
|
А если Excel 2007, то:
Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\myFolder\myExcel2007file.xlsx;Extended Properties="Excel 12.0;HDR=YES"; |
|||
17
vde69
05.07.07
✎
17:23
|
(12) пример в (14)
|
|||
18
evd
05.07.07
✎
17:26
|
можно через CSV
|
|||
19
coder1cv8
05.07.07
✎
17:29
|
(0) Почитай Михайлова, там есть пример через ADO.
|
|||
20
Гений 1С
гуру
05.07.07
✎
17:40
|
(14) а какой объект создавать?
|
|||
21
Гений 1С
гуру
05.07.07
✎
17:41
|
(18) Орегенально, а как эксель конвертировать в CSV?
|
|||
22
Директор PR отдела
05.07.07
✎
17:45
|
Фиксин, жесть. Напиши в дневнике! Про (13) напиши в 1С!
|
|||
23
Гений 1С
гуру
05.07.07
✎
18:07
|
(22) ты имеешь что то против?!
|
|||
24
Babay
05.07.07
✎
18:11
|
(20) смотри (10)
|
|||
25
France
05.07.07
✎
18:13
|
(13) ничего странного - структура тз известна, а структура файла эксель - совершенно не предсказуема - кто знает, у кого какие зверушки в черепке бегают...
|
|||
26
Гений 1С
гуру
05.07.07
✎
18:25
|
(25) а я думал что эксель состоит из ячеек и колонок?! гыгыгы
|
|||
27
France
05.07.07
✎
18:36
|
(26) серьезно чтоли?.. а как насчет объединенных колонок и строк? гыкать тянет?..
|
|||
28
Гений 1С
гуру
05.07.07
✎
18:37
|
(27) В МХЛ тоже есть объединенные ячейки, в чем проблема, франц, Гыгыгы
|
|||
29
Гений 1С
гуру
05.07.07
✎
18:37
|
(27) изучайте, батенька, мат-часть
|
|||
30
France
05.07.07
✎
18:42
|
(28) при чем тут мхл?.. в (0) про таблицу значений...
(29) дать тебе книжек? |
|||
31
Гений 1С
гуру
05.07.07
✎
18:44
|
(30) Речь идет о МХЛ, пардон если не так объяснил.
|
|||
32
Звездочёт
05.07.07
✎
18:45
|
(0) кстати, а можно ли его потом обратно высосать? :)
|
|||
33
France
05.07.07
✎
18:45
|
(31) тада есть смысл сменить название темы..
|
|||
34
Shaytan
05.07.07
✎
20:13
|
Через ADO работает на порядок быстрее чем через OLE. Но есть проблемы. Например, если в одной колонке данные типа число и строка. Т. е. предварительно надопривести к одному типу
Об_Excel=Новый COMОбъект("Excel.Application"); Об_файл = Новый Файл(ПутьКФайлуИсточнику); Ч_НачСтрока=0; Если Об_файл.Существует() Тогда Стр_Конект = "Driver={Microsoft Excel Driver (*.xls)};DriverId=790;Dbq="+Об_файл.ПолноеИмя+";DefaultDir="+Об_файл.Путь+";"; Об_Конект = Новый COMОбъект("ADODB.Connection"); Попытка Об_Конект.Open(Стр_Конект); Исключение Сообщить ("Не возможно подключится к Microsoft Excel Driver!!! |Возможно файл ["+Об_файл.ПолноеИмя+"] открыт другим пользователем!!!"); Возврат; КонецПопытки; Попытка Стр_SQL = "SELECT * FROM [A:I] WHERE (Марка <> '') AND ((Модель <> '') OR (Модификация <> '')) ORDER BY Марка"; Об_РекордСет=Об_Конект.Execute(Стр_SQL); Исключение Сообщить ("Не возможно получить данные из файла ["+ ОписаниеОшибки()+"!!!"); Возврат; КонецПопытки; Пока Об_РекордСет.EOF = Ложь Цикл МаркаНаименование = СокрЛП(Об_РекордСет.Fields("Марка").value); КонецЦикла |
|||
35
smaharbA
05.07.07
✎
20:40
|
самый быстрый способ это ОЛЕ в восьмерке вообще проста
Массив = Лист.UsedRange.Value; Для каждого М из Массив Цикл .... |
|||
36
smaharbA
05.07.07
✎
20:41
|
(34) может спарнем, что ОЛЕ быстрее, не один уже обломался с АДО, заспорив ))
|
|||
37
Immortal
05.07.07
✎
21:19
|
(35)
что то сомневаюс. |
|||
38
smaharbA
05.07.07
✎
21:21
|
(35) сомневайся... не первый...
|
|||
39
vde69
05.07.07
✎
21:30
|
(38) я то-же сомневаюсь, хоть сам пользуюсь ОЛЕ...
причины сомнения: 1. загрузка самого екселя 2. много проверок при получении данных (например на ошибку в формуле) 3. конфликт отладчиков, виснет при отладке... 4. возможность получать данные только по 1 ячейки, а не блоком кроме того у екселя есть и еще проблемы: 1. при исключение 1с зависает процесс 2. не возможно использовать многопользовательский доступ ADO - 1. сложнее в понимание и программирование 2. меньше функционала |
|||
40
Garlic
05.07.07
✎
21:58
|
Если обычные данные(7) - может скинуть их скриптом в txt-файл с разделителем, а потом взять 1С?
|
|||
41
smaharbA
05.07.07
✎
22:52
|
(39) даже и не сомневайся... погляди внимательно на (35)
|
|||
42
smaharbA
05.07.07
✎
22:53
|
+(41) и еще - у адо есть неприятное ограничение в количестве колонок
|
|||
43
vde69
06.07.07
✎
00:00
|
(41) там ты все равно получаешь массив ссылок, а в ADO ты получаешь массив значений! хотя спорить не буду, не сравнивал...
могу сказать, что выборка 40 000 строк и 32 столбцов по оле идет примерно 3-5 минут, на первый взгляд ADO будет быстрее... хотя конечно спорить не буду... |
|||
44
MMF
06.07.07
✎
00:01
|
(41) проспоришь. Когда-то на т1С заспорил также с глумом, потом экспериментировал. Использование вариантных массивов для обмена с экселем приближается по скорости с АДО, но все-же проигрывает
|
|||
45
MRAK
06.07.07
✎
00:10
|
ADO быстрее
|
|||
46
smaharbA
06.07.07
✎
02:56
|
(44) Миша, уже спорили и тут и на кубани и на рилнете, моя метода быстрее любого адо, но на больших массивах, когда более 5000 строк и 10 колонок
загрузка 60000 строк на 20 колонок идет секунды |
|||
47
IUnknown
06.07.07
✎
06:38
|
засосать ексель... оригинальное половое извращение...
|
|||
48
evd
06.07.07
✎
06:57
|
(21) Файл - Сохранить как... - CSV (разделители - запятые)(*.csv)
|
|||
49
774816
06.07.07
✎
08:00
|
Если стоит задача вывести информацию из бд пользователю, то лушчий способ это использование
ADO + MS DataGrid в v8 есть возможность вставить ActiveX control найди в списке Microsoft DataGrid Control назови его DG (если он конечно есть) создай адо рекорсет присовой DataGrid.DataSource рекорсет после присвоения рекордсета к гриду грид автоматом получает все записи за секунду (без циклов и вводов данных) это пример для SQL server-а Перем REC,СтрСоединения,Con; Con=Новый COMОбъект("ADODB.Connection"); REC=Новый COMОбъект("ADODB.Recordset"); СтрСоединения="Driver={SQL Server};Server=server;Database=ИмяБД;Uid=sa;Pwd=;" ; Если Con.State=1 Тогда Con.Close(); КонецЕсли; Con.Open(СтрСоединения) ; REC.Open("Таблица",Con,3); DataGrid=ЭлементыФормы.DG; DataGrid.DataSource=rec; DataGrid.ReBind(); НО данная .ocx есть не на всех машинах так что нужно еще ее поставить на машину клиента Приемущества ADO в том что ado универсальный инструмен работы с бд, использовать adо только для выборки всего листа нет смысла поскольку, сила ado в том что в ней можно использовать SQL запрос, не только для выборки но и для ввода удаления обновления создания таблиц удаления таблиц итд.... ЗЫ недавно ствил эксперимент что быстрее XBase или Ado (в части выборки данных) при работе с дбфниками XBase на две три секунды быстрее |
|||
50
Гений 1С
гуру
06.07.07
✎
09:30
|
блин, когда уже эти мелкософтовцы перейдут на XML, чтобы можно было парсить.
|
|||
51
smaharbA
06.07.07
✎
10:19
|
(49) еще один блин...
ну че может спорнем со всеми сразу на коньяк ? |
|||
52
Nordok
06.07.07
✎
10:23
|
Мля, уже который раз читаю как "Можно ли зассать Excel..." что за провакационное название.
|
|||
53
774816
06.07.07
✎
11:36
|
(51) покажи весь код с использованием массива
Массив = Лист.UsedRange.Value; Для каждого М из Массив Цикл что здесь ??? |
|||
54
vde69
06.07.07
✎
12:50
|
(53)+1 согласен!!!
ведь кроме получения ССЫЛКИ с ней надо чего-то сделать!!! |
|||
55
Drock
06.07.07
✎
12:59
|
(15) зато быстрее чем все остальное работает
|
|||
56
smaharbA
06.07.07
✎
13:37
|
(53) тоже самое что и с АДО, рассовывание по ячейкам ТЗ
вот для семерки, к примеру -
у меня 60000х30 за 50 сек выдернуло а 40000х10 за 24 сек кстати былоб быстрее, на серваке у меня глобальный флаг объектов выставлен, это замедляет |
|||
57
smaharbA
06.07.07
✎
13:38
|
+(56) причем по ОЛЕ я могу определить истинно заполненный диапазон, а не тот у которого просто оформление, и не перебором
|
|||
58
774816
06.07.07
✎
13:52
|
отвечаю на (51) я привел пример использования MS DataGrid-а
если ты думаешь что перебирая массив будет быстрее чем использование DataGrid.DataSource-а тот ты сильно ошибаешся, жаль нет времени на дисскусия но попробую твой код дома, кто знает может так быстрее))) |
|||
59
iSeRG
22.05.08
✎
13:42
|
Кто пробовал 56?
У меня ругается: Метод объекта не обнаружен (lbound) |
|||
60
iSeRG
22.05.08
✎
14:04
|
Разобрался, кому интересно:
Диапазон = ЛистПрайса.UsedRange; МассивДанных = Диапазон.Value.Выгрузить(); ВсегоСтрок = МассивДанных[0].Количество() - 1; Для НомерСтрокиПрайса = 0 По ВсегоСтрок Цикл Значение = МассивДанных[НомерКолонки][НомерСтроки]; ... |
|||
61
iSeRG
22.05.08
✎
14:05
|
Работает очень быстро, спс smaharbA
|
|||
62
Гений 1С
гуру
22.05.08
✎
15:12
|
(60) Да я ужо давно разобрался и на инфостартец лежит обработка по названию Чтец Excel... ;-)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |