Имя: Пароль:
1C
 
Передача нажатия клавиш в Excel
0 fit
 
28.04.07
16:14
Из 1с вызываю excel-ую функцию ЛИНЕЙН. Эта функция является формулой массива, т.е чтобы результат- группа ячеек. При нажатии enter получается одно значение (там где находится формула), xтобы получить всю группу необходимо выделить диапазон и нажать F2 -> Shift+Ctrl+Enter.
Вопрос: Можно ли с помощью 1с передать, что эти клавиши нажаты и как это сделать?
1 smaharbA
 
28.04.07
16:20
(0) зачем ?
Лист.Item(1).Cells(1, 1).FormulaLocal = "ЛИНЕЙН(B8:B11;C8:C11)"
2 smaharbA
 
28.04.07
16:22
Лист.Item(1).Cells(1, 1).FormulaLocal = "=ЛИНЕЙН(B8:B11;C8:C11)";
3 fit
 
28.04.07
16:30
Наверно дурацкий вопрос, но все же. Что обозначает Item
4 fit
 
28.04.07
16:33
все равно не работает. мой текст    

Эксель.ActiveCell.FormulaR1C1 = ("=LINEST(RC[-15]:R[19]C[-15],RC[-14]:R[19]C[-12],,TRUE)" );
5 fit
 
28.04.07
16:35
(1) Передача клавиш нужна для того, чтобы брать резельтирующие значения из конкретной ячейки, а для этого эта ячейка должна быть заполнена результатом.
6 smaharbA
 
28.04.07
16:41
Эксель.ActiveCell.FormulaR1C1Local = ("=ЛИНЕЙН(RC[-15]:R[19]C[-15],RC[-14]:R[19]C[-12],,TRUE)" );
7 smaharbA
 
28.04.07
16:41
(5) фигню какуюто говоришь...
8 smaharbA
 
28.04.07
16:43
+(6)
Эксель.ActiveCell.FormulaR1C1Local = ("=ЛИНЕЙН(RC[-15]:R[19]C[-15];RC[-14]:R[19]C[-12];;ИСТИНА)" );
9 fit
 
28.04.07
16:44
Выдает ошибку


Ошибка при установке значения атрибута контекста (FormulaR1C1Local): Произошла исключительная ситуация (0x800a03ec)
   Эксель.ActiveCell.FormulaR1C1Local = ("=LINEST(RC[-15]:R[19]C[-15],RC[-14]:R[19]C[-12],,TRUE)" );
по причине:
Произошла исключительная ситуация (0x800a03ec)
10 Херрес
 
28.04.07
16:45
может формулу в фигурные скобки взять надо....
Помню что с формулами массива не так всё просто.
Но экселя под рукой нет....
11 fit
 
28.04.07
16:48
(7) Ну почему фигню Функция возвращает результатом всякие статистические параметры, которые записываются в несколь ячеек (после нажатия клавиш). Чтобы их проанализировать из 1с необходимо обратиться к значению ячейки, а как я получю значение, если клавиши не нажаты и значей там нет.
12 smaharbA
 
28.04.07
16:49
или так

ЛИНЕЙН = Ексель.WorksheetFunction.LinEst(Массив1, Массив2);
Для Каждого Рез Из ЛИНЕЙН Цикл
 Сообщить(Рез);
КонецЦикла;
13 smaharbA
 
28.04.07
16:50
(11) нажать кнопки программно по оле в екселе нет проблемм, но ненужно тебе этого
14 fit
 
28.04.07
17:08
(13) Получилось. Но может скажешь как передавать нажатие клавишь(для общего образования)
15 smaharbA
 
28.04.07
17:34
mk:@MSITStore:C:\Program%20Files\Microsoft%20Office\OFFICE11\1049\VBAXL10.CHM::/html/xlmthSendKeys1.htm
16 smaharbA
 
28.04.07
19:14
Если кому интересно, вот для 7.7

Процедура Сформировать()
   Перем Массив1,Массив2;
   Скрипт=СоздатьОбъект("MSScriptControl.ScriptControl");
   Скрипт.language="javascript";
   Математика=Скрипт.Eval("Math");
   Ексель=СоздатьОбъект("Excel.Application");
   Книга=Ексель.WorkBooks.Add();
   Лист=Книга.WorkSheets.Item(1);
   Ячейки=Лист.Cells;
   Для к=1 По 10 Цикл
       Ячейки.Item(к,1).Value=Математика.random(1);
       Ячейки.Item(к,2).Value=Математика.random(1);
   КонецЦикла;
   Функции=Ексель.WorksheetFunction;
   Скрипт.AddObject("Ячейки",Ячейки);
   Икс=Ячейки.Range(Ячейки.Item(1,1),Ячейки.Item(10,1));
   Игрек=Ячейки.Range(Ячейки.Item(1,2),Ячейки.Item(10,2));
   Скрипт.AddObject("Икс",Икс);
   Скрипт.AddObject("Игрек",Игрек);
   Скрипт.AddObject("Функции",Функции);
   ЛИНЕЙН=Скрипт.Eval("new VBArray(Функции.LinEst(Икс,Игрек))");
   Для к=ЛИНЕЙН.lbound(1) По ЛИНЕЙН.ubound(ЛИНЕЙН.dimensions(0)) Цикл
       Сообщить(ЛИНЕЙН.getItem(к));
   КонецЦикла;
КонецПроцедуры