# A macro deve ser executada a partir do # BrOffice.org Calc def plan(): """ Preenche uma planilha """ # Obtêm o documento para o contexto de script doc = XSCRIPTCONTEXT.getDocument() # A primeira planilha do documento sheet = doc.getSheets().getByIndex(0) col = lin = 0 a = ord('A') # Cria uma linha com os títulos para as colunas for titulo in ('Jan', 'Fev', 'Mar', 'Total'): col += 1 sheet.getCellByPosition(col, lin).setString(titulo) # E coloca uma fórmula com somatório na última linha coluna = chr(a + col) formula = '=SUM(%s2:%s6)' % (coluna, coluna) sheet.getCellByPosition(col, lin + 6).setFormula(formula) for lin in xrange(1, 6): # Numera as linhas sheet.getCellByPosition(0, lin).setValue(lin) # Coloca somatórios no fim de cada linha formula = '=SUM(B%d:D%d)' % (lin + 1, lin + 1) sheet.getCellByPosition(4, lin).setFormula(formula) # Preenche os dados for col in (1, 2, 3): sheet.getCellByPosition(col, lin).setFormula('=10*RAND()') # Substitui a fórmula pelo valor val = sheet.getCellByPosition(col, lin).getValue() sheet.getCellByPosition(col, lin).setValue(val) return None # Para iniciar o BrOffice.org como servidor: # swriter.exe -headless # "-accept=pipe,name=py;urp;StarOffice.ServiceManager" import os import uno from com.sun.star.beans import PropertyValue # Dados... mus = [('Artista', 'Faixa'), ('King Crimson', 'Starless'), ('Yes', 'Siberian Khatru'), ('Led Zeppellin', 'No Quarter'), ('Genesis', 'Supper\'s Ready')] # Obtêm o número e o tamanho dos registros rows = len(mus) cols = len(mus[0]) # Inicio do "Boiler Plate"... # Contexto de componente local loc = uno.getComponentContext() # Para resolver URLs res = loc.ServiceManager.createInstanceWithContext( 'com.sun.star.bridge.UnoUrlResolver', loc) # Contexto para a URL con = res.resolve('uno:pipe,name=py;urp;StarOffice.ComponentContext') # Documento corrente desktop = con.ServiceManager.createInstanceWithContext( 'com.sun.star.frame.Desktop', con) # Fim do "Boiler Plate"... # Cria um documento novo no Writer doc = desktop.loadComponentFromURL('private:factory/swriter', '_blank', 0, ()) # Cursor de texto cursor = doc.Text.createTextCursor() # Muda as propriedades do texto cursor.setPropertyValue('CharFontName', 'Verdana') cursor.setPropertyValue('CharHeight', 20) cursor.setPropertyValue('CharWeight', 180) # Insere o texto no documento doc.Text.insertString(cursor, 'Músicas favoritas\n', 0) # Cria tabela tab = doc.createInstance('com.sun.star.text.TextTable') tab.initialize(rows, cols) doc.Text.insertTextContent(cursor, tab, 0) # Preenche a tabela for row in xrange(rows): for col in xrange(cols): cel = chr(ord('A') + col) + str(row + 1) tab.getCellByName(cel).setString(mus[row][col]) # Propriedades para exportar o documento props = [] p = PropertyValue() p.Name = 'Overwrite' p.Value = True # Sobrescreve o documento anterior props.append(p) p = PropertyValue() p.Name = 'FilterName' p.Value = 'writer_pdf_Export' # Writer para PDF props.append(p) # URL de destino, no qual o arquivo PDF será salvo url = uno.systemPathToFileUrl(os.path.abspath('musicas.pdf')) # Salva o documento como PDF doc.storeToURL(url, tuple(props)) # Fecha o documento doc.close(True)