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

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

22 Июнь 2021, 14:20 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Часто задаваемые вопросы по LibreOffice и Apache OpenOffice.org
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: « 1 2   Вниз
  Печать  
Автор Тема: Как получить имя поименованной ячейки?  (Прочитано 1075 раз)
0 Пользователей и 1 Гость смотрят эту тему.
economist
Форумчанин
***
Online Online

Сообщений: 1 499


« Ответ #15: 26 Май 2021, 14:34 »

а там без 3-D моделирования и графического конструктора не обойтись

Сейчас наметилась следующая тенденция: если нет патологической зависимости от "автокада" - народ берет свободный CAD, что-то из https://awesomeopensource.com/projects/cad или наш nanoCAD. Затем ручками или процедурно генерит основные примитивы, например в этом https://github.com/CadQuery/cadquery - обычно это что-то особенное, например нестандартные косынки для крепления каркасных балок (хотя всё это уже где-то есть, нужно просто поискать). А затем быстро собирает из них "растягиваемый" прототип. Готовые CAD-ведомости материалов/стройработ - экспортируют в Calc для осмечивания.   

Хорошая новость - почти все CAD умеют в Python, а значит легко самому научиться и научить других. Тот python что в LibreOffice - уже позволяет творить определенные чудеса (скоро покажу в новой ветке по Calc). Считать и подгонять белую/черную смету по своим/поставщиков прайсам в Calc/Base, как сделали вы - удобно. А Питон может облегчить и ускорить перенос данных за счет унификации форматов и умения брать данные откуда угодно - из файлов, сайтов, БД.

Время учить Питон, мне кажется всем нам этого не избежать. Кульманы уже почти не встретишь.
Записан

Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...
Kadet
Форумчанин
***
Offline Offline

Сообщений: 427


« Ответ #16: 26 Май 2021, 15:57 »

Спасибо! Ща закончу этот проект и таки придётся коснуться питона.
Спасибо за наводки. Попробую совместить Base со внешними CAD-ами.

Спасибо, за направление.
Записан
Kadet
Форумчанин
***
Offline Offline

Сообщений: 427


« Ответ #17: 26 Май 2021, 17:02 »

Спасибо! Перебором всё получилось. Есть минусы, но и фиг с ними.
Записан
Kadet
Форумчанин
***
Offline Offline

Сообщений: 427


« Ответ #18: 30 Май 2021, 22:30 »

Добрый день, коллеги!
Нужна ещё помощь.
Пытаюсь скопировать документ CALC в другой документ CALC со специальным форматированием. Первый лист документа должен быть ориентирован книжно, а все прочие альбомно. Потом это документ будет сохраняться в PDF для удобства формирования ком.предложения.

Однако, никак не получается установить разные стили страниц для разных листов CALC. Что делаю не так? Где ошибка.

Код макроса-экспортёра из CALC в CALC
Код:
Sub ANExport(oEvent)
Dim oDoc As Object, vComp As Object, oSheet As Object, oSheet1 As Object, oRange, oRange1, oRow%, oCell, sURL$, oData, StyleName
Dim i%, j%, k%, n%, index%, Xmax, Ymax, sName$, oStartColumn, oStartRow, oEndColumn, oEndRow, oRw%, bFooterIs as Boolean
Dim oPaperOrien, document, oActiveSheet, MaxPages, oPageStyles, oStyle, oLeftText, oCenterText, oRightText, oGraph, oDrawPage
Dim aSize As new com.sun.star.awt.Size
Dim oOpt(1) as new com.sun.star.beans.PropertyValue
Dim CellAddress As New com.sun.star.table.CellRangeAddress
Dim oRanges(0) As New com.sun.star.table.CellRangeAddress
'ON LOCAL ERROR GOTO ErroANExport:

oDoc = ThisComponent

sURL = "private:factory/scalc"
vComp = StarDesktop.LoadComponentFromUrl(sURL, "_blank", 0, Array())
document = vComp.CurrentController.Frame
document.Controller.ShowGrid = false 'Убрать разметку ячеек
' document.Controller.HasColumnRowHeaders = false 'Убрать названия сток и стоблцов

oSheet = oDoc.CurrentController.getActiveSheet
index = oSheet.RangeAddress.Sheet
n = oDoc.Sheets.Count-2
For k=0 To n
oSheet = oDoc.Sheets(k)
sName = oSheet.Name
If k=0 Then
oSheet1 = vComp.Sheets(k)
oSheet1.Name = sName
Else
vComp.Sheets.insertNewByName(sName, k)
End If

oSheet1 = vComp.Sheets(k)
oRange = oSheet.getCellByPosition(0,0)
oDoc.CurrentController.select(oRange)

