Имя: Пароль:
1C
 
Выгрузка массива из 1С в Excel
0 fit
 
24.04.07
14:48
Необходимо массив из 1с выгрузить в Excel и работать c Excel-ми функциями обращаясь из 1с?
Потом обработанный массив необходимо загрузить в 1С.
Подскажите как это сделать!!!
1 Kalambur
 
24.04.07
14:53
а в 1С это не обрабатываеться?
2 Salvador Limones
 
24.04.07
14:56
Хмммм... Периодически возникают такие безумные идеи у бухгалтеров, которые раньше всё в Экселе считали, и тут бац, пересели на 1С.
3 Молния
 
24.04.07
14:58
мдя. идиотизм. может проце функции екселя в 1С забить?
4 fit
 
24.04.07
15:00
Мне нужно провести корреляционный анализ в Excel это делается с помощью надстройки Анализ данных. Это намного проще и правильнее, чем писать множество процедур в 1с
5 Kalambur
 
24.04.07
15:02
тогда MSDN+VBA help+Excel редактор
6 fit
 
24.04.07
15:02
+ точнее надстройка называется Пакет анализа
7 Salvador Limones
 
24.04.07
15:02
(4) А функции 1С не подходят?
Типа:
АнализДанных
Предназначен для выполнения анализа данных (кластерный анализ, поиск ассоциативных правил, поиск последовательностей и другие виды анализа). Результат работы зависит от типа производимого анализа.
8 asady
 
24.04.07
15:03
(0)
COMSafeArray (COMSafeArray)
Методы:
GetDimensions (GetDimensions)
GetLength (GetLength)
GetLowerBound (GetLowerBound)
GetType (GetType)
GetUpperBound (GetUpperBound)
GetValue (GetValue)
IsResizable (IsResizable)
Resize (Resize)
SetValue (SetValue)
Выгрузить (Unload)

Конструкторы:
Из COMSafeArray
Из массива 1
Из массива 2
Основной1
Основной2

Описание:
Объектная оболочка над многомерным массивом SAFEARRAY из COM. Позволяет создавать и использовать SAFEARRAY для обмена данными между COM-объектами.
Для передачи массива в качестве параметра метода COM-объекта необходимо построить COMSafeArray нужной размерности с нужным типом элемента и указать построенный COMSafeArray в качестве значения входного параметра. Другие объекты 1С:Предприятия можно использовать в качестве значений входных параметров типа Массив только при наличии исчерпывающей информации о типах параметров в библиотеке типа COM-объекта.
Результат метода COM-объекта или значение выходного параметра типа Массив всегда представляется объектом COMSafeArray.
Пример:
Массив = Новый COMSafeArray("VT_I4", 2);
Массив.SetValue(0, 23);
Массив.SetValue(1, 13.5);
COMОбъект = Новый COMObject("ExampleCOMObject.ECOMClass");
COMОбъект.ProcessSafeArray(Массив);
См. также:
COMSafeArray, конструктор Из COMSafeArray
9 smaharbA
 
24.04.07
15:04
(4) Лист.Range(Лист.Cells(1,1),Лист.Cells(РазмХ,РазмУ)).Value=Массив
10 fit
 
25.04.07
19:20
Получилось выгрузить массив, но при выполнении Анализ данных-> Регрессия выдается сообщение об ошибке

При попытке открытия файла с использованием списка недавно использованных файлов из меню ''Файл'' убедитесь, что файл не был переименован, перемещен или удален.
   Эксель.Application.Run ("ATPVBAEN.XLA!Regress", Лист.Range(Лист.Cells(1,1),Лист.Cells(1,4)), Лист.Range(Лист.Cells(2,2),Лист.Cells(4,4)), False, False, , Лист.Range( "$F$1:$M$36"), True, True, False, False, , False);
по причине:
Произошла исключительная ситуация (Microsoft Office Excel): Не удалось найти 'ATPVBAEN.XLA'. Проверьте задание имени и местоположения файла.

При попытке открытия файла с использованием списка недавно использованных файлов из меню ''Файл'' убедитесь, что файл не был переименован, перемещен или удален.


В чем проблема?

Код:
Процедура ОсновныеДействияФормыloppo(Кнопка)
   Попытка
       Эксель=Новый COMОбъект ("Excel.Application");
   Исключение
       Сообщить(ОписаниеОшибки()+" Программа Excel не установлена на данном компьютере!");
       Возврат;
   КонецПопытки;
   Книга=Эксель.WorkBooks.Add();
   Лист=Книга.WorkSheets(1);
   Массив=Новый массив (4,4);
   Массив[0][0]=2;    Массив[0][1]=1;    Массив[0][2]=1;    Массив[0][3]=4;
   Массив[1][0]=2;    Массив[1][1]=2;    Массив[1][2]=5;    Массив[1][3]=2;
   Массив[2][0]=0;    Массив[2][1]=3;    Массив[2][2]=3;    Массив[2][3]=0;
   Массив[3][0]=5;    Массив[3][1]=4;    Массив[3][2]=6;    Массив[3][3]=4.45;      
   Массив2 = Новый COMSafeArray(Массив,"VT_R8");
   Лист.Range(Лист.Cells(1,1),Лист.Cells(4,4)).Value=Массив2;
   
   Эксель.Application.Run ("ATPVBAEN.XLA!Regress", Лист.Range(Лист.Cells(1,1),Лист.Cells(1,4)), Лист.Range(Лист.Cells(2,2),Лист.Cells(4,4)), False, False, , Лист.Range( "$F$1:$M$36"), True, True, False, False, , False);
   
   
   Эксель.visible=1;
       
КонецПроцедуры
11 smaharbA
 
25.04.07
19:26
а не луччели сделать WorksheetFunction хотя говорю тупа наугад
12 asady
 
25.04.07
19:35
(10)
the macro sheet must be open
13 fit
 
25.04.07
20:02
(12) и как это сделать. По-подробнее если можно
14 vde69
 
25.04.07
20:38
(0) уже 2 раз в этом месяце появляеться такая бредовая идея на форуме...

1с 8.0 дает БЕЗУМНЫЕ возможности для анализа, а если хочеться реализовать что-то свехестественное то лучше обходиться не екселем а чем-то другим (для примера что будешь делать если попадеться массив из 100 000 строк, в ексель просто физически не влезет...) можно курить мат-лаб или поискать ВК для анализа (встречал...)

ексель хорошь для визулизации, на нем не плохо делать пользовательские макеты к отчетам, но как вычислитель это бред!!!
15 asady
 
25.04.07
21:21
(13)
Macros=Эксель.Workbooks.Open("ATPVBAEN.XLA");

так попробуй
16 fit
 
26.04.07
17:04
Ну все, у меня получилось.
Может кому-нибудь пригодится:



Эксель=Новый COMОбъект ("Excel.Application");
   Исключение
       Сообщить(ОписаниеОшибки()+" Программа Excel не установлена на данном компьютере!");
       Возврат;
   КонецПопытки;
   Книга=Эксель.WorkBooks.Add();
   Лист=Книга.WorkSheets(1);
   Массив=Новый массив (4,4);
   Массив[0][0]=2;
   Массив[0][1]=1;
   Массив[0][2]=1;
   Массив[0][3]=4;
   Массив[1][0]=2;
   Массив[1][1]=2;
   Массив[1][2]=5;
   Массив[1][3]=2;
   Массив[2][0]=0;
   Массив[2][1]=3;
   Массив[2][2]=3;
   Массив[2][3]=0;
   Массив[3][0]=5;
   Массив[3][1]=4;
   Массив[3][2]=6;
   Массив[3][3]=4.45;      
   
   Массив2 = Новый COMSafeArray(Массив,"VT_R8");
   
   Лист.Range(Лист.Cells(1,1),Лист.Cells(4,4)).Value=Массив2;
   
   Эксель.Workbooks.Open("C:\Program Files\Microsoft Office\OFFICE11\Library\Analysis\ATPVBAEN.XLA");
   Эксель.Application.Run("ATPVBAEN.XLA!auto_open");
   
   Книга.Activate();

   Эксель.visible=1;
   Эксель.Application.Run ("ATPVBAEN.XLA!Regress", Лист.Range(Лист.Cells(1,1),Лист.Cells(4,1)), Лист.Range(Лист.Cells(1,2),Лист.Cells(4,2)), False, False, , Лист.Range( "$F$1:$M$36"), True, True, False, False, , False);
   
   Эксель.DisplayAlerts = true;
   Эксель.Quit();
Основная теорема систематики: Новые системы плодят новые проблемы.