123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134 |
- import uno
- from com.sun.star.container import NoSuchElementException
- def DefineNamedRange(doc, SheetName, rangeName, rangeReference):
- """Defines a new named range. If the named range exists in the document, then
- update the rangeReference.
- Example: DefineNamedRange(doc, "Sheet1", "test_range", '$A$1:$F$14').
- API Reference:
- https://api.libreoffice.org/docs/idl/ref/interfacecom_1_1sun_1_1star_1_1sheet_1_1XNamedRanges.html
- """
- aName = rangeName
-
- sheetName = "$" + SheetName.replace("$", "")
- aContent = sheetName + "." + rangeReference
- try:
-
- doc.NamedRanges.getByName(rangeName)
- update = True
- except NoSuchElementException:
- update = False
- if update:
- doc.NamedRanges.getByName(rangeName).setContent(aContent)
- else:
- aPosition = uno.createUnoStruct('com.sun.star.table.CellAddress')
- sheet = doc.Sheets.getByName(SheetName)
-
- aPosition.Sheet = sheet.getRangeAddress().Sheet
- addressObj = sheet.getCellRangeByName(rangeReference)
-
- address = addressObj.getRangeAddress()
- aPosition.Column = address.StartColumn
- aPosition.Row = address.StartRow
- doc.NamedRanges.addNewByName(aName, aContent, aPosition, 0)
- return None
- def NamedRanges():
- """The main function to be shown on the user interface."""
- ctx = uno.getComponentContext()
- smgr = ctx.ServiceManager
- desktop = smgr.createInstanceWithContext("com.sun.star.frame.Desktop", ctx)
-
- doc = desktop.loadComponentFromURL("private:factory/scalc", "_blank", 0, ())
-
- doc.Sheets.insertNewByName("Information", 1)
- infoSheet = doc.Sheets.getByName("Information")
-
- infoSheet.getCellRangeByName("A1").String = "Operation"
- infoSheet.getCellRangeByName("B1").String = "Name of Cell Range"
- infoSheet.getCellRangeByName("C1").String = "Content of Named Cell Range"
-
- infoHeaderRange = infoSheet.getCellRangeByName("A1:C1")
-
- infoHeaderRange.HoriJustify = 2
- infoHeaderRange.CellBackColor = 0xdee6ef
-
- dataSheetName = "data"
- doc.Sheets[0].Name = dataSheetName
- DefineNamedRange(doc, dataSheetName, "test_range1", "$A$1:$F$14")
-
- test_range1 = doc.NamedRanges.getByName("test_range1")
- infoSheet.getCellRangeByName("A2").String = "Defined test_range1"
- infoSheet.getCellRangeByName("B2").String = test_range1.Name
- infoSheet.getCellRangeByName("C2").String = test_range1.Content
-
- DefineNamedRange(doc, dataSheetName, "test_range1", "$A$1:$A$10")
- infoSheet.getCellRangeByName("A3").String = "Revised test_range1"
- infoSheet.getCellRangeByName("B3").String = test_range1.Name
- infoSheet.getCellRangeByName("C3").String = test_range1.Content
-
- DefineNamedRange(doc, dataSheetName, "test_range2", "$B$1:$B$10")
- test_range2 = doc.NamedRanges.getByName("test_range2")
- infoSheet.getCellRangeByName("A4").String = "Defined test_range2"
- infoSheet.getCellRangeByName("B4").String = test_range2.Name
- infoSheet.getCellRangeByName("C4").String = test_range2.Content
-
- dataSheet = doc.Sheets.getByName(dataSheetName)
-
-
-
- data1 = tuple(((1,),(2,),(3,),(4,),(5,),(6,),(7,),(8,),(9,),(10,)))
- dataSheet.getCellRangeByName(test_range1.Content).setDataArray(data1)
- infoSheet.getCellRangeByName("A5").String = "Set value to test_range1"
- data2 = tuple(((2,),(4,),(6,),(8,),(10,),(12,),(14,),(16,),(18,),(20,)))
- dataSheet.getCellRangeByName(test_range2.Content).setDataArray(data2)
- infoSheet.getCellRangeByName("A6").String = "Set value to test_range2"
-
- infoSheet.getCellRangeByName("A8").String = "Sum of test_range1:"
- infoSheet.getCellRangeByName("B8").Formula = "=SUM(test_range1)"
-
- infoSheet.getCellRangeByName("A9").String = "Sum of test_range2:"
- infoSheet.getCellRangeByName("B9").Formula = "=SUM(test_range2)"
-
- infoSheet.getCellRangeByName("A10").String = "sum(test_range2) - sum(test_range1):"
- infoSheet.getCellRangeByName("B10").Formula = "=B9-B8"
-
- infoSheet.getCellRangeByName("A8:A10").CellBackColor = 0xdee6ef
-
- infoSheet.Columns.getByName("A").Width = 5590
- infoSheet.Columns.getByName("B").Width = 4610
- infoSheet.Columns.getByName("C").Width = 4610
- g_exportedScripts = (NamedRanges,)
|