<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Generator" content="Microsoft Word 14 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:Wingdings;
        panose-1:5 0 0 0 0 0 0 0 0 0;}
@font-face
        {font-family:宋体;
        panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
        {font-family:宋体;
        panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
@font-face
        {font-family:"\@宋体";
        panose-1:2 1 6 0 3 1 1 1 1 1;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        text-align:justify;
        text-justify:inter-ideograph;
        font-size:10.5pt;
        font-family:"Calibri","sans-serif";
        color:black;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
p.MsoPlainText, li.MsoPlainText, div.MsoPlainText
        {mso-style-priority:99;
        mso-style-link:"Plain Text Char";
        margin:0cm;
        margin-bottom:.0001pt;
        font-size:10.5pt;
        font-family:"Calibri","sans-serif";
        color:black;}
pre
        {mso-style-priority:99;
        mso-style-link:"HTML Preformatted Char";
        margin:0cm;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:宋体;
        color:black;}
p.MsoAcetate, li.MsoAcetate, div.MsoAcetate
        {mso-style-priority:99;
        mso-style-link:"Balloon Text Char";
        margin:0cm;
        margin-bottom:.0001pt;
        text-align:justify;
        text-justify:inter-ideograph;
        font-size:8.0pt;
        font-family:"Calibri","sans-serif";
        color:black;}
span.PlainTextChar
        {mso-style-name:"Plain Text Char";
        mso-style-priority:99;
        mso-style-link:"Plain Text";
        font-family:"Calibri","sans-serif";}
span.HTMLPreformattedChar
        {mso-style-name:"HTML Preformatted Char";
        mso-style-priority:99;
        mso-style-link:"HTML Preformatted";
        font-family:"Courier New","serif";
        color:black;}
span.BalloonTextChar
        {mso-style-name:"Balloon Text Char";
        mso-style-priority:99;
        mso-style-link:"Balloon Text";
        font-family:"Calibri","sans-serif";
        color:black;}
span.EmailStyle23
        {mso-style-type:personal-reply;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:72.0pt 90.0pt 72.0pt 90.0pt;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body bgcolor="white" lang="ZH-CN" link="blue" vlink="purple">
<div class="WordSection1">
<p class="MsoNormal" align="left" style="text-align:left"><span lang="EN-US" style="font-size:10.0pt;font-family:"Tahoma","sans-serif";color:windowtext">Hi Andrew and
</span><span lang="EN-US">Fernand,<o:p></o:p></span></p>
<p class="MsoNormal" align="left" style="text-align:left"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal" align="left" style="text-align:left"><span lang="EN-US">Thanks a lot for your help.<o:p></o:p></span></p>
<p class="MsoNormal" align="left" style="text-align:left"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal" align="left" style="text-align:left"><span lang="EN-US">With your hint, I’ve found a way to get file path for all opened spreadsheet documents with Java, my code is as follow.<o:p></o:p></span></p>
<p class="MsoNormal" align="left" style="text-align:left"><span lang="EN-US">-------------------------------------------------------------------------------------------------------------------------------------------------------------------<o:p></o:p></span></p>
<div style="mso-element:para-border-div;border:none;border-bottom:solid windowtext 1.0pt;padding:0cm 0cm 1.0pt 0cm">
<p class="MsoNormal" style="text-indent:31.5pt;border:none;padding:0cm"><span lang="EN-US">String ooExeFolder = "/usr/lib64/libreoffice/program";<br>
            XComponentContext xContext = BootstrapSocketConnector.bootstrap(ooExeFolder);<br>
            XMultiComponentFactory xMCF = xContext.getServiceManager();<br>
            Object desktop = xMCF.createInstanceWithContext("com.sun.star.frame.Desktop", xContext);<br>
            XDesktop xDesktop = (XDesktop)UnoRuntime.queryInterface(XDesktop.class, desktop);<br>
            XEnumeration xenum  = xDesktop.getComponents().createEnumeration();<br>
<br>
             while(xenum.hasMoreElements()) {<br>
                      Object obj = xenum.nextElement();<br>
                      XComponent x = (XComponent)UnoRuntime.queryInterface(XComponent.class, obj);<br>
                      XModel xm = (XModel)UnoRuntime.queryInterface(XModel.class, x);
<br>
                      if (xm != null) {<br>
                          String url = xm.getURL(); //url is what I want<br>
                          System.out.println(url);<br>
                      }<br>
             }<o:p></o:p></span></p>
</div>
<p class="MsoNormal" align="left" style="text-align:left"><b><span lang="EN-US" style="font-size:10.0pt;font-family:"Tahoma","sans-serif";color:windowtext"><o:p> </o:p></span></b></p>
<p class="MsoNormal" align="left" style="text-align:left"><span lang="EN-US" style="font-size:10.0pt;font-family:"Tahoma","sans-serif";color:windowtext">Best Regards<o:p></o:p></span></p>
<p class="MsoNormal" align="left" style="text-align:left"><span lang="EN-US" style="font-size:10.0pt;font-family:"Tahoma","sans-serif";color:windowtext">William<o:p></o:p></span></p>
<p class="MsoNormal" align="left" style="text-align:left"><b><span lang="EN-US" style="font-size:10.0pt;font-family:"Tahoma","sans-serif";color:windowtext"><o:p> </o:p></span></b></p>
<p class="MsoNormal" align="left" style="text-align:left"><b><span lang="EN-US" style="font-size:10.0pt;font-family:"Tahoma","sans-serif";color:windowtext">---------------------------------------------------------------------------------------------------------------------------------------------------------------------<o:p></o:p></span></b></p>
<p class="MsoNormal" align="left" style="text-align:left"><b><span lang="EN-US" style="font-size:10.0pt;font-family:"Tahoma","sans-serif";color:windowtext">From:</span></b><span lang="EN-US" style="font-size:10.0pt;font-family:"Tahoma","sans-serif";color:windowtext">
 SOS [mailto:sos@pmg.be] <br>
<b>Sent:</b> 2015</span><span style="font-size:10.0pt;font-family:宋体;color:windowtext">年</span><span lang="EN-US" style="font-size:10.0pt;font-family:"Tahoma","sans-serif";color:windowtext">6</span><span style="font-size:10.0pt;font-family:宋体;color:windowtext">月</span><span lang="EN-US" style="font-size:10.0pt;font-family:"Tahoma","sans-serif";color:windowtext">11</span><span style="font-size:10.0pt;font-family:宋体;color:windowtext">日</span><span lang="EN-US" style="font-size:10.0pt;font-family:"Tahoma","sans-serif";color:windowtext">
 0:52<br>
<b>To:</b> Zhang, William; users@global.libreoffice.org<br>
<b>Subject:</b> Re: Q: How to get the path of all opened spreadsheet documents<o:p></o:p></span></p>
<p class="MsoNormal" align="left" style="text-align:left"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"> Zhang<br>
<br>
in basic i use this function<br>
<br>
Function TaskonDesktop(DocPath as String) as Boolean<br>
<br>
Dim oComponents as Object<br>
<br>
    ' Search if one of the active Components ist the one that you search for<br>
    oComponents = StarDesktop.Components.CreateEnumeration<br>
    While oComponents.HasmoreElements<br>
        oComponent = oComponents.NextElement<br>
'print    UCase(oComponent.URL) & " - " & UCase(converttoURL(DocPath)<br>
            If UCase(oComponent.URL) = UCase(converttoURL(DocPath)) then<br>
                TaskonDesktop = True<br>
        Exit Function<br>
        End If<br>
    Wend<br>
    TaskonDesktop = False<br>
End Function<br>
<br>
<br>
hope it helps<br>
<br>
Fernand<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:#1F497D"><o:p> </o:p></span></p>
<div>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0cm 0cm 0cm">
<p class="MsoNormal" align="left" style="text-align:left"><b><span lang="EN-US" style="font-size:10.0pt;font-family:"Tahoma","sans-serif";color:windowtext">From:</span></b><span lang="EN-US" style="font-size:10.0pt;font-family:"Tahoma","sans-serif";color:windowtext">
 Andrew Douglas Pitonyak [mailto:andrew@pitonyak.org] <br>
<b>Sent:</b> 2015</span><span style="font-size:10.0pt;font-family:宋体;color:windowtext">年</span><span lang="EN-US" style="font-size:10.0pt;font-family:"Tahoma","sans-serif";color:windowtext">6</span><span style="font-size:10.0pt;font-family:宋体;color:windowtext">月</span><span lang="EN-US" style="font-size:10.0pt;font-family:"Tahoma","sans-serif";color:windowtext">8</span><span style="font-size:10.0pt;font-family:宋体;color:windowtext">日</span><span lang="EN-US" style="font-size:10.0pt;font-family:"Tahoma","sans-serif";color:windowtext">
 19:20<br>
<b>To:</b> Zhang, William<br>
<b>Cc:</b> libreoffice@lists.freedesktop.org<br>
<b>Subject:</b> Re: Q: How to get the path of all opened spreadsheet documents<o:p></o:p></span></p>
</div>
</div>
<p class="MsoNormal" align="left" style="text-align:left"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal" style="margin-bottom:12.0pt"><span lang="EN-US"><br>
Calc documents implement the following service:<br>
<br>
com.sun.star.sheet.SpreadsheetDocument<br>
<br>
Using that with the examples below based on a write document:<br>
<br>
<br>
'******************************************************************************************<br>
'// Count the total number of open componets.<br>
'// This includes all document types as well<br>
'// as things such as the Basic IDE and help windows.<br>
'******************************************************************************************<br>
Function numberOfOpenComponents As Integer<br>
  Dim i As Integer<br>
  Dim oDocs<br>
  Dim oDoc<br>
  i = 0<br>
  <br>
  oDocs = StarDesktop.getComponents().createEnumeration()<br>
  Do While oDocs.hasMoreElements()<br>
    oDoc = oDocs.nextElement()<br>
    i = i + 1<br>
  Loop<br>
  numberOfOpenComponents = i<br>
End Function<br>
<br>
'******************************************************************************************<br>
'// Count number of open Write documents. <br>
'******************************************************************************************<br>
Function countOpenWriteDocs() As Integer<br>
  countOpenWriteDocs = countTypedComponents("com.sun.star.text.TextDocument")<br>
End Function<br>
<br>
'******************************************************************************************<br>
'// Count number of documents that are open with the specified service type.<br>
'******************************************************************************************<br>
Function countTypedComponents(serviceName$) As Integer<br>
  Dim i As Integer<br>
  Dim oDocs<br>
  Dim oDoc<br>
  i = 0<br>
  <br>
  oDocs = StarDesktop.getComponents().createEnumeration()<br>
  Do While oDocs.hasMoreElements()<br>
    oDoc = oDocs.nextElement()<br>
    If oDoc.supportsService(serviceName) Then<br>
      i = i + 1<br>
    End If<br>
  Loop<br>
  countTypedComponents = i<br>
End Function<br>
<br>
'******************************************************************************************<br>
'// Return true if the specified document is a Write document.<br>
'******************************************************************************************<br>
Function isWriteDocument(oDoc) As Boolean<br>
  If IsNull(oDoc) Then<br>
    isWriteDocument = False<br>
  ElseIf IsEmpty(oDoc) Then<br>
    isWriteDocument = False<br>
  ElseIf  oDoc.supportsService("com.sun.star.text.TextDocument") Then<br>
    isWriteDocument = True<br>
  Else<br>
    isWriteDocument = False<br>
  End If<br>
End Function<br>
<br>
<br>
<br>
<o:p></o:p></span></p>
<div>
<p class="MsoNormal"><span lang="EN-US">On 06/07/2015 09:21 PM, Zhang, William wrote:<o:p></o:p></span></p>
</div>
<blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
<p class="MsoPlainText"><span lang="EN-US">Hi Andrew,<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US"> <o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">Thanks a lot for your reply.<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US"> <o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">Q1: In your case do you only care about documents that have been saved... Ignoring new never saved to disk docs?<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US" style="font-family:Wingdings">à</span><span lang="EN-US">What I want to get is all calc documents as long as the doc is opened, no matter it have been saved or not.<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">  So firstly, I want to know if it</span><span lang="EN-US" style="font-family:"Courier New","serif"">’</span><span lang="EN-US">s possible to do it in this case. If no, maybe I can only care the doc which have been
 saved and ignore which is not saved.<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US"> <o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">Q2: You enumerate the open components from the desktop object and check of the component is a calc document.<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US" style="font-family:Wingdings">à</span><span lang="EN-US">Sorry, I know how to get the desktop object, but I am not clear how to get the open component and check them as you mentioned.<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">  This is my gap, would you please give example code based on my comment for Q1?<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US"> <o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">Thanks in advanced!<br>
<br>
<br>
<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">Best Regards<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">William<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">-----Original Message-----<br>
From: Andrew Pitonyak [<a href="mailto:andrew@pitonyak.org">mailto:andrew@pitonyak.org</a>]
<br>
Sent: 2015</span><span style="font-family:宋体">年</span><span lang="EN-US">6</span><span style="font-family:宋体">月</span><span lang="EN-US">5</span><span style="font-family:宋体">日</span><span lang="EN-US"> 19:15<br>
To: Zhang, William<br>
Cc: <a href="mailto:libreoffice@lists.freedesktop.org">libreoffice@lists.freedesktop.org</a><br>
Subject: Re: Q: How to get the path of all opened spreadsheet documents<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US"> <o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">No time to find the solution now.... But I have done this sort of thing in basic.<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US"> <o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">You enumerate the open components from the desktop object and check of the component is a calc document.<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US"> <o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">In your case do you only care about documents that have been saved... Ignoring new never saved to disk docs?<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US"> <o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">Think I can find a basic example of it helps<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US"> <o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">On Jun 4, 2015 10:35 PM, "Zhang, William" <<a href="mailto:william.zhang@ptn.advantest.com"><span style="color:windowtext;text-decoration:none">william.zhang@ptn.advantest.com</span></a>> wrote:<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> <o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> Hi,<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> <o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> </span><span lang="EN-US" style="font-family:"Courier New","serif""> </span><span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> <o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> Request:<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> <o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> In RedHat7, I want to get the path of all opened spreadsheet documents with Java.<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> <o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> </span><span lang="EN-US" style="font-family:"Courier New","serif""> </span><span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> <o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> What I</span><span lang="EN-US" style="font-family:"Courier New","serif"">’</span><span lang="EN-US">ve done:<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> <o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> 1.</span><span lang="EN-US" style="font-family:"Courier New","serif"">      </span><span lang="EN-US"> I used Runtime.exec(cmd</span><span lang="EN-US" style="font-family:"Courier New","serif"">…</span><span lang="EN-US">)
 with Java code, the </span><span lang="EN-US" style="font-family:"Courier New","serif"">‘</span><span lang="EN-US">cmd</span><span lang="EN-US" style="font-family:"Courier New","serif"">’</span><span lang="EN-US"> was defined with
</span><span lang="EN-US" style="font-family:"Courier New","serif"">“</span><span lang="EN-US">ps
</span><span lang="EN-US" style="font-family:"Courier New","serif"">–</span><span lang="EN-US">ef | grep xxx</span><span lang="EN-US" style="font-family:"Courier New","serif"">”</span><span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> <o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> ->if only one spreadsheet document opened, the returned info list the correct document, I can parse it and get the file path<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> <o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> ->but if multi spreadsheet documents opened, the returned process still only list the first document, I cannot get other documents.<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> <o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> </span><span lang="EN-US" style="font-family:"Courier New","serif"">       </span><span lang="EN-US">2.</span><span lang="EN-US" style="font-family:"Courier New","serif""> </span><span lang="EN-US"> I also test in
 bash, it seems </span><span lang="EN-US" style="font-family:"Courier New","serif"">“</span><span lang="EN-US">ps -ef</span><span lang="EN-US" style="font-family:"Courier New","serif"">”</span><span lang="EN-US"> cannot list all files.<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> <o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> </span><span lang="EN-US" style="font-family:"Courier New","serif""> </span><span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> <o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> So , I want to know is there any other way to do it. such as using UNO service with libreoffice API to get it.<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> <o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> Anyone who knows it is much appreciate.<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> <o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> </span><span lang="EN-US" style="font-family:"Courier New","serif""> </span><span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> <o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> Best Regards<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> <o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> William<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> <o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> </span><span lang="EN-US" style="font-family:"Courier New","serif""> </span><span lang="EN-US"><o:p></o:p></span></p>
</blockquote>
<p class="MsoNormal" align="left" style="text-align:left"><span lang="EN-US" style="font-size:12.0pt;font-family:宋体"><br>
<br>
<o:p></o:p></span></p>
<pre><span lang="EN-US">-- <o:p></o:p></span></pre>
<pre><span lang="EN-US">Andrew Pitonyak<o:p></o:p></span></pre>
<pre><span lang="EN-US">My Macro Document: <a href="http://www.pitonyak.org/AndrewMacro.odt">http://www.pitonyak.org/AndrewMacro.odt</a><o:p></o:p></span></pre>
<pre><span lang="EN-US">Info:  <a href="http://www.pitonyak.org/oo.php">http://www.pitonyak.org/oo.php</a><o:p></o:p></span></pre>
</div>
</body>
</html>