рдкрд╛рдпрдиреЛ - рдкрд╛рдпрдерди рд╕реЗ xls рд░рд┐рдкреЛрд░реНрдЯ рдХрд╛ рддреНрд╡рд░рд┐рдд рд▓рдШреБ рд╕рдВрдкрд╛рджрди

рддреНрд╡рд░рд┐рдд рдФрд░ рдЖрд╕рд╛рди


рдмрд╣реБрдд рдкрд╣рд▓реЗ рдирд╣реАрдВ, рдореБрдЭреЗ рд╣рдорд╛рд░реЗ рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рд░рд┐рдХреЙрд░реНрдб рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рд╕рд╛рде рд╕рд╛рдордирд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЧреНрд░рд╛рд╣рдХ рдиреЗ рдореБрдЭреЗ рдПрдХ рдлреЙрд░реНрдо рднреЗрдЬрд╛, рдЬрд┐рд╕реЗ рдореБрдЭреЗ рдЙрдирдХреА рдЖрдВрддрд░рд┐рдХ рдкреНрд░рд▓реЗрдЦрди рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рднрд░рдирд╛ рдерд╛ред рдореИрдВрдиреЗ рдкрддреНрд░ рд╕реЗ рдЬреБрдбрд╝реА " 1.xls " рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЦреЛрд▓рд╛ рдФрд░ рдереЛрдбрд╝рд╛ рдЙрджрд╛рд╕ рдерд╛ред рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ, рдмрд░реНрдЦрд╛рд╕реНрддрдЧреА рдФрд░ рдлрд┐рд░ рдЖрддреНрдорд╣рддреНрдпрд╛ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдореЗрд░реЗ рджрд┐рдорд╛рдЧ рдореЗрдВ рдЖрдпрд╛ред рдлреЙрд░реНрдо рдореЗрдВ 14 рдХреЙрд▓рдо рд╢рд╛рдорд┐рд▓ рдереЗред рдореЗрд░реЗ рджрд┐рдорд╛рдЧ рдореЗрдВ рддреНрд╡рд░рд┐рдд рд░реВрдк рд╕реЗ рдХрдИ рдЧреБрдирд╛ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд╕рд╛рде рдкрд░рдорд╛рдгреБ рдкрд░рд┐рд╡рд░реНрддрди рдЬреЛ рд╣рдордиреЗ рдХрд┐рдП (рд▓рдЧрднрдЧ рдкрд╛рдВрдЪ рд╕реМ), рдореИрдВ рдзреВрдореНрд░рдкрд╛рди рдХрд░рдиреЗ рдЧрдпрд╛ред
рдореИрдВ рдЕрдкрдиреЗ рд╣рд╛рдереЛрдВ рд╕реЗ рдРрд╕рд╛ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред рдЕрдзрд┐рдХрд╛рдВрд╢ рдбреЗрдЯрд╛ (рдирдП рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛, рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХрд╛ рд╡рд░реНрдгрди, рдЖрджрд┐) I, рдмреЗрд╢рдХ, рдЙрдкрд▓рдмреНрдз рдереЗ, рд▓реЗрдХрд┐рди рд╡рд┐рднрд┐рдиреНрди рд╕реНрдерд╛рдиреЛрдВ рдФрд░ рд╕рдмрд╕реЗ рд╡рд┐рдЪрд┐рддреНрд░ рд╕реНрд╡рд░реВрдкреЛрдВ рдореЗрдВред рд▓реЗрдХрд┐рди рд╕рд╛рдд рд╕реМ рдХреЙрдкреА-рдкреЗрд╕реНрдЯ - рдЦрд╛рд░рд┐рдЬред рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдереЛрдбрд╝рд╛ рдкреНрдпреБрдиреЛ рд╕реАрдЦрдирд╛ рдкрдбрд╝рд╛ред рдмрд╕ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ - рдореИрдВ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдПрдХ рдкрд╛рдпрдерди рдмрдВрдзрди рд╕реЗ рдПрдХ OOo рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЗ рдкреНрд░рдмрдВрдзрди рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реВрдВрдЧрд╛, рдЕрдЧрд░ рдХреЛрдИ рдХрд╛рдо рдЖрддрд╛ рд╣реИред

