Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

20 Август 2019, 21:48 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Здесь можно поблагодарить участников форума Улыбка
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1   Вниз
  Печать  
Автор Тема: Ошибка работы с OpenOffice 3.2.1 в 1С8  (Прочитано 7358 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Ryan
Участник
**
Offline Offline

Пол: Мужской
Расположение: Краснодар
Сообщений: 16


« Стартовое сообщение: 17 Март 2011, 08:44 »

С версии 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
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

Пол: Мужской
Расположение: Киев
Сообщений: 2 764


Помогаю людям и компьютерам понимать друг друга


WWW
« Ответ #1: 17 Март 2011, 09:29 »

Не с точно такой же, но с очень похожей сталкивался  Злой
У Питоньяка это 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
Участник
**
Offline Offline

Пол: Мужской
Расположение: Краснодар
Сообщений: 16


« Ответ #2: 17 Март 2011, 10:42 »

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

 
Записан
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

Пол: Мужской
Расположение: Киев
Сообщений: 2 764


Помогаю людям и компьютерам понимать друг друга


WWW
« Ответ #3: 17 Март 2011, 13:09 »

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

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

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

Пол: Мужской
Расположение: Краснодар
Сообщений: 16


« Ответ #4: 17 Март 2011, 13:51 »

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

Большое спасибо выручил  Улыбка
Записан
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

Пол: Мужской
Расположение: Киев
Сообщений: 2 764


Помогаю людям и компьютерам понимать друг друга


WWW
« Ответ #5: 17 Март 2011, 13:53 »

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

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

Пол: Мужской
Расположение: Краснодар
Сообщений: 16


« Ответ #6: 17 Март 2011, 14:02 »

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

здесь уже по другому не как не сделаешь
Записан
Ryan
Участник
**
Offline Offline

Пол: Мужской
Расположение: Краснодар
Сообщений: 16


« Ответ #7: 17 Март 2011, 14:14 »

не подскажешь, есть литература
по применению openoffice в 1с?
Записан
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

Пол: Мужской
Расположение: Киев
Сообщений: 2 764


Помогаю людям и компьютерам понимать друг друга


WWW
« Ответ #8: 17 Март 2011, 14:56 »

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

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

А с формулами я когда-то финт крутнул. Точно не помню, но сама последовательность была такой: вычислял адреса для формул в виде R1C1, вписывал в ячейки живьём, выгружал на диск, открывал и обновлял содержимое ячеек.
Записан

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

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!