|
|
|
ADODB - получение данных и Эксель файла
|
|||
|---|---|---|---|
|
#18+
Доброго времени суток! платформа 8.1 Подскажите как прочитать данные из Эксель файла с помощью ADO? спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2010, 08:35 |
|
||
|
ADODB - получение данных и Эксель файла
|
|||
|---|---|---|---|
|
#18+
quazare, Собственно говоря от 1С требуется только умение создавать COM объект, а все остальное - это скорее всего от Майкрософт, в MSDN можно почитать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2010, 09:40 |
|
||
|
ADODB - получение данных и Эксель файла
|
|||
|---|---|---|---|
|
#18+
Если Файл.Существует() Тогда Стр_Файл=Файл.ПолноеИмя; // Отрезаем слеш если он есть в конце пути Стр_Путь=Файл.Путь; Если Прав(Стр_Путь,1)="\" Тогда Стр_Путь=Лев(Стр_Путь,СтрДлина(Стр_Путь)-1); КонецЕсли; // Строка корнекта Стр_Конект = "Driver={Microsoft Excel Driver (*.xls)}; |DriverId=790; |Dbq="+Стр_Файл+"; |DefaultDir="+Стр_Путь+";"; Об_Конект = Новый COMОбъект("ADODB.Connection"); Попытка Об_Конект.Open(Стр_Конект); Исключение Сообщить ("Не возможно подключится к Microsoft Excel Driver!!! |Возможно файл ["+Стр_Файл+"] открыт другим пользователем."); Возврат Ложь; КонецПопытки; СтрЗапроса = " |SELECT * |FROM [A0:AZ100000] |"; Об_РекордСет = Новый COMОбъект("ADODB.Recordset"); Попытка Об_РекордСет=Об_Конект.Execute(СтрЗапроса); Исключение Сообщить("Не удалось выполнить запрос к файлу Excel |"+ ОписаниеОшибки(),СтатусСообщения.Важное); Возврат Ложь; КонецПопытки; НовыйПриход = Документы.УстановкаЦенНоменклатуры.СоздатьДокумент(); НовыйПриход.Дата = ТекущаяДата(); НовыйПриход.НеПроводитьНулевыеЗначения = Истина; НовыйПриход.Ответственный = глЗначениеПеременной("глТекущийПользователь"); НовыйПриход.Комментарий = "Создано при конвертации данных"; //НовыйПриход.ТипЦен = ТипЦен; СтрокаТипыЦен = НовыйПриход.ТипыЦен.Добавить(); СтрокаТипыЦен.ТипЦен = ТипЦен; Пока НЕ Об_РекордСет.EOF Цикл //Пока Об_РекордСет.EOF Цикл Артикул = Об_РекордСет.Fields(0).value; НаименованиеТовара = Об_РекордСет.Fields(1).value; ЦенаТовара = Об_РекордСет.Fields(3).value; //СоздатьТовар(КодТовара,НаименованиеТовара); //Сообщить(Артикул+" "+НаименованиеТовара+" "+ЦенаТовара); СправочникДляПоиска = Справочники.Номенклатура; СправочникСсылка = СправочникДляПоиска.НайтиПоРеквизиту("Артикул",Артикул,,); Если СправочникСсылка = Справочники.Номенклатура.ПустаяСсылка() Тогда //Сообщить(); Об_РекордСет.MoveNext(); Продолжить; КонецЕсли; СтрокаПрихода = НовыйПриход.Товары.Добавить(); СтрокаПрихода.Номенклатура = СправочникСсылка; СтрокаПрихода.Цена = ЦенаТовара; СтрокаПрихода.Валюта = Валюта; СтрокаПрихода.ТипЦен = ТипЦен; СтрокаПрихода.ЕдиницаИзмерения = СправочникСсылка.ЕдиницаХраненияОстатков; СтрокаПрихода.ИндексСтрокиТаблицыЦен = 0; Об_РекордСет.MoveNext(); КонецЦикла; Об_Конект.Close(); НовыйПриход.Записать(РежимЗаписиДокумента.Запись); Об_Конект=Неопределено; Об_РекордСет=Неопределено; Возврат Истина; Иначе Сообщить("Файл "+ПутьКФайлу+" не найден!"); Возврат Ложь; КонецЕсли; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2010, 09:41 |
|
||
|
ADODB - получение данных и Эксель файла
|
|||
|---|---|---|---|
|
#18+
А точно именно через ADO надо? Как я понимаю, это оправдано, если используется запрос, причем предъявляются определенные требования к эксельным данным. Вот Семерочный пример, который несложно перелопатить под Восьмерку: Собственные руки TM Поиск данных в таблице Excel посредством ADO Алексей Комиссаров июль 2002 -------------------------------------------------------------------------------- Эта статья демонстрирует, как создать запрос и организовать поиск данных, хранящихся в таблице Excel, используя механизм ActiveX Data Objects (ADO) из-под 1С:Предприятия. Чтобы получить доступ к данным, хранящимся в электронной таблице , необходимо использовать Microsoft ODBC-драйвер для Excel. Создадим таблицу и присвоим имя области данных (см. статью Создание сводной таблицы в Excel средствами V7). Рис.1 Именованный диапазон данных таблицы. Данные в каждой колонке диапазона должны иметь одинаковый тип значения, в противном случае драйвер ODBC не сможет правильно интерпретировать данные. Первая строка диапазона должна содержать наименования колонок в текстовом формате, с помощью которых в дальнейшем можно будет обратиться к конкретному значению ячейки. Создадим новый источник данных ODBC, который ссылается на файл нашей электронной таблицы: Рис.2 Источник данных OBDC. Процедура запроса к данным будет иметь следующий вид: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. При подговке статьи использовался ADO 2.6 release. Принимая во внимание ограничение количества строк на листе Excel (64 с чем-то тыс.), большие объемы данных через Эксель гонять неоптимально - уж лучше xml/txt/dbf. А с маленькими файликами проще через Application/Workbooks/Sheets работать, вот фрагмент рабочего кода: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. Можно при надобности написать и универсальное считывание с листа в ТЗ, а дальше уже с ТЗ работать (если надо, и запрос к ней одинэсный пульнуть с условиями). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2010, 11:14 |
|
||
|
ADODB - получение данных и Эксель файла
|
|||
|---|---|---|---|
|
#18+
AnyKeyMan, упс, лишку вырезал из своего примера. Вот так читать: //Читаем, что надо из текущей строки СтрОстатокЦББрокера = СокрЛП(xlSheet.Cells(Row, ВыбНомерКолонкиОстатковЦБ).Value);//Читаем из ячейки значение. СтрОстаток = СтрЗаменить(СтрОстатокЦББрокера, ",", "");//Уберем "буржуйские" разделители триад. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 09:07 |
|
||
|
|

start [/forum/topic.php?fid=28&tid=1522216]: |
0ms |
get settings: |
5ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
159ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
32ms |
get tp. blocked users: |
1ms |
| others: | 200ms |
| total: | 421ms |

| 0 / 0 |
