Имя: Пароль:
1C
1С v8
Как выгрузить формулу из 1С в excel
, ,
0 СантаМарина
 
25.07.14
19:54
Всем доброго ночера!

Пишу такое:

    xl = Новый COMОбъект ("Excel.Application");
    xl.Workbooks.Add(); //Добавляем новый документ
    
    xl.Visible=1; //Делаем его видимым
        ..........
    xl.Cells(НомерСтроки,25).Value = "=RC[-13]/RC[-17]*100";                  //промежуточный расчет
    xl.Cells(НомерСтроки,26).Value = "ЕСЛИ(1=1;1;0)"; //промежуточный расчет

Там, где +,-,/,* - нормально выгружается и пересчитывается, как только доходит до именованной функции - ЕСЛИ, ОКРУГЛ - всё, вылетает с ошибкой. Пробовала всякие варианты - вместо Value - Formula, FormulaRC, FormulaR1C1, вместо ЕСЛИ - IF. Ничего не помогает.

Может, коллективный разум что подскажет?
1 probably
 
25.07.14
20:00
= перед функцией стоит? или это только здесь опечатка?
2 СантаМарина
 
25.07.14
20:07
Стоит, это здесь опечатка.
3 bolder
 
25.07.14
20:20
(2) Фотки нет, непорядок)).
4 q10n1k
 
25.07.14
20:28
ExcelПриложение = Новый COMОбъект("Excel.Application");
Книга = ExcelПриложение.WorkBooks.Add();
Лист = Книга.WorkSheets(1);
Лист.Cells(1,1).Formula = "=IF(0<=R2C2,1,0)";
Странно, такой вот овнокод работает нормально...
5 GreatOne
 
26.07.14
02:47
Кто вылетает с ошибкой? 1С или ексель?
может попробовать Param_if = "Если"; Строкаxl.Cells(НомерСтроки,26).Value = Param_if+"(1=1;1;0)";?
6 DiMel_77
 
26.07.14
03:20
(0) Для того чтобы использовать "рускоязычные" синонимы тебе нужно писать примерно так:
Range.FormulaR1C1Local = ...
7 СантаМарина
 
26.07.14
13:46
(5)
У нас excel установлен каким-то таким хитрым образом, что англоязычные формулы он не понимает вообще. В экселе пишу if - и он не отрабатывает её. Поэтому смысла как-то "if" ему передавать нет.

Ошибка такая:
{ВнешняяОбработка.Обработка.МодульОбъекта(153)}: Ошибка при установке значения атрибута контекста (FormulaR1C1Local)
        Лист.Cells(НомерСтроки,26).FormulaR1C1Local = "=ЕСЛИ(RC[-1]<0.1;25;1)"; //промежуточный расчет        
по причине:
Произошла исключительная ситуация (0x800a03ec)
в 1С-не.
8 GreatOne
 
26.07.14
14:15
если - зарезервированное слово, может поэтому ругается. Формулы никогда не использовался конечно, так что могу тупить. Я пример описал как раз передачу рарезервированного слова через переменную. Что мешает попробовать?
9 СантаМарина
 
26.07.14
14:26
А ведь заработало!
Вот так:
Лист.Cells(НомерСтроки,26).FormulaR1C1Local = "=ЕСЛИ(RC[-1]<0,1;25;1)"

То есть я поменяла 0.1 на 0,1. Ну и FormulaR1C1Local конечно, потому что в других вариациях excel "ЕСЛИ" не хотел понимать.

Хотя очень странно, всё же.
Перед этим я пишу
Лист.Cells(НомерСтроки,24).Value = "=0.2037*RC[-13]"
- и там не стало ошибок, когда я вместо запятой поставила разделителем точку. А тут - наоборот - вместо точки - запятую.
10 СантаМарина
 
26.07.14
14:30
(8) Для 1С то, что я передаю в ячейку - просто строка и он не анализирует, что там внутри. А excel как раз и должен понять, что это его зарезервированное под формулы слово. КМК.
11 bolder
 
26.07.14
14:31
(9) Как раз все правильно.Нужно понимать , что региональный стандарт требует запятой , а RCLocal - это региональный стандарт.
12 СантаМарина
 
26.07.14
14:48
(11) О, теперь понятно, спасибо!