рд╣рдореЗрдВ Open Office рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ Open Office , python рдФрд░, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдмрд╛рдВрдзрдиреЗ рдХреА рдорд╢реАрди:
 $ sudo yum search pyuno ure 

рд╣рдо OOo рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ (рд╣рдореЗрдВ рд╕реНрдкреНрд░реЗрдбрд╢реАрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд┐рдзрд┐ рд╕рднреА рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддреА рд╣реИ - рдЙрджрд╛рд╣рд░рдг 2 рджреЗрдЦреЗрдВ) "рд╕реБрдиреЗ рд╕реЙрдХреЗрдЯ" рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рд╛рде рдЪрд╛рд▓реВ рдХрд░реЗрдВ:
 $ oocalc "-accept=socket,host=localhost,port=8100;urp;" & $ soffice "-accept=socket,host=localhost,port=8100;urp;" -writer -headless & 

... рдФрд░ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯ рдХрд░реЗрдВред рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП - рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ:
 import uno from os.path import abspath, isfile, splitext def getDocument(inputFile) : localContext = uno.getComponentContext() resolver = localContext.ServiceManager.createInstanceWithContext( \ "com.sun.star.bridge.UnoUrlResolver", localContext) try: context = resolver.resolve( \ "uno:socket,host=localhost,port=%s;urp;StarOffice.ComponentContext" % 8100) except NoConnectException: raise Exception, "failed to connect to OpenOffice.org on port %s" % 8100 desktop = context.ServiceManager.createInstanceWithContext( \ "com.sun.star.frame.Desktop", context) document = desktop.loadComponentFromURL( \ uno.systemPathToFileUrl(abspath(inputFile)), "_blank", 0, tuple([])) 

рдореИрдВ рдкрд╛рда рдлрд╝рд╛рдЗрд▓реЛрдВ рд╕реЗ рдЕрдВрддрд┐рдо рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рднрд░рдиреЗ рдФрд░ рдЗрд╕ рдиреЛрдЯ рдХреЗ рджрд╛рдпрд░реЗ рд╕реЗ рдкрд░реЗ рдкрд░рд┐рд╡рд░реНрддрди-рд▓реЙрдЧ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдХреА рдкреНрд░рд╛рдкреНрддрд┐ рдХреЛ рдЫреЛрдбрд╝ рджреВрдВрдЧрд╛ред рдЙрдиреНрд╣реЗрдВ рдмрд╕ рдПрдХ рдЬрд╛рджреВ рдХреА рдЫрдбрд╝реА рдХреА рдПрдХ рд▓рд╣рд░ рдХреЗ рд╕рд╛рде data рдЫрджреНрдо data рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВред рддреЛ, рдЪрд▓рд┐рдП рдЕрдкрдирд╛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рднрд░рдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ (рдХреЙрд▓рдо рдирдВрдмрд░ 2 рднрд░реЗрдВ):
 from com.sun.star.beans import PropertyValue def fillDocument(inputFile, col, data) : try: sheet = getDocument(inputFile).getSheets().getByIndex(0) row = 2 while True: row = row + 1 val = sheet.getCellByPosition(col, row).getFormula() if val != '' : sheet.getCellByPosition(col, row).setFormula(val.replace(%VERSION%, data)) else : break; ''' All the rows are now filled, It's time to save our modified document ''' props = [] prop = PropertyValue() prop.Name = "FilterName" prop.Value = "MS Excel 97" props.append(prop) document.storeToURL(uno.systemPathToFileUrl(abspath(inputFile)) + ".out.xls", tuple(props)) finally: document.close(True) 

рдЗрд╕реА рддрд░рд╣, рдЖрдк рдХрд┐рд╕реА рдЕрдиреНрдп рдХреЙрд▓рдо рдХреЗ рд╕рд╛рде рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдк рдЕрдиреБрд╡рд╛рдж рдХреЗ рд▓рд┐рдП рд╕рдбрд╝рдХ рдкрд░ Google рдЕрдиреБрд╡рд╛рдж рдкрд░ рднреА рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред

