SFDocuments.Document service/text/sbasic/shared/03/sf_document.xhpDocument service
SFDocuments.Document service
The SFDocuments library provides methods and properties to facilitate the management and manipulation of %PRODUCTNAME documents.Methods that are applicable for all types of documents (Text Documents, Sheets, Presentations, etc) are provided by the SFDocuments.Document service. Some examples are:Opening, closing and saving documentsAccessing standard or custom properties of documentsThe properties, methods or arguments marked with (*) are NOT applicable to Base documents.Methods and properties that are specific to certain %PRODUCTNAME components are stored in separate services, such as SFDocuments.SF_Calc and SFDocuments.SF_Base.Although the Basic language does not offer inheritance between object classes, the latter services may be considered as subclasses of the SFDocuments.Document service. Such subclasses can invoke the properties and methods described below.
Service invocation
Before using the Document service the ScriptForge library needs to be loaded or imported:Below are three variants of how the Document service can be invoked.Using the getDocument method from the ScriptForge.UI service:Dim ui As Object, oDoc As ObjectSet ui = CreateScriptService("UI")Set oDoc = ui.GetDocument("Untitled 1")Alternatively you can use the methods CreateDocument and OpenDocument from the UI service.Set oDocA = ui.CreateDocument("Calc")Set oDocB = ui.OpenDocument("C:\Documents\MyFile.odt")Using a window name if the document is already open.Dim oDoc As ObjectSet oDoc = CreateScriptService("SFDocuments.Document", "Untitled 1") 'Default = ActiveWindowUsing the document referenced by ThisComponent. This is specially useful when running a macro from within the Basic IDE.Dim oDoc As ObjectSet oDoc = CreateScriptService("Document", ThisComponent)From a macro triggered by a document event.Sub RunEvent(ByRef poEvent As Object) Dim oDoc As Object Set oDoc = CreateScriptService("SFDocuments.DocumentEvent", poEvent) ' (...)End SubThe Document service is closely related to the UI and FileSystem services.Except when the document was closed by program with the CloseDocument method (it is then superfluous), it is recommended to free resources after use:Set oDoc = oDoc.Dispose()from scriptforge import CreateScriptServiceui = CreateScriptService("UI")doc = ui.GetDocument("Untitled 1")# (...)doc.Dispose()docA = ui.CreateDocument("Calc")docB = ui.OpenDocument("C:\Documents\MyFile.odt")doc = CreateScriptService("SFDocuments.Document", "Untitled 1")bas = CreateScriptService("Basic")doc = CreateScriptService("Document", bas.ThisComponent)def RunEvent(event) doc = CreateScriptService("SFDocuments.DocumentEvent", Event) # (...)The use of the prefix "SFDocuments." while calling the service is optional.API;DurationAPI;XComponentAPI;ODatabaseDocumentDocument service;CustomProperties propertyDocument service;Description propertyDocument service;DocumentProperties propertyDocument service;DocumentType propertyDocument service;ExportFilters propertyDocument service;FileSystem propertyDocument service;ImportFilters propertyDocument service;IsBase propertyDocument service;IsCalc propertyDocument service;IsDraw propertyDocument service;IsFormDocument propertyDocument service;IsImpress propertyDocument service;IsMath propertyDocument service;IsWriter propertyDocument service;Keywords propertyDocument service;Readonly propertyDocument service;StyleFamilies propertyDocument service;Subject propertyDocument service;Title propertyDocument service;XComponent propertyDocument service;XDocumentSettings property
Properties
NameReadonlyTypeDescriptionCustomProperties (*)NoDictionary serviceReturns a ScriptForge.Dictionary object instance. After update, can be passed again to the property for updating the document. Individual items of the dictionary may be either strings, numbers, (Basic) dates or com.sun.star.util.Duration items.Description (*)NoStringGives access to the Description property of the document (also known as "Comments")DocumentProperties (*)YesDictionary serviceReturns a ScriptForge.Dictionary object containing all the entries. Document statistics are included. Note that they are specific to the type of document. As an example, a Calc document includes a "CellCount" entry. Other documents do not.DocumentTypeYesStringString value with the document type ("Base", "Calc", "Writer", etc)ExportFilters (*)YesString arrayReturns a list with the export filter names applicable to the current document as a zero-based array of strings. Filters used for both import/export are also returned.FileSystem (*)YesStringReturns a string with the URL path to the root of the virtual file system of the document. Use the FileSystem service to view its contents, as well as to create, open and read files stored in it.Refer to this help page to learn more on how to access and manipulate folders and files in the virtual file system of a %PRODUCTNAME file.ImportFilters (*)YesString arrayReturns a list with the import filter names applicable to the current document as a zero-based array of strings. Filters used for both import/export are also returned.
IsBase IsCalc IsDraw IsFormDocument IsImpress IsMath IsWriter
YesBooleanExactly one of these properties is True for a given document.Keywords (*)NoStringGives access to the Keywords property of the document. Represented as a comma-separated list of keywordsReadonly (*)YesBooleanTrue if the document is actually in read-only modeStyleFamilies (*)YesString arrayList of available style families. Applicable to all document types except Base.Subject (*)NoStringGives access to the Subject property of the document.Title (*)NoStringGives access to the Title property of the document.XComponentYesUNO ObjectThe UNO object com.sun.star.lang.XComponent or com.sun.star.comp.dba.ODatabaseDocument representing the document.XDocumentSettings (*)YesUNO ObjectA com.sun.star.XXX.DocumentSettings UNO object - where XXX is sheet, text, drawing or presentation - that gives access to UNO internal properties, that are specific to the document's type.
The example below prints all the properties of a document. Note that the oDoc object returned by the UI.OpenDocument method is a SFDocuments.Document object.Dim ui as Variant : Set ui = CreateScriptService("UI")Dim oDoc as ObjectSet oDoc = ui.OpenDocument("C:\Documents\MyFile.ods")Dim propDict as ObjectSet propDict = oDoc.DocumentPropertiesDim keys as Variant : propKeys = propDict.KeysDim k as String, strProp as StringFor Each k In propKeys strProp = strProp & k & ": " & propDict.Item(k) & CHR$(10)Next kMsgBox strPropoDoc.CloseDocument()To access document properties in a Python script the user needs to directly access them using their names, as shown below:doc = ui.GetDocument(r"C:\Documents\MyFile.ods")msg = doc.Title + '\n' + doc.Description + '\n' + doc.Keywordsbas = CreateScriptService("Basic")bas.MsgBox(msg)doc.CloseDocument()
List of Methods in the Document Service
Activate
CloseDocument
CreateMenu
DeleteStyles
Echo
ExportAsPDF
ImportStylesFromFile
PrintOut
RemoveMenu
RunCommand
Save
SaveAs
SaveCopyAs
SetPrinter
Style
Toolbars
XStyle
Returns True if the document could be activated. Otherwise, there is no change in the actual user interface. It is equivalent to the Activate method of the UI service.This method is useful when one needs to give focus for a document that is minimized or hidden.
svc.Activate(): bool
The example below considers that the file "My_File.ods" is already open but not active.Dim oDoc As ObjectSet oDoc = CreateScriptService("Document", "MyFile.ods")oDoc.Activate()doc = CreateScriptService("Document", "MyFile.ods")doc.Activate()Keep in mind that you can invoke the Document service by passing to CreateScriptService either "Document" or "SFDocuments.Document" CloseDocument ---------------------------------------------------------------- Document service;CloseDocument
CloseDocument
Closes the document. If the document is already closed, regardless of how the document was closed, this method has no effect and returns False.The method will also return False if the user declines to close it.Returns True if the document was successfully closed.
svc.CloseDocument(saveask: bool = True): bool
saveask : If True (default), the user is invited to confirm if the changes should be written on disk. This argument is ignored if the document was not modified.If oDoc.CloseDocument(True) Then ' ...End Ifif doc.CloseDocument(True): # ... CreateMenu --------------------------------------------------------------------------------------------- Document service;CreateMenu
CreateMenu
Creates a new menu entry in the menubar of a given document window.This method returns an instance of the SFWidgets.Menu service.The menu created is only available during the current %PRODUCTNAME session and is not saved neither in the document nor in the global application settings. Hence closing the document window will make the menu disappear. It will only reappear when the macro that creates the menu is executed again.
svc.CreateMenu(menuheader: str, [before: any], submenuchar: str = ">"): svc
menuheader: The toplevel name of the new menu.before: The name (as a string) or position (as an integer starting at 1) of an existing menu before which the new menu will be placed. If no value is defined for this argument, the menu will be created at the last position in the menubar.submenuchar: The delimiter used to create menu trees when calling methods as AddItem from the Menu service. The default value is ">".Dim oDoc as Object, oMenu as ObjectSet oDoc = CreateScriptService("Document")Set oMenu = oDoc.CreateMenu("My Menu")With oMenu ' Add items to the menu .AddItem("Item A") .AddItem("Item B") ' ... ' After creating the menu, the service instance can be disposed of .Dispose()End Withdoc = CreateScriptService("Document")menu = doc.CreateMenu("My Menu")menu.AddItem("Item A")menu.AddItem("Item B")# ...menu.Dispose()Refer to the SFWidgets.Menu help page to learn more about how to create/remove menus in %PRODUCTNAME document windows. DeleteStyles --------------------------------------------------------------------------------------------- Document service;DeleteStyles
DeleteStyles
Suppresses a single style or an array of styles given by their names within a specific styles family. Only user-defined styles may be deleted, built-in styles are ignored. It applies to all document types except Base and FormDocument.
svc.DeleteStyles(family: str, stylelist: str[1..*])
family: One of the style families present in the actual document, as a case-sensitive string. Valid family names can be retrieved using StyleFamilies property.stylelist: A single style name as a string or an array of style names. The style names may be localized or not. The StylesList is typically the output of the execution of a Styles() method.' Removing unused paragraph stylesConst family = "ParagraphStyles"aList = oDoc.Styles(family, used := False, userDefined := True)oDoc.DeleteStyles(family, aList)# Removing styles according to a prefixa_list = doc.Styles('ParagraphStyles', namepattern = "Py*")doc.Styles('ParagraphStyles', a_list) Echo ------------------------------------------------------------------------------------------------ Document service;Echo
Echo
Suspends user interface (UI) updates during the execution of a macro. Optionally, the mouse pointer can be changed into an hourglass while UI updates are suspended.This method may provide some performance benefits for macros that perform numerous operations that require UI updates.
svc.Echo(echoon: bool = True, hourglass: bool = False)
echoon: Specify False to suspend UI updates. The default value is True, which enables real time UI updates.hourglass: Specify True to change the mouse pointer to an hourglass (Default = False).Moving the mouse pointer after it changed to an hourglass may cause it to switch to a different pointer depending on its new background.' Suspends UI updates and change mouse pointer to an hourglassoDoc.Echo(EchoOn := False, HourGlass := True)' Other macro commands' ...' Restores UI updates and mouse pointeroDoc.Echo()doc.Echo(echoon = False, hourglass = True)...doc.Echo() ExportAsPDF -------------------------------------------------------------------------------------------- Document service;ExportAsPDF
ExportAsPDF
Exports the document directly as a PDF file to the specified location. Returns True if the PDF file was successfully created.The export options can be set either manually using the dialog or by calling the methods GetPDFExportOptions and SetPDFExportOptions from the Session service.
svc.ExportAsPDF(filename: str, overwrite: bool = False, opt pages: str, opt password: str, opt watermark: str): bool
filename: The full path and file name of the PDF to be created. It must follow the SF_FileSystem.FileNaming notation.overwrite: Specifies if the destination file can be overwritten (Default = False). An error will occur if overwrite is set to False and the destination file already exists.pages: String specifying which pages will be exported. This argument uses the same notation as in the dialog .password: Specifies a password to open the PDF file.watermark: Text to be used as watermark in the PDF file, which will be drawn in every page of the resulting PDF.The following example exports the current document as a PDF file, defines a password and overwrites the destination file if it already exists.oDoc.ExportAsPDF("C:\User\Documents\myFile.pdf", Password := "1234", Overwrite := True)The code snippet below gets the current PDF export options and uses them to create the PDF file.Dim exportSettings as Object, oSession as ObjectoSession = CreateScriptService("Session")exportSettings = oSession.GetPDFExportOptions()' Sets to True the option to export comments as PDF notesexportSettings.ReplaceItem("ExportNotes", True)oSession.SetPDFExportOptions(exportSettings)oDoc.ExportAsPDF("C:\User\Documents\myFile.pdf")doc.ExportAsPDF(r"C:\User\Documents\myFile.pdf", password = "1234", overwrite = True)session = CreateScriptService("Session")exportSettings = oSession.GetPDFExportOptions()exportSettings.ReplaceItem("ExportNotes", True)session.SetPDFExportOptions(exportSettings)doc.ExportAsPDF(r"C:\User\Documents\myFile.pdf") ImportStylesFromFile ---------------------------------------------------------------- Document service;ImportStylesFromFile
ImportStylesFromFile
This method loads all the styles belonging to one or more style families from a closed file into the actual document. The actual document must be a Calc or a Writer document. Are always imported together:ParagraphStyles and CharacterStylesNumberingStyles and ListStylesReturns True if styles were successfully imported.
svc.ImportStylesFromFile(filename: str, families: str[1..*], overwrite = False): bool
filename: The file from which to load the styles in the FileSystem notation. The file is presumed to be of the same document type as the actual document.families: One of the style families present in the actual document, as a case-sensitive string or an array of such strings. Default = all families.overwrite: When True, the actual styles may be overwritten. Default is False.oDoc.ImportStylesFromFile("C:\User\Documents\myFile.ods", "ParagraphStyles", True)doc.ImportStylesFromFile('C:\User\Documents\myFile.ods', ("ParagraphStyles",), False) PrintOut ---------------------------------------------------------------- Document service;PrintOut
PrintOut
This method sends the contents of the document to the default printer or to the printer defined by the SetPrinter method.Returns True if the document was successfully printed.
svc.PrintOut(pages: str = "", copies: num = 1): bool
pages: The pages to print as a string, like in the user interface. Example: "1-4;10;15-18". Default is all pages.copies: The number of copies. Default is 1.If oDoc.PrintOut("1-4;10;15-18", Copies := 2) Then ' ...End Ifif doc.PrintOut(copies=3, pages='45-88'): # ... RemoveMenu --------------------------------------------------------------------------------------------- Document service;RemoveMenu
RemoveMenu
Removes a toplevel menu from the menubar of a given document window.Returns True if the specified menu could be removed. If the specified menu does not exist, the method returns False.This method can be used to remove any menu entry from the document window, including default menus. However, none of these changes in the menubar are saved to the document or to the application settings. To restore the menubar to the default settings, simply close and reopen the document window.
svc.RemoveMenu(menuheader: str): bool
menuheader: The toplevel name of the menu to be removed.Dim oDoc as ObjectSet oDoc = CreateScriptService("Document")oDoc.RemoveMenu("My Menu")doc = CreateScriptService("Document")doc.RemoveMenu("My Menu") RunCommand --------------------------------------------------------------- Document service;RunCommand
RunCommand
Runs a UNO command on the document window associated with the service instance. A few typical commands are: Save, SaveAs, ExportToPDF, Undo, Copy, Paste, etc.The document itself does not need to be active to be able to run commands.Commands can be run with or without arguments. Arguments are not validated before running the command. If the command or its arguments are invalid, then nothing will happen.For a complete list of UNO commands that can be run in %PRODUCTNAME, refer to the Wiki page Development/DispatchCommands.
svc.RunCommand(command: str, [args: any])
command: Case-sensitive string containing the UNO command name. The inclusion of the prefix ".uno:" in the command is optional. The command itself is not checked for correctness. If nothing happens after the command call, then the command is probably wrong.args: For each argument to be passed to the command, specify a pair containing the argument name and value.The following example runs the SelectData command in a Calc file named "MyFile.ods", which will result in the selection of the data area based on the currently selected cell. Note that this command does not require any arguments.Set oDoc = CreateScriptService("Document", "MyFile.ods")oDoc.RunCommand("SelectData")Below is an example that runs the UNO command ReplaceAll and passes values for its arguments SearchString and ReplaceString. Running this command will replace all occurrence of the string "abc" by "ABC" in the current sheet.' Arguments passed to the command:' SearchString = "abc"' ReplaceString = "ABC"oDoc.RunCommand(".uno:ReplaceAll", "SearchString", "abc", "ReplaceString", "ABC")Note that calling the command ReplaceAll without arguments will open the dialog.doc = CreateScriptService("Document", "MyFile.ods")doc.RunCommand("SelectData")doc.RunCommand(".uno:ReplaceAll", "SearchString", "abc", "ReplaceString", "ABC")In Python it is also possible to call RunCommand using keyword arguments:doc.RunCommand(".uno:ReplaceAll", SearchString = "abc", ReplaceString = "ABC")Each %PRODUCTNAME component has its own set of commands available. One easy way to learn commands is going to Tools - Customize - Keyboard. When you position your mouse over a function in the Function list, a tooltip will appear with the corresponding UNO command. Save ------------------------------------------------------------------------ Document service;Save
Save
Stores the document to the file location from which it was loaded. The method is ignored if the document was not modified.Returns False if the document could not be saved. An error is raised if the file is open as read-only, or if it is a new file that has not been saved yet.The document itself does not need to be active to run this method.
svc.Save(): bool
If Not oDoc.Save() Then ' ...End Ifif not doc.Save(): # ... SaveAs --------------------------------------------------------------------------------------- Document service;SaveAs
SaveAs
Stores the document to the given file location. The new location becomes the new file name on which simple Save method calls will be applied.Returns False if the document could not be saved. An error is raised when overwriting the destination is rejected or when the destination has its read-only attribute set.The document itself does not need to be active to run this method.
svc.SaveAs(filename: str, overwrite: bool = False, password: str = '', filtername: str = '', filteroptions: str = ''): bool
filename: A string containing the file name to be used. It must follow the SF_FileSystem.FileNaming notation.overwrite: If True, the destination file may be overwritten (default = False).password (*): A non-space string to protect the document.filtername (*): The name of a filter that should be used for saving the document. If this argument is passed, then the filter must exist.filteroptions (*): An optional string of options associated with the filter.oDoc.SaveAs("C:\Documents\NewCopy.odt", overwrite := True)doc.SaveAs(r"C:\Documents\NewCopy.odt", overwrite = True) SaveCopyAs ------------------------------------------------------------------- Document service;SaveCopyAs
SaveCopyAs
Stores a copy of or export the document to the given file location. The actual location is unchanged.Returns False if the document could not be saved. An error is raised when overwriting the destination is rejected or when the destination has its read-only attribute set.The document itself does not need to be active to run this method.
svc.SaveCopyAs(filename: str, overwrite: bool = False, password: str = '', filtername: str = '', filteroptions: str = ''): bool
filename: A string containing the file name to be used. It must follow the SF_FileSystem.FileNaming notation.overwrite: If True, the destination file may be overwritten (default = False).password (*): A non-space string to protect the document.filtername (*): The name of a filter that should be used for saving the document. If this argument is passed, then the filter must exist.filteroptions (*): An optional string of options associated with the filter.oDoc.SaveCopyAs("C:\Documents\Copy2.odt", Overwrite := True)doc.SaveCopyAs(r"C:\Documents\Copy2.odt", overwrite = True) SetPrinter ------------------------------------------------------------------- Document service;SetPrinter
SetPrinter
Defines the printer options for the document.Returns True when successful.
svc.SetPrinter(opt printer: str, opt orientation: str, paperformat: str): bool
printer: The name of the printer queue where to print to. When absent, the default printer is set.orientation: Either PORTRAIT or LANDSCAPE. When absent, left unchanged with respect to the printer settings.paperformat: Specifies the paper format as a string value that can be either A3, A4, A5, LETTER, LEGAL or TABLOID. Left unchanged when absent.oDoc.SetPrinter(Orientation := "PORTRAIT")doc.SetPrinter(paperformat='TABLOID') Styles --------------------------------------------------------------------------------------------- Document service;Styles
Styles
Retrieves a list of styles matching an optional compound criteria, the returned array may be empty. It applies to all document types except Base.
svc.Styles(family, opt namepattern: str, opt used: bool, opt userdefined: bool, opt parentstyle: str, opt category: str): str[0..*])
category: A case-insensitive string: TEXT, CHAPTER, LIST, INDEX, EXTRA, HTML. For their respective meanings, refer to paragraph style category API documentation.This argument is ignored when the Family differs from "ParagraphStyles".namepattern: A filter on the style names, as a case-sensitive string pattern. The names include the internal and localized names.Admitted wildcard are:the "?" representing any single character.the "*" representing zero, one, or multiple charactersparentstyle: When present, only the children of the given, localized or not, parent style name are retained.used: When True, the style must be used in the document, when absent the argument is ignored.userdefined: When True, the style must have been added by the user, either in the document or its template, when absent, the argument is ignored.Dim vStyles As VariantvStyles = oDoc.Styles("ParagraphStyles") ' All styles in the familyvStyles = oDoc.Styles("ParagraphStyles", "H*") ' Heading, Heading 1, ...vStyles = oDoc.Styles("ParagraphStyles", Used := False, UserDefined := True) ' All user-defined styles that are not usedvStyles = oDoc.Styles("ParagraphStyles", ParentStyle := "Standard") ' All styles derived from the 'Default Paragraph Style'
vStyles = doc.Styles('ParagraphStyles') # All styles in the familyvStyles = doc.Styles('ParagraphStyles', 'H*') # Heading, Heading 1, ...vStyles = doc.Styles('ParagraphStyles', Used = False, UserDefined = True) # All user-defined styles that are not usedvStyles = doc.Styles('ParagraphStyles', ParentStyle = 'Standard") # All styles derived from the "Default Paragraph Style" XStyles --------------------------------------------------------------------------------------------- Document service;Toolbars Method definition is reused in various SF services --------------------------------------------------
Toolbars
This method returns either a list of the available toolbar names in the actual document or an instance SFWidgets.Toolbar service.
svc.Toolbars(opt ToolbarName: str): uno
svc.Toolbars(): str[0..]
ToolbarName: The usual name of one of the available toolbars.Dim oToolbar As ObjectSet oToolbar = oDoc.Toolbars("myToolbar")a_list = doc.Toolbars() XStyles --------------------------------------------------------------------------------------------- Document service;XStyles
XStyles
This method returns the UNO representation of a given style for all document types except Base. Nothing is returned when the StyleName does not exist in the given Family.
svc.XStyles(family: str, stylename: str): uno
stylename: One of the styles present in the given family, as a case-sensitive string. The StyleName may be localized or not.Dim oStyle As ObjectSet oStyle = oDoc.XStyle("ParagraphStyle", "Heading 2")oStyle = doc.XStyle('ParagraphStyle', 'Heading 2')