![]() |
![]() |
![]() |
|
как загрузить данные из excel'я в таблицу значений? | ☑ | ||
---|---|---|---|---|
0
фросия
04.06.10
✎
15:21
|
мне надо маленький шаблончик:
открыть эксель, открыть нужный лист, получить значение ячеечки(строка, столбец) помогите пожалуйста? |
|||
1
Чайник Рассела
04.06.10
✎
15:23
|
// Обработчик события НачалоВыбора элемента ПутьКФайлу.
// Процедура ПутьКФайлуExcelНачалоВыбора(Элемент, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); Диалог.Заголовок = "Выберите файл"; Диалог.ПолноеИмяФайла = "c:\"; Диалог.Фильтр = "Книга Excel 97-2003 (*.xls)|*.xls|Книга Excel 2007 (*.xlsx)|*.xlsx"; Если Диалог.Выбрать() Тогда ПутьКФайлу = Диалог.ПолноеИмяФайла; КонецЕсли; КонецПроцедуры |
|||
2
Just4Fun
04.06.10
✎
15:23
|
Функция ПрочитатьФайлЭксель(ПутьКФайлу) Экспорт
//Создание объекта для установки связи с источником данных Connection = Новый COMОбъект("ADODB.Connection"); //сформируем строку подключения //Если необходимо в дальнейшем оперировать цифровыми значениями колонок,то ставим признак HDR = NO //если необходимо производить загрузку с учетом псевдонимов в 1й строке,то ставим HDR = YES СтрокаПодключения = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source = "+ПутьКФайлу; СтрокаПодключения = СтрокаПодключения + "; Extended Properties = "+"""Excel 8.0"+";HDR=NO;IMEX=1"";"; //подключение к источнику данных Попытка Connection.Open(СтрокаПодключения); Исключение Сообщить(ОписаниеОшибки()); Возврат Неопределено; КонецПопытки; //создание объекта выполнения команды Command = Новый COMОбъект("ADODB.Command"); //создание объекта подключения к файлу axCatalog = Новый COMОбъект("ADOX.Catalog"); axCatalog.ActiveConnection = Connection; //получим листы документа, //для обработки колонок листа можно обратится к коллекции Лист.Columns,которую тоже можно обойти посредством цикла Для каждого СписокЛистов = Новый СписокЗначений; КоличествоКолонок = 0; Для каждого Лист ИЗ axCatalog.Tables Цикл ТекстЗапросаКолонки = ""; Если Лист.Columns.Count() > 5 Тогда Для к = 1 По Лист.Columns.Count() Цикл ТекстЗапросаКолонки = ТекстЗапросаКолонки + ?(ТекстЗапросаКолонки="","F"+Формат(к,"ЧЦ=15; ЧГ=0"),",F"+Формат(к,"ЧЦ=15; ЧГ=0")); КонецЦикла; СписокЛистов.Добавить(Лист.Name,ТекстЗапросаКолонки); КоличествоКолонок = к - 1; Прервать; КонецЕсли; КонецЦикла; //Создание объекта набора записей RecordSet = Новый COMОбъект("ADODB.RecordSet"); //Указание активного соединения Command.ActiveConnection = Connection; //получим количество строк в документе Command.CommandText = "SELECT COUNT(*)FROM ["+СписокЛистов[0].Значение+"]"; //определение типа команды Command.CommandType = 1; //Выполнение и получение набора данных RecordSet = Command.Execute(); //первая запись это количество КоличествоСтрок = RecordSet.Fields(0).Value; //опредлеление текста команды Command.CommandText = "SELECT "+СписокЛистов[0].Представление+" FROM ["+СписокЛистов[0].Значение+"]"; //определение типа команды Command.CommandType = 1; //Выполнение и получение набора данных Попытка RecordSet = Command.Execute(); Исключение Сообщить(ОписаниеОшибки()); КонецПопытки; МассивТипов = Новый Массив; МассивТипов.Добавить(Тип("Дата")); МассивТипов.Добавить(Тип("Строка")); МассивТипов.Добавить(Тип("Число")); МассивТипов.Добавить(Тип("СправочникСсылка.Номенклатура")); ОписаниеТипов = Новый ОписаниеТипов(МассивТипов,Новый КвалификаторыЧисла(15,2),Новый КвалификаторыСтроки(100),Новый КвалификаторыДаты(ЧастиДаты.Дата)); ТаблицаЗагрузки = Новый ТаблицаЗначений; Колонки = ТаблицаЗагрузки.Колонки; Для к = 1 По КоличествоКолонок Цикл Колонки.Добавить("F" + Формат(к,"ЧЦ=15; ЧГ=0"),ОписаниеТипов); КонецЦикла; RecordSet.MoveNext();//т.к первая строка это заголовки таблиц,не будем ее учитывать Пока RecordSet.EOF() = 0 Цикл НоваяСтрока = ТаблицаЗагрузки.Добавить(); к = 0; Для каждого Колонка ИЗ ТаблицаЗагрузки.Колонки Цикл НоваяСтрока[Колонка.Имя] = СокрЛП(Строка(RecordSet.Fields(к).Value)); к = к+1; КонецЦикла; RecordSet.MoveNext(); КонецЦикла; //Колонки.Добавить("Нпп" ,Новый ОписаниеТипов("Дата,Строка,Число",Новый КвалификаторыЧисла(15),Новый КвалификаторыСтроки(100),Новый КвалификаторыДаты(ЧастиДаты.Дата))); Возврат ТаблицаЗагрузки; RecordSet.Close(); Connection.Close(); КонецФункции |
|||
3
FIXXXL
04.06.10
✎
15:24
|
Функция ПрочитатьВТаблицуЗначений(Файл)
Excel = Новый ComОбъект("Excel.Application"); Excel.Workbooks.Open(ФайлXML); Excel.DisplayAlerts = 0; //Не выводить предупреждения Excel ТЗ = Новый ТаблицаЗначений; Для ии = 1 По Excel.Cells.SpecialCells(11).Column Цикл Попытка Если ии < 10 Тогда ТЗ.Колонки.Добавить("Кол00"+Строка(ии), ,Excel.ActiveSheet.Cells(1,ии).Value); Иначе ТЗ.Колонки.Добавить("Кол0"+Строка(ии), ,Excel.ActiveSheet.Cells(1,ии).Value); КонецЕсли; Исключение //Если ии < 10 Тогда // ТЗ.Колонки.Добавить("Кол00"+Строка(ии), ,Excel.ActiveSheet.Cells(1,ии).Value); //Иначе // ТЗ.Колонки.Добавить("Кол0"+Строка(ии), ,Excel.ActiveSheet.Cells(1,ии).Value); //КонецЕсли; Сообщить("Не удалось добавить колонку"); КонецПопытки; КонецЦикла; КолКолонок = ии - 1; КоличествоСтрок = Excel.Cells.SpecialCells(11).Row; Если НомерНачальнойСтроки < 1 Тогда НомерНачальнойСтроки = 1 КонецЕсли; //Для ии = 2 По КоличествоСтрок Цикл Для ии = НомерНачальнойСтроки По КоличествоСтрок Цикл стр = ТЗ.Добавить(); Для кол = 1 По КолКолонок Цикл стр[кол-1] = Excel.ActiveSheet.Cells(ии,кол).Value; КонецЦикла; Состояние("Загружено из XLS: "+Строка(ии)+ " из "+Строка(КоличествоСтрок)); КонецЦикла; Excel.Quit(); Возврат ТЗ; КонецФункции // ПрочитатьВТаблицуЗначений() |
|||
4
фросия
04.06.10
✎
15:25
|
(3) а где номер листа указывается?
|
|||
5
фросия
04.06.10
✎
15:27
|
(2) спасибо, но мне надо попроще.
|
|||
6
FIXXXL
04.06.10
✎
15:27
|
(4) да мне без листов всегда хватало
|
|||
7
Just4Fun
04.06.10
✎
15:27
|
(5)пардоньте
|
|||
8
фросия
04.06.10
✎
15:30
|
(6) ок, тогда попробую скопировать с разных листов в разные файлы.
ActiveSheet - это наверное указывает на то что берутся данные с активного листа? |
|||
9
notton
04.06.10
✎
15:31
|
(0)(8) бабы как всегда бабы) непонятно только зачем этим заниматься тогда
|
|||
10
фросия
04.06.10
✎
15:36
|
(9) знать ВСЁ невозможно. достаточно знать где можно посмотреть/у кого спросить.
ну нет у меня под рукой ни одной обработки в которой данные из экселя берутся. то что нашла поиском - не работает. |
|||
11
DmiVo
04.06.10
✎
15:36
|
(8)Может ActiveSheet заменить на Sheets(НомерЛиста)?
|
|||
12
notton
04.06.10
✎
15:39
|
(10) логику вы тоже на аутсорс отдали?
|
|||
13
Maxus43
04.06.10
✎
15:45
|
ещё вариант
Док = ПолучитьCOMОбъект(Путь + "ценыконкурентов.xls"); КоличествоСтраниц = 2; Для ТекНомер = 1 По КоличествоСтраниц Цикл Контрагент = Док.Sheets(ТекНомер).Cells(1,1).Value; Товар = Док.Sheets(ТекНомер).Cells(2,2).Value; Цена = Док.Sheets(ТекНомер).Cells(2,3).Value; счСтроки = 3; Сообщить(Строка(Товар) + "-" + Строка(Цена)); Пока СокрЛП(Товар) <> "" Цикл // можно использовать другой признак // окончания данных на листе Товар = Док.Sheets(ТекНомер).Cells(СчСтроки,2).Value; Цена = Док.Sheets(ТекНомер).Cells(СчСтроки,3).Value; Сообщить(Строка(Товар) + "-" + Строка(Цена)); счСтроки = счСтроки + 1; КонецЦикла; КонецЦикла; Док.Application.Quit(); |
|||
14
Skylark
04.06.10
✎
15:48
|
Excel = Новый COMОбъект("Excel.Application");
НашФайл = Excel.Workbooks.Open(СокрЛП(ПолеВводаИмяФайла)); НашЛист = НашФайл.Sheets(ПолеВводаНомерЛиста); Если ПолеВводаНомерПоследнейстрокиДанных = 0 Тогда ПоследняяСтрока = Excel.Cells(1,1).SpecialCells(11).Row; Иначе ПоследняяСтрока = ПолеВводаНомерПоследнейстрокиДанных; КонецЕсли; Для i = ПолеВводаНомерПервойСтроки По ПоследняяСтрока Цикл Состояние("Загрузка строки " + i); // чтение данных из файла Наименование = НашЛист.Cells(i, 1).Value; КонецЦикла; |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |