| 
			
			 | 
		#1 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
			
			
			Вспомогательный класс для импорта из Excel через ADO
			 
			
			Я относительно часто использую наработки из темы "Поговорим об ADO" (огромное спасибо, Gustav!), но каждый раз писать все необходимые функции, скажем, в простеньком job'е стало совсем лениво, и был реализован небольшой вспомогательный класс для импорта данных из Excel с использованием ADO для доступа к ним. Если в new() не передать название листа в книге Excel, то класс задействует ADOX.Catalog, чтобы определить названия листов, и использует первый из них (спасибо, blokva!). Вариант доступа через ADO - один из самых быстрых, если не самый быстрый, и при этом он почти так же прост, как считывание обычной таблички из БД. Ниже - пример использования класса: 
		
		
		
			X++: Counter cnTotal = 0; ItemId itemId; ItemName itemName; AmountCur price; Filename strFilename; container conSheets; ExcelImportADO xlImport; ; strFilename = @"c:\import.xls"; xlImport = new ExcelImportADO(strFilename); try { // по умолчанию будет открыт первый лист в книге Excel if(!xlImport.openFile()) throw error(strfmt("Ошибка при открытии файла Excel «%1»", strFilename)); if(xlImport.getFieldsCount() < 3) throw error(strfmt("Слишком мало колонок: найдено %1, ожидалось минимум %2", xlImport.getFieldsCount(), 3)); while(!xlImport.eof()) { // поля считаются, начиная с 1, как колонки в Excel itemId = xlImport.getFieldValue(1); itemName = xlImport.getFieldValue('ItemName'); // по умолчанию данные поля форматируются как строки // явно указываем, что хотим считать значение как есть price = xlImport.getFieldValue('ItemPrice', false); // обработка данных... cnTotal++; xlImport.moveNext(); } // освобождаем используемые COM-объекты ADO xlImport.finalize(); Box::info(strfmt("считано %1 записей", cnTotal)); } catch(Exception::Error) { xlImport.finalize(); } Надеюсь, для рутинных задач импорта из Excel класс кому-нить пригодится ![]() PS. Achtung! Названия листов Excel возвращаются отсортированные по алфавиту (без учета регистра), а не в том порядке, как они идут в книге Excel! Последний раз редактировалось gl00mie; 21.01.2007 в 21:20.  | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: Oz (1), mit (1), Morpheus (2), SHiSHok (2), kvg6 (1), Russland (1), Gustav (6), PavelSR (1), alex55 (3), Dino (0), _scorp_ (2), sgt.Pepper (1), zhan (2), Deepoint (1). | |