|
ComArray в обычный массив | ☑ | ||
---|---|---|---|---|
0
Herber
31.07.12
✎
11:02
|
Функция Excel_ПолучитьДанные_COMArray(пФайл, СтруктураКолонок = Неопределено, Знач НачСтрока = 0, Знач КонСтрока = 0, XLSОбъект = Неопределено) Экспорт
ДвумерныйМассив = Новый Массив; #Если Клиент Тогда Состояние("Открытие Excel"); #КонецЕсли Если XLSОбъект = Неопределено Тогда XLSОбъект = Новый COMОбъект("Excel.Application"); XLSОбъект.Visible = Ложь; XLSОбъект.DisplayAlerts = Ложь; КонецЕсли; Попытка Book = XLSОбъект.Workbooks.Open(пФайл, , Истина); Исключение Сообщить ("Проблемы с подключением к Excel" ); Возврат Неопределено; КонецПопытки; Лист = Book.Sheets(1); КолвоКолонок = Лист.Cells(1,1).SpecialCells(11).Column; КолвоСтрок = Лист.Cells(1,1).SpecialCells(11).Row; Таблица = Новый ТаблицаЗначений; Если СтруктураКолонок = Неопределено Тогда Для Счетчик = 1 По КолвоКолонок Цикл Колонка = Таблица.Колонки.Добавить("К" + Счетчик); КонецЦикла; Иначе МаксимальныйНомерКолонки = 0; Для каждого КлючИЗначение Из СтруктураКолонок Цикл Колонка = Таблица.Колонки.Добавить(КлючИЗначение.Ключ); МаксимальныйНомерКолонки = Макс(МаксимальныйНомерКолонки, КлючИЗначение.Значение); КонецЦикла; КолвоКолонок = Мин(КолвоКолонок, МаксимальныйНомерКолонки); КонецЕсли; НачСтрока = ?(НачСтрока = 0, 1, НачСтрока); КонСтрока = ?(КонСтрока = 0, КолвоСтрок, КонСтрока); // 3802 КонСтрока = Мин(КонСтрока, КолвоСтрок); // Массив типа COMSafeArray Массив = Лист.Range(Лист.Cells(НачСтрока, 1), Лист.Cells(КонСтрока, КолвоКолонок)).Value; КолвоСтрок = Массив.GetUpperBound(1); Для НомерСтроки = 1 По КолвоСтрок Цикл #Если Клиент Тогда Состояние("Чтение файла: " + Формат(НомерСтроки) + " из " + Формат(КолвоСтрок)); ОбработкаПрерыванияПользователя(); #КонецЕсли НоваяСтрока = Таблица.Добавить(); МассивВторогоПорядка = Новый Массив(); Если СтруктураКолонок = Неопределено Тогда Для НомерКолонки = 1 По КолвоКолонок Цикл НоваяСтрока["К" + Формат(НомерКолонки, "ЧГ=0")] = Массив.GetValue(НомерКолонки, НомерСтроки); Если НомерКолонки = 1 Тогда МассивВторогоПорядка.Добавить(Массив.GetValue(НомерКолонки, НомерСтроки)); ИначеЕсли НомерКолонки = 2 Тогда МассивВторогоПорядка.Добавить(Массив.GetValue(НомерКолонки, НомерСтроки)); ИначеЕсли НомерКолонки = 3 Тогда Жир =СокрЛП(Массив.GetValue(НомерКолонки, НомерСтроки)); Если ПустаяСтрока(Жир) Тогда МассивВторогоПорядка.Добавить(Массив.GetValue(НомерКолонки, НомерСтроки)); МассивВторогоПорядка.Добавить("Жир"); Иначе МассивВторогоПорядка.Добавить(Массив.GetValue(НомерКолонки, НомерСтроки)); КонецЕсли; ИначеЕсли НомерКолонки = 4 Тогда МассивВторогоПорядка.Добавить(Массив.GetValue(НомерКолонки, НомерСтроки)); ИначеЕсли НомерКолонки = 5 Тогда МассивВторогоПорядка.Добавить(Массив.GetValue(НомерКолонки, НомерСтроки)); ИначеЕсли НомерКолонки = 6 Тогда МассивВторогоПорядка.Добавить(Массив.GetValue(НомерКолонки, НомерСтроки)); ДвумерныйМассив.Добавить(МассивВторогоПорядка); МассивВторогоПорядка = Новый Массив; ИначеЕсли НомерКолонки = 7 Тогда МассивВторогоПорядка.Добавить(Массив.GetValue(НомерКолонки, НомерСтроки)); КонецЕсли; КонецЦикла; КонецЕсли; КонецЦикла; XLSОбъект.Application.Quit(); Возврат ДвумерныйМассив; КонецФункции Как из этого массива в обычный перевести ? |
|||
1
Rie
31.07.12
✎
11:05
|
Циклом по старшему измерению, а там - Выгрузить()
|
|||
2
Rie
31.07.12
✎
11:05
|
+(1) Просто Выгрузить(), безо всяких циклов.
|
|||
3
Herber
31.07.12
✎
11:05
|
У ComArry нет метода выгрузить
|
|||
4
Господин ПЖ
31.07.12
✎
11:06
|
разрешаю обойти коллекцию и сделать getvalue или что у него там
|
|||
5
Herber
31.07.12
✎
11:06
|
СомМассив= Excel_ПолучитьДанные_COMArray(...)
Массив = Новый Массив; Массив = СомМассив; Так тоже не вариант |
|||
6
Господин ПЖ
31.07.12
✎
11:07
|
>Так тоже не вариант
вариант... но не в 1С |
|||
7
Herber
31.07.12
✎
11:10
|
Данные.GetValue(НомерКолонки, НомерСтроки)
|
|||
8
Herber
31.07.12
✎
11:14
|
А как через Выгрузить() сделать ?
|
|||
9
Rie
31.07.12
✎
11:21
|
(3) Странно...
COMSafeArray.Выгрузить (COMSafeArray.Unload) COMSafeArray (COMSafeArray) Выгрузить (Unload) Синтаксис: Выгрузить() Возвращаемое значение: Тип: Массив. Описание: Создает массив значений и копирует в него содержимое COMSafeArray. Если COMSafeArray имеет более чем одно измерение, то элементами полученного массива значений будут вложенные массивы значений, и так от старшего индекса до самого младшего. Доступность: Сервер, толстый клиент, внешнее соединение. Пример: МассивЗначений = Массив.Выгрузить(); |
|||
10
Rie
31.07.12
✎
11:24
|
(8)
Массив1С = Массив.Выгрузить(); // Массив - это твой COMSafeArray из (0) |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |