Имя: Пароль:
1C
1С v8
Есть ли возможность использовать команды excel в 1С?
0 svchernova
 
08.12.11
10:44
Например, сцепить прау ячеек.. Вообще-то задача стоит посложнее, но не знаю, в принципе возможно ли использовать функции excel, не создавая заранее книгу?
1 ДенисЧ
 
08.12.11
10:46
ИСпользовать где?
2 Масянька
 
08.12.11
10:48
А зачем команды Excel без Excel?
3 GLazNik
 
08.12.11
10:48
(0) а какие ячейки сцеплять, если "не создавая заранее книгу"?
4 svchernova
 
08.12.11
10:56
Наверное, я неправильно вопрос сформулировала. Книга должна быть создана. Пустая, без формул. Нужно оперировать формулами excel из 1С.
5 Галахад
 
гуру
08.12.11
10:58
(4) Хорошие вопросы. Понятные.
6 svchernova
 
08.12.11
12:35
как же понятнее.. В екселе есть мастер функций. Например, функция ВСД(Значения; предположение) - Возвращает внутреннюю ставку доходности для ряда потоков денежных средств, представленных численными значениями.
Можно ли из 1С вызвать эту или любую другую функцию? и поместить полученное значение в ячейку
7 unregistered
 
08.12.11
12:38
А для сложения и вычитания в 1С вы тоже фукнции Excel используете?
8 GLazNik
 
08.12.11
12:41
(6) С екселем ты можешь делать по OLE что угодно (объединять, добавлять и удалять ячейки. делать формулы, ... ). Кури VBA.
9 svchernova
 
08.12.11
12:49
(7) Нет.
10 svchernova
 
08.12.11
12:50
(8) то есть нужно вставлять код VBA в код 1С, я правильно понимаю? У тебя есть пример?
11 Галахад
 
гуру
08.12.11
12:52
(0) К чему такая таинственность. Нормально опишите задачу.
12 Hawk_1c
 
08.12.11
12:53
(0) Либо все манипуляции сделать в 1С, а потом уже выгрузить результат в XLS. Поподробнее надо задачу ставить.
13 AlexTim03
 
08.12.11
12:53
(10) Да, именно так.
По поводу подключения можно посмотреть здесь: http://www.connectionstrings.com/
А по поводу программной работы в Excel здесь: http://citforum.ru/programming/windows/excel_faq/
14 GLazNik
 
08.12.11
12:54
(10) ну гугл с примерами легко справляется. Вот например: http://www.sky1c.ru/node/88

Дополнительно могу посоветовать воспользоваться записью макроса, что бы узнать какие методы вызываеются в том или ином случа.
15 svchernova
 
08.12.11
12:57
Всем спасибо, спасибо за ссылки. буду разбираться
16 svchernova
 
08.12.11
13:05
Это всё уже идела, читала.. но примерчика, как использовать именно формулы excel, какой синтаксис в 1С - не нашла нигде. думала, что у форумчан такой опыт есть. А создать com объект, сохранить книгу, закрыть книгу - тут знаний много не надо..
17 mikecool
 
08.12.11
13:08
поищи FriendVBA - переделывает макрос экселя в код 1с, правда для 7.7, но все думаю понятнее будет, чем искать значения всяких констант по экселю
18 GLazNik
 
08.12.11
13:15
(16) Ну а чего тут сложного. Все остальное ничем не отличается от того, что Вы перечислили.
Записываем макрос, получаем следующее:
   Range("C1:C4").Select
   With Selection
       .HorizontalAlignment = xlCenter
       .VerticalAlignment = xlBottom
       .WrapText = False
       .Orientation = 0
       .AddIndent = False
       .IndentLevel = 0
       .ShrinkToFit = False
       .ReadingOrder = xlContext
       .MergeCells = False
   End With
   Selection.Merge

Кусок с "With Selection" нам не интересен (пока не интересен) в резульате не хитрых модификаций получаем следущий код, который должен работать в 1С:
//Создание комобъекта и открытие/создание листа
...
//Собственно само объединение ячеек
Лист.Range("C1:C4").Merge();
19 svchernova
 
08.12.11
13:43
(18) спасибо Немножко понятнее.. где-то у меня был примерчик, как бейсиковский код вставить в 1С. Спасибо.
20 svchernova
 
08.12.11
13:45
Но ведь наименования функций в excel на русском языке!
21 Rie
 
08.12.11
13:47
(20) Это смотря каких функций.
22 GLazNik
 
08.12.11
13:50
(20) еще раз. Смотрите макросы в екселе. Они Вам все подскажут.
Вот запись макроса функции "Сумма":

Sub Макрос4()
'
' Макрос4 Макрос
'

'
   ActiveCell.FormulaR1C1 = "=SUM(R[-4]C:R[-1]C)"
   Range("D6").Select
End Sub

Как это использовать в 1С думаюю сами догадаетесь.
23 svchernova
 
08.12.11
13:53
(22) нет, вопрос в том, как это использовать в 1С..
Примерно так?


Connector = Новый COMОбъект("MSScriptControl.ScriptControl");

Текст ="

|ActiveCell.FormulaR1C1 = "=SUM(R[-4]C:R[-1]C)"
|Range("D6").Select"


Connector.Language="vbscript";
Connector.AddCode(Текст);
Connector.Timeout  = 1000 * 60*5;
Connector.run("Main1");
24 Rie
 
08.12.11
13:56
(23) Не понял. А зачем ScriptControl?
Почему не

Connector = Новый COMОбъект("Excel.Application");

а вместо текста на vbscript - прямо не вызывается что-то вроде

Лист.Cells(12,13).FormulaR1C1 = "=SUM(R[-5]C:R[-1]C)";
25 GLazNik
 
08.12.11
13:57
(23) Нет. Если смотреть ссылку, что я давал выше, пример по чтению данных из Excel, то формулу можно добавить следующим образом:
Лист.Cells(НомерСтрокиДляФормулы,НомерСтрокиДляКолонки.FormulaR1C1 = "=SUM(R[-5]C:R[-1]C)";
26 svchernova
 
08.12.11
14:17
(25) а sum можно заменить на СУММ(Число1;Число2)? СУММ - это стандартная функция excel
27 Rie
 
08.12.11
14:18
(26) SUM - та же самая стандартная функция.
Если хочешь СУММ - то используй FormulaLocal
28 svchernova
 
08.12.11
14:18
(25) мне именно стандартные функции нужно вызывать. там есть сложные, фининсовые функции
29 svchernova
 
08.12.11
14:19
(27) Как? я именно синтаксиса сроду не видела, в этом и проблема
30 GLazNik
 
08.12.11
14:22
31 GLazNik
 
08.12.11
14:24
+(30) Но SUM таки надежнее, ибо вариант с СУММ подразумевает что у вас локализованый Excel
32 Rie
 
08.12.11
14:25
(28) У них тоже есть англоязычные аналоги.

Что касается FormulaLocal - поскольку в формулах используются адреса формата R1C1, а не A1, удобнее будет использовать FormulaR1C1Local.

(31) +1
33 svchernova
 
08.12.11
14:28
(32) я понимаю, что есть англоязычные аналоги. Что-то мне всё это сложным показалось.
34 svchernova
 
08.12.11
14:30
Ну хорошо..
Пусть сложновао. Но как этот код вставить в 1С? синтаксис какой? Я уже писала, что с этим у меня проблема.
35 Rie
 
08.12.11
14:30
(33) IMHO, лучше познакомиться с англоязычными аналогами, чем гадать над локализацией у пользователей.
36 svchernova
 
08.12.11
14:30
вот этот код, например?


Microsoft.Office.Tools.Excel.NamedRange formulaR1C1Range;
private void SetFormulaR1C1()
{
   formulaR1C1Range = this.Controls.AddNamedRange(
       this.Range["B1", missing], "formulaR1C1Range");
   this.Range["A1", missing].Value2 = 1185921;
   this.formulaR1C1Range.FormulaR1C1 = "=SQRT(R1C1)";
   formulaR1C1Range.Select();
}
37 svchernova
 
08.12.11
14:30
вот этот код, например

Microsoft.Office.Tools.Excel.NamedRange formulaR1C1Range;
private void SetFormulaR1C1()
{
   formulaR1C1Range = this.Controls.AddNamedRange(
       this.Range["B1", missing], "formulaR1C1Range");
   this.Range["A1", missing].Value2 = 1185921;
   this.formulaR1C1Range.FormulaR1C1 = "=SQRT(R1C1)";
   formulaR1C1Range.Select();
}
38 svchernova
 
08.12.11
14:31
(35) я согласна, да. лучше использовать англоязычный синтаксис
39 Rie
 
08.12.11
14:36
(34) Это пишется на обычном 1Сике.

(36) Принцип такой:

// Создаёшь объект
Excel = Новый COMОбъект("Excel.Application");
// Получаешь книгу и лист
Книга = Excel.Workbooks.Open(ИмяФайла);
Лист = Книга.Worksheets(1);
// теперь рисуешь в ячейках что попало:
Лист.Cells(1,2).FormulaR1C1 = "=RC[-1]*2";
Лист.Range(Лист.Cells(2,2),Лист.Cells(2,3)).Merge();
// и так далее
40 svchernova
 
08.12.11
14:38
(39) Спасибо тебе :)))))))) Поняла!
41 svchernova
 
08.12.11
14:40
(39) Лист.Cells(1,2).FormulaR1C1 = "=RC[-1]*2";
---вот этого мне недоставало!!
42 Rie
 
08.12.11
14:42
(40) Только если смотришь примеры на VBA, учитывай, что там есть "текущие объекты", а в 1С с ними проблема.
То есть, там может быть

Cells(1,2).FormulaR1C1 = "=RC[-1]*2"
Range(Cells(2,2),Cells(2,3)).Merge

а в 1С будет как в (39).
43 svchernova
 
08.12.11
14:44
Я теперь разберусь, спасибо!
44 svchernova
 
08.12.11
15:10
(42) Твой код работает, но что это за формат такой RC[-1]? попробовала заменить на A1, не получилось.
45 Rie
 
08.12.11
15:16
(44) Это адрес формата R1C1.
RC[-1] - означает "ячейка в той же строке (R) в предыдущей колонке (С[-1])"
Чтобы писать адреса в формате A1 - надо использовать не FormulaR1C1, а просто Formula (соответственно, локальные FormulaLocal, а не FormulaR1C1Local).

Формат R1C1, на мой взгляд, гораздо удобнее для программной записи формул, чем A1, поскольку в нём координаты ячейки легко соотносятся с записью адреса. (R10C8 - это 8-я ячейка 10-й строки, в A1 это будет выглядеть как H10 - номер строки не сразу понятен).
46 svchernova
 
08.12.11
15:23
(45) Спасибо тебе, понятно :)