рдХреБрдЫ рдФрд░ рдЙрдкрдпреЛрдЧреА рд╕реБрд╡рд┐рдзрд╛рдПрдБ


рдПрдХ рдФрд░ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдбрд╛рд▓реЗрдВ


 ''' Required for Ctrl+G :-) ''' from com.sun.star.style.BreakType import PAGE_BEFORE, PAGE_AFTER def addAtTheEnd(inputFile) : cursor.gotoEnd(False) cursor.BreakType = PAGE_BEFORE cursor.insertDocumentFromURL(uno.systemPathToFileUrl(abspath(inputFile)), ()) 

рдЦреЛрдЬреЗрдВ рдФрд░ рдмрджрд▓реЗрдВ


 def findAndReplace(pattern, substTo, replaceAll, caseSensitive) : search = document.createSearchDescriptor() search.SearchRegularExpression = True search.SearchString = pattern search.SearchCaseSensitive = caseSensitive result = document.findFirst(search) while found: result.String = string.replace(result.String, pattern, substTo) if not replaceAll : break result = document.findNext(result.End, pattern) 

рдкреАрдбреАрдПрдл рдХреЛ рдирд┐рд░реНрдпрд╛рдд рдХрд░реЗрдВ


 def exportToPDF(outputFile) props = [] prop = PropertyValue() prop.Name = "FilterName" prop.Value = "writer_pdf_Export" props.append(prop) document.storeToURL(uno.systemPathToFileUrl(abspath(outputFile)), tuple(props)) 

рддреНрдпрд╛рдЧ


рдореИрдВ рддреБрд░рдВрдд рдПрдХ рдЖрд░рдХреНрд╖рдг рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ: рдХреЛрдб рдПрдХ рдмрд╛рд░ рдШреБрдЯрдиреЗ рдХреЗ рдЙрдЪреНрдЪ рдЧреЛрд╡рд╛рдиреЛрдХреЙрдб рд╣реЛрдиреЗ рдХрд╛ рджрд╛рд╡рд╛ рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЬреИрд╕рд╛ рдХрд┐ "рд░рд┐рдкреЛрд░реНрдЯ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЬрд▓реНрджреА рд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рджреЛ" - рдореИрдВрдиреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмрд╣реБрдд рд╕рдордп рдмрдЪрд╛рдпрд╛ рд╣реИред

- рдпрд╣рд╛рдВ рдФрд░ рдЖрдкрдХреЗ рдЖрд╕-рдкрд╛рд╕ рдХреБрдЫ рдФрд░ рдЬрд╛рдирдХрд╛рд░реА рдПрдХрддреНрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: http://wiki.services.openoffice.org/wiki/Uno-FAQ
- OOo рдХреЗ рд▓рд┐рдП рдкрд╛рдпрдерди рдЯреЗрдореНрдкрд▓реЗрдЯ рдЗрдВрдЬрди: appyframework.org
- рд╡рд╣реА, рдХреЗрд╡рд▓ C ++ рдХреЗ рд▓рд┐рдП: habrahabr.ru/blogs/cpp/116228

рдЕрджреНрдпрддрди: рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ рдПрдХ рдФрд░ рддрд░реАрдХрд╛ рд╕реБрдЭрд╛рддреА рд╣реИрдВ : xlwt ред
Update2: рдЕрдзрд┐рдХ " newfangled " xlsx рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдЙрдкрдпреЛрдЧреА рдХрд╛рд░реНрдп рд╣реИ: xlsx.dllkiki.com ред
рджреЛрдиреЛрдВ рдкрд░рд┐рд╡рд░реНрдзрди рдХреЗ рд▓рд┐рдП - рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж рдЯреИрдиреЗрди рдХреЗ рд▓рд┐рдП ред


Source: https://habr.com/ru/post/In116409/


All Articles