Xmax = oDoc.CurrentController.VisibleArea.Width
Ymax = oDoc.CurrentController.VisibleArea.Height
If k=0 Then
oPaperOrien = 0
oStartColumn = 0
oStartRow = 0
oEndColumn = 5
oEndRow = 500
bFooterIs = False
MaxPages = 2
StyleName = "Report"
Else
oPaperOrien = 1
oStartColumn = 0
oStartRow = 0
oEndColumn = Xmax/oSheet.Columns(1000).Width
oEndRow = Ymax/oSheet.Rows(1000).Height
bFooterIs = True
MaxPages = 1
StyleName = "Default"
End If

oRange = oSheet.getCellRangeByPosition(oStartColumn,oStartRow,oEndColumn,oEndRow)
oData = oRange.DataArray
oRange = oSheet.getCellRangeByPosition(0,0,oEndColumn,oEndRow)
oDoc.CurrentController.select(oRange)
oData = oDoc.CurrentController.getTransferable()

oRange1 = oSheet1.getCellRangeByName("A1")
vComp.CurrentController.select(oRange1)
vComp.CurrentController.insertTransferable(oData)

oActiveSheet = vComp.CurrentController.getActiveSheet()
oStyle = vComp.StyleFamilies.getByName("PageStyles").getByName(StyleName)
oStyle.CenterHorizontally = True
oStyle.HeaderIsOn = True
oStyle.FooterIsOn = false
oStyle.TopMargin = 750
oStyle.LeftMargin = 500
oStyle.RightMargin = 500
oStyle.BottomMargin = 750
oStyle.ScaleToPagesX = 1
oStyle.ScaleToPagesY = MaxPages
SetHeaderTextInSpreadSheet(vComp, oSheet1, oLeftText, oCenterText, oRightText)

oOpt(1).Name = "PaperOrientation"
oOpt(1).Value = oPaperOrien
vComp.Printer = oOpt()

oRanges(0).Sheet = k
oRanges(0).StartColumn = 0 : oRanges(0).StartRow = 0
oRanges(0).EndColumn = oEndColumn : oRanges(0).EndRow = oEndRow
vComp.CurrentController.getActiveSheet().setPrintAreas(oRanges)

oActiveSheet.Rows(oStartRow).IsStartOfNewPage = True
Next
'***********************************************************************
ErroANExport:
' ON LOCAL ERROR GOTO 0
End Sub

P.S./// Возможно в оторванности от основной базы макрос не будет работать. Не проверял.

* ExpDoc.ods (78.64 Кб - загружено 2 раз.)
Записан
Kadet
Форумчанин
***
Offline Offline

Сообщений: 427


« Ответ #19: 30 Май 2021, 22:39 »

Разрывы печатных страниц в листе не работают - oActiveSheet.Rows(oStartRow).IsStartOfNewPage = True
Количество страниц, в которые нужно вписывать данные из конкретного листа, тоже не работает - oStyle.ScaleToPagesY = MaxPages
Ориентация стиля тоже не работает:
Код:
oOpt(1).Name = "PaperOrientation"
oOpt(1).Value = oPaperOrien
vComp.Printer = oOpt()

Всё берёт по последней настройке.
Записан
Kadet
Форумчанин
***
Offline Offline

Сообщений: 427


« Ответ #20: 30 Май 2021, 22:49 »

Пока формулировал вопрос понял ошибку.
Получается, что ориентацию устанавливаю для всего документа:
Код:
oOpt(1).Name = "PaperOrientation"
oOpt(1).Value = oPaperOrien
vComp.Printer = oOpt()
Однако, в лоб - oActiveSheet.Printer = oOpt(), не находит метод.
Записан
economist
Форумчанин
***
Online Online

Сообщений: 1 499


« Ответ #21: 31 Май 2021, 08:21 »

А области печати заданы? В Excel всегда есть хотя бы одна ОП, а Calc м.б. ни одной.
Записан

Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...
Kadet
Форумчанин
***
Offline Offline

Сообщений: 427


« Ответ #22: 31 Май 2021, 10:14 »

Да. Области печати задаю. Образцы брал с рабочих макросов.
Вычитал тут на форуме, что нужно создавать два новых стиля - альбомный и книжный и каждому отдельному листу нужно присваивать разные стили. А то я меняю тот, который по умолчанию - Default, а он для всех листов один.
"Ручками" сделал это без труда (в образце), однако никак не могу разобраться как создать новые стили PageStyle макросом.

* ExpDoc1.ods (79.48 Кб - загружено 1 раз.)
Записан
Kadet
Форумчанин
***
Offline Offline

Сообщений: 427


« Ответ #23: 31 Май 2021, 10:50 »

Ура. Научился создавать стили макросом.
Код:
oPageStyles = vComp.StyleFamilies.getByName("PageStyles")
oPageStyle = vComp.createinstance("com.sun.star.style.PageStyle")
oPageStyles.insertByName ("Книжный", oPageStyle) 'Добавить название Стиля
oPageSetup=oPageStyles.getByName("Книжный")
Записан
Страниц: « 1 2   Вверх
  Печать  
 
Перейти в:  

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