Ошибка работы с OpenOffice 3.2.1 в 1С8

Автор Ryan, 17 марта 2011, 08:44

0 Пользователи и 1 гость просматривают эту тему.

Ryan

С версии 3.2.1 стала выдавать ошибку в 1с
при задании границы ячейки:

если кто сталкивался с данной ошибкой ответьте плиз:

ServiceManager=новый COMобъект("com.sun.star.ServiceManager");   
Граница = ServiceManager.Bridge_GetStruct("com.sun.star.table.BorderLine");
Граница.lineDistance =  0;
Граница.innerLineWidth = 0;
Граница.outerLineWidth = 1;

Ячейка = Лист.getCellByPosition(й,н);
       
Ячейка.leftBorder = Граница;
Ячейка.rightBorder = Граница;
Ячейка.topBorder = Граница;
Ячейка.bottomBorder = Граница; 

"Ошибка при установке значения атрибута контекста (leftBorder)
        Ячейка.leftBorder = Граница;
по причине: Типы не совпадают (0)"

JohnSUN

Не с точно такой же, но с очень похожей сталкивался  >:(
У Питоньяка это Listing 6.25: Set Calc border using a temporary. в главе  6.12. Table borders

Если нужно поменять что-то в структуре, то не создаю новую, а выдергиваю существующую, меняю что надо и заталкиваю обратно. Тогда уж точно типы расходиться не будут. То есть в случае с границами ячеек это было бы так:
Ячейка = Лист.getCellByPosition(й,н);
// Не сразу дергаем границу, а сначала структуру TableBorder:
ВсеГраницы = Ячейка.TableBorder
Граница = ВсеГраницы.leftBorder; // Не ServiceManager.Bridge_GetStruct("com.sun.star.table.BorderLine"), а реальная граница живой ячейки
Граница.lineDistance =  0;
Граница.innerLineWidth = 0;
Граница.outerLineWidth = 1;
// И границу с поправленным оформлением - назад... Не в ячейку! В TableBorder!
ВсеГраницы.leftBorder = Граница;
ВсеГраницы.rightBorder = Граница;
ВсеГраницы.topBorder = Граница;
ВсеГраницы.bottomBorder = Граница;
// И теперь - в саму ячейку:
Ячейка.TableBorder = ВсеГраницы;

(Проверить код не могу, лень дописывать остальные куски процедуры)

Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

Ryan

Пишет ошибку:
"Поле объекта не обнаружено (leftBorder)
   Граница = ВсеГраницы.leftBorder; // Не ServiceManager.Bridge_GetStruct("com.sun.star.table.BorderLine"), а реальная граница живой ячейки"



JohnSUN

Да, я это упустил из виду... Пока не скажем явно, что Граница.IsLeftLineValid = истина до самой структуры  ВсеГраницы.leftBorder не дотянемся.

Давай подойдем к проблеме с другой стороны: а что мы вообще пытаемся сделать? Почему не сформировать таблицу стандартными средствами (ТабличныйДокумент), не выгрузить ее на диск (метод Записать с параметром, например, XLS97) и не открыть готовую в ООо (ЗапуститьПриложение)?
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

Ryan

все нашел в чем причина вместо
ВсеГраницы.leftBorder нужно ВсеГраницы.leftLine
также для остальных:
ВсеГраницы.leftLine = Граница;
ВсеГраницы.rightLine = Граница;
ВсеГраницы.topLine = Граница;
ВсеГраницы.bottomLine = Граница;

Большое спасибо выручил  :)

JohnSUN

Да делов-то куча... На здоровье!
А все-таки, почему не сформировать стандартный табличный документ с уже готовым форматированием и не подсунуть его в ООо? Ведь проще же!
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

Ryan

Была готовая обработка, которая уже использовала все возможности языка vba для openoffice
например задавала формулы:
      //Формулы для столбцов
      НомерФ = Номер+3;
      // N
      Формула1 = "=IF(M"+НомерФ+"="""";$B$1;M"+НомерФ+")"; ..........
      //***************
      Лист.getCellByPosition(13,НомерФ-1).NumberFormat = 36;
      Лист.getCellByPosition(13,НомерФ-1).Formula = Формула1; ........

здесь уже по другому не как не сделаешь

Ryan

не подскажешь, есть литература
по применению openoffice в 1с?

JohnSUN

Ты понимаешь, большая часть всего написанного относилась к "семерке"... Для "восьмерки" - только отдельные обрывки, чего-нибудь глобального (упорядоченного и читаемого) не видел.

Поэтому установил SDK, xRay и MRI, ковыряю объекты, рассматриваю методы и свойства... Все что хочется сделать набрасываю в бэйсике, а потом перевожу на другие языки... Если нужно... Но чаще оставляю прямо в бэйсике и запускаю макрос "снаружи".

А с формулами я когда-то финт крутнул. Точно не помню, но сама последовательность была такой: вычислял адреса для формул в виде R1C1, вписывал в ячейки живьём, выгружал на диск, открывал и обновлял содержимое ячеек.
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне