|
Есть ли возможность использовать команды 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
|
(29) так же как и FormulaR1C1
http://msdn.microsoft.com/ru-ru/library/microsoft.office.tools.excel.namedrange.formulalocal.aspx |
|||
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) Спасибо тебе, понятно :)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |