I need to copy charts from different ODS (calc) and ODP into one ODP (impress)
The code for copying from different ODP (impress) to one ODP (impress) is below.
But I can't copy from calc in this way.
I would be very grateful for any help!
PS Sorry for my bad english.
Code: Select all
import sys
import os
import uno
import pyuno
def mergeFromOdpURL(desk, dispatcher, doc1, url, dt=1.0, number_slide=[0,]):
ctr1 = doc1.getCurrentController()
frame1 = ctr1.Frame
doc2 = desk.loadComponentFromURL(url, "_blank", 0, ())
ctr2 = doc2.getCurrentController()
frame2 = ctr2.Frame
dispatcher.executeDispatch(frame1, ".uno:DiaMode", "", 0, ())
dispatcher.executeDispatch(frame2, ".uno:DiaMode", "", 0, ())
for i in number_slide:
page2 = doc2.DrawPages.getByIndex(i)
ctr2.setCurrentPage(page2)
dispatcher.executeDispatch(frame2, ".uno:Copy", "", 0, ())
page1 = doc1.DrawPages.getByIndex(doc1.DrawPages.Count - 2)
ctr1.setCurrentPage(page1)
dispatcher.executeDispatch(frame1, ".uno:Paste", "", 0, ())
dispatcher.executeDispatch(frame1, ".uno:DrawingMode", "", 0, ())
doc2.close(True)
def fileNameToUrl(fname):
if fname[0:7] != 'file://':
fname = os.path.realpath(fname)
return pyuno.systemPathToFileUrl(fname)
else:
return fname
def mergeFiles(ctx, desk, filelist, outname, numbers_slide):
doc = desk.loadComponentFromURL(fileNameToUrl('default.odp'), "_blank", 0, ())
dispatcher = ctx.ServiceManager.createInstanceWithContext("com.sun.star.frame.DispatchHelper", ctx)
for fname in filelist:
mergeFromOdpURL(desk, dispatcher, doc, fileNameToUrl(fname), numbers_slide)
# mergeFromURLExcel(desk, dispatcher, doc, fileNameToUrl(filelist[1]), 1)
doc.DrawPages.remove(doc.DrawPages.getByIndex(1))
saveProperty = uno.getTypeByName("com.sun.star.beans.PropertyValue")
saveProperty.Name = "MS PowerPoint 97"
saveProperty.Value = True
doc.storeAsURL(fileNameToUrl(outname),())#('presentation', 'ppt', 'ppt', 'Microsoft PowerPoint 97/2000/XP', 'MS PowerPoint 97'))
doc.close(False)
def asService():
localContext = uno.getComponentContext()
resolver = localContext.ServiceManager.createInstanceWithContext("com.sun.star.bridge.UnoUrlResolver", localContext)
ctx = resolver.resolve("uno:socket,host=localhost,port=2002;urp;StarOffice.ComponentContext")
desk = ctx.ServiceManager.createInstanceWithContext("com.sun.star.frame.Desktop", ctx)
infiles = [
"bubbles.odp",
]
outfile = "output.odp"
numbers_slide = [1,1]
mergeFiles(ctx, desk, infiles, outfile, numbers_slide)
if __name__ == '__main__':
asService()