von Karolus » Di, 05.11.2013 14:40
Hallo
@Karolus: Vielen Dank, das sieht noch effektiver aus! Jetzt bin ich gerade dabei mich mit Python-Einbindung in OO zu belesen
Bei den ersten Schritten kann ich dir etwas helfen, im angehängten Dokument ist ein Script mit folgendem Inhalt eingebettet:
Code: Alles auswählen
import uno
from os import path
context = XSCRIPTCONTEXT
ctx = uno.getComponentContext()
servicemanager = ctx.ServiceManager
createUnoService = servicemanager.createInstance
file_access = createUnoService("com.sun.star.ucb.SimpleFileAccess")
pathsubstution = createUnoService("com.sun.star.util.PathSubstitution")
def install_me(*_):
"""
Funktion zum kopieren dieses eingebetteten Pythonscripts
ins den .userconfig_python_pfad"""
pythonfolder = pathsubstution.substituteVariables('$(user)/Scripts/python/',0)
filename = path.basename(__file__)
if not file_access.isFolder( pythonfolder):
file_access.createFolder(pythonfolder)
file_access.copy(__file__, path.join( pythonfolder, filename))
def groupbyfirstcolumn():
doc = context.getDocument()
cur_sel = doc.getCurrentSelection()
sheet = cur_sel.Spreadsheet
cursor = sheet.createCursor()
cursor.gotoStartOfUsedArea( False )
cursor.gotoEndOfUsedArea( True )
data = cursor.getDataArray()
header = data[0][0]
outdata = [(header,'','',''),]
for row in data:
if not row[0]== header:
header = row[0]
outdata.append((header,'','',''))
outdata.append(row[1:])
firstcol, firstrow = len(data[0])+1, 0
colsize, rowsize = map( len, [outdata[0], outdata])
lastcol, lastrow = firstcol + colsize -1, firstrow + rowsize -1
target = sheet.getCellRangeByPosition(firstcol, firstrow, lastcol, lastrow )
target.setDataArray( tuple(outdata))
Das kannst du per →Makro→Makro ausführen →→Thema62708_ScriptContainer→groupby→install_me >'ausführen'
Und das Ding erstellt automatisch (-falls noch nicht vorhanden- ) ein 'Python'-verzeichniss an der richtigen Stelle in deiner Benutzerkonfiguration und kopiert die Scriptdatei dort hinein.
Karolus
- Dateianhänge
-
- Thema_62708_scriptcontainer.ods
- (7.75 KiB) 36-mal heruntergeladen
Hallo
[quote]@Karolus: Vielen Dank, das sieht noch effektiver aus! Jetzt bin ich gerade dabei mich mit Python-Einbindung in OO zu belesen[/quote]
Bei den ersten Schritten kann ich dir etwas helfen, im angehängten Dokument ist ein Script mit folgendem Inhalt eingebettet:
[code=php]import uno
from os import path
context = XSCRIPTCONTEXT
ctx = uno.getComponentContext()
servicemanager = ctx.ServiceManager
createUnoService = servicemanager.createInstance
file_access = createUnoService("com.sun.star.ucb.SimpleFileAccess")
pathsubstution = createUnoService("com.sun.star.util.PathSubstitution")
def install_me(*_):
"""
Funktion zum kopieren dieses eingebetteten Pythonscripts
ins den .userconfig_python_pfad"""
pythonfolder = pathsubstution.substituteVariables('$(user)/Scripts/python/',0)
filename = path.basename(__file__)
if not file_access.isFolder( pythonfolder):
file_access.createFolder(pythonfolder)
file_access.copy(__file__, path.join( pythonfolder, filename))
def groupbyfirstcolumn():
doc = context.getDocument()
cur_sel = doc.getCurrentSelection()
sheet = cur_sel.Spreadsheet
cursor = sheet.createCursor()
cursor.gotoStartOfUsedArea( False )
cursor.gotoEndOfUsedArea( True )
data = cursor.getDataArray()
header = data[0][0]
outdata = [(header,'','',''),]
for row in data:
if not row[0]== header:
header = row[0]
outdata.append((header,'','',''))
outdata.append(row[1:])
firstcol, firstrow = len(data[0])+1, 0
colsize, rowsize = map( len, [outdata[0], outdata])
lastcol, lastrow = firstcol + colsize -1, firstrow + rowsize -1
target = sheet.getCellRangeByPosition(firstcol, firstrow, lastcol, lastrow )
target.setDataArray( tuple(outdata))
[/code]
Das kannst du per →Makro→Makro ausführen →→Thema62708_ScriptContainer→groupby→install_me >'ausführen'
Und das Ding erstellt automatisch (-falls noch nicht vorhanden- ) ein 'Python'-verzeichniss an der richtigen Stelle in deiner Benutzerkonfiguration und kopiert die Scriptdatei dort hinein.
Karolus