[Résolu][Calc] Utilisateurs fichier partagé

Discussions et questions sur tout ce qui concerne la programmation tous langages et tous modules confondus.

Modérateur : Vilains modOOs

Règles du forum
:alerte: Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !
Avatar de l’utilisateur
Roby68
Membre OOrganisé
Membre OOrganisé
Messages : 66
Inscription : 09 oct. 2013 23:12

[Résolu][Calc] Utilisateurs fichier partagé

Message par Roby68 »

Bonjour le Forum,

Peut-on savoir et afficher dans des cellules les différents utilisateurs connectés à une feuille de calcul partagée.
Une fonction ou à l'aide d'une macro élaborée.

Merci d'avance.

Roby
Dernière modification par Roby68 le 11 déc. 2018 22:20, modifié 1 fois.
LibreOffice 5.2.6.2 / LibreOffice 5.3 ( au Bureau ) "Par obligation de version".
Win 7 Pro

LibreOffice 6.2.5.2 ( Maison )
Win 10 Pro
Avatar de l’utilisateur
Hubert Lambert
SuppOOrter
SuppOOrter
Messages : 1214
Inscription : 06 avr. 2016 09:26

Re: [Calc] Utilisateurs fichier partagé

Message par Hubert Lambert »

Bonjour,

Les informations de connexions sont disponibles en clair dans le fichier "lock" créé à l'ouverture du document, et repérable à son nom : .~sharing.le nom du fichier.ods#.
La macro pour lire son contenu sera en réalité relativement simple. Un exemple :

Code : Tout sélectionner

sub main
    doc = thiscomponent
    destination = doc.Sheets(0).getCellByPosition(0,0)
    insere_utilisateurs(doc, destination)
end sub

sub insere_utilisateurs(doc, cell)
    aurl = split(doc.Location, "/")
    filename = aurl(ubound(aurl))
    lockfile = ".~sharing." & filename & "#"
    aurl(ubound(aurl)) = lockfile
    lockurl = convertToURL(join(aurl,"/"))
    sfa = createUnoService("com.sun.star.ucb.SimpleFileAccess")
    if not sfa.exists(lockurl) then
        msgbox "Le fichier n'est pas partagé."
        exit sub
    end if

    instream = sfa.openFileRead(lockurl)
    textinput = createUnoService("com.sun.star.io.TextInputStream")
    textinput.setInputStream(instream)
    dim utilisateurs()
    do while not textinput.isEOF
        n = ubound(utilisateurs()) +1
        redim preserve utilisateurs(n)
        utilisateurs(n) = array(textinput.readLine())
    loop
    textinput.closeInput()
    instream.closeInput()
    plagedest = cell.Spreadsheet.getCellByPosition(cell.RangeAddress.StartColumn,_
                                                   cell.RangeAddress.StartRow,_
                                                   cell.RangeAddress.StartColumn,_
                                                   cell.RangeAddress.StartRow + ubound(utilisateurs))
    plagedest.setDataArray(utilisateurs)
end sub
Cordialement.
AOOo 4.1.7 sur Win10
AOOo 4.1.x sur Linux Mint
LibreOffice 5.x/6.x sur Linux Mint
--
| « Nos défauts devraient nous donner une qualité : l'indulgence pour les défauts des autres » (Rivarol)
Avatar de l’utilisateur
Roby68
Membre OOrganisé
Membre OOrganisé
Messages : 66
Inscription : 09 oct. 2013 23:12

Re: [Calc] Utilisateurs fichier partagé

Message par Roby68 »

Bonjour le Forum, Hubert Lambert

j'ai repris ton code Hubert Lambert et il affiche au lancement de "main" comme quoi les variables n'ont pas été défini.
De peur de faire des erreurs, peux-tu reprendre.

Merci d'avance.

pour "doc" c'est : dim doc as object, je pense ou peut-être il me manque une instruction au départ.
Destinataire etc...

Roby
LibreOffice 5.2.6.2 / LibreOffice 5.3 ( au Bureau ) "Par obligation de version".
Win 7 Pro

LibreOffice 6.2.5.2 ( Maison )
Win 10 Pro
Avatar de l’utilisateur
Hubert Lambert
SuppOOrter
SuppOOrter
Messages : 1214
Inscription : 06 avr. 2016 09:26

Re: [Calc] Utilisateurs fichier partagé

Message par Hubert Lambert »

Aucun besoin de déclarer les variables ici, saif si tu as toi-même ajouter "option explicit". Auquel cas vire-le.
AOOo 4.1.7 sur Win10
AOOo 4.1.x sur Linux Mint
LibreOffice 5.x/6.x sur Linux Mint
--
| « Nos défauts devraient nous donner une qualité : l'indulgence pour les défauts des autres » (Rivarol)
Avatar de l’utilisateur
Roby68
Membre OOrganisé
Membre OOrganisé
Messages : 66
Inscription : 09 oct. 2013 23:12

Re: [Calc] Utilisateurs fichier partagé

Message par Roby68 »

Bonjour le Forum, Hubert Lambert

J'ai suivi ton conseil, j'ai viré l'instruction "Option Explicit" en début de page, il me semble que cela a fonctionné une fois.
Il a mis le chemin en cellule A1.

J'ai mis le code dans un autre module, mais lorsque j'ai recommencé après avoir changé simplement la cellule de destination (T3 en feuille 2) il affiche l'erreur suivante:
à la ligne "plagedest.setDataArray(utilisateurs)
(voir capture)
Je ne comprend pas, j'ai remis ensuite comme à l'initial, mais toujours l'erreur.

Merci encore une fois.
Roby
Pièces jointes
Capture erreur
Capture erreur
LibreOffice 5.2.6.2 / LibreOffice 5.3 ( au Bureau ) "Par obligation de version".
Win 7 Pro

LibreOffice 6.2.5.2 ( Maison )
Win 10 Pro
Avatar de l’utilisateur
Hubert Lambert
SuppOOrter
SuppOOrter
Messages : 1214
Inscription : 06 avr. 2016 09:26

Re: [Calc] Utilisateurs fichier partagé

Message par Hubert Lambert »

Que contient la variable utilisateurs juste avant l'erreur ?
Pourrais-tu joindre ton fichier test ?
AOOo 4.1.7 sur Win10
AOOo 4.1.x sur Linux Mint
LibreOffice 5.x/6.x sur Linux Mint
--
| « Nos défauts devraient nous donner une qualité : l'indulgence pour les défauts des autres » (Rivarol)
Avatar de l’utilisateur
Roby68
Membre OOrganisé
Membre OOrganisé
Messages : 66
Inscription : 09 oct. 2013 23:12

Re: [Calc] Utilisateurs fichier partagé

Message par Roby68 »

Bonjour le Forum, Hubert Lambert

J'ai trouvé pourquoi cela ne fonctionnait pas, ma cellule A1 était protégée (les différentes feuilles du projet sont toutes protégées sauf les cellules utilisées par chacun).
J'ai toutefois changé la cellule de destination et c'est ok également.

par contre l'affichage de cette cellule indique bien les différents utlisateurs connectés comme suit avec ponctuation:
,ASUS-BUREAU-R/ASUS-Bureau-R,ASUS-Bureau-R,25.11.2018 12:52,file:///C:/Users/ASUS-Bureau-R/AppData/Roaming/OpenOffice/4;,ASUS-ROG/scott,ASUS-ROG,25.11.2018 12:54,file:///C:/Users/scott/AppData/Roaming/OpenOffice/4;

Ne peut-on pas faire apparaitre que le log?
merci

Roby
LibreOffice 5.2.6.2 / LibreOffice 5.3 ( au Bureau ) "Par obligation de version".
Win 7 Pro

LibreOffice 6.2.5.2 ( Maison )
Win 10 Pro
Avatar de l’utilisateur
Hubert Lambert
SuppOOrter
SuppOOrter
Messages : 1214
Inscription : 06 avr. 2016 09:26

Re: [Calc] Utilisateurs fichier partagé

Message par Hubert Lambert »

Pourrais-tu joindre un fichier sharing contenant les infos de plusieurs utilisateurs connectés ?
AOOo 4.1.7 sur Win10
AOOo 4.1.x sur Linux Mint
LibreOffice 5.x/6.x sur Linux Mint
--
| « Nos défauts devraient nous donner une qualité : l'indulgence pour les défauts des autres » (Rivarol)
Avatar de l’utilisateur
Roby68
Membre OOrganisé
Membre OOrganisé
Messages : 66
Inscription : 09 oct. 2013 23:12

Re: [Calc] Utilisateurs fichier partagé

Message par Roby68 »

Bonsoir le Forum, Hubert Lambert

Je ne peux pas mettre un fichier car trop lourd (+ de 800 ko) et des données sensibles y sont stockées
Je suis chez moi et je fais les tests sur deux pc pour simuler le réseau du travail avec l'aide d'un Cloud.

La ligne citée plus haut (ce que donne la macro) indique les éléments souhaites par cette même macro
Par contre je n'ai pas vu (chez moi) le fichier Lock (sharing), doit il être dans le même répertoire que le fichier lance et doit il également apparaître sur chaque pc connecte
Merci

Roby
LibreOffice 5.2.6.2 / LibreOffice 5.3 ( au Bureau ) "Par obligation de version".
Win 7 Pro

LibreOffice 6.2.5.2 ( Maison )
Win 10 Pro
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25143
Inscription : 03 mars 2006 08:45
Localisation : 127.0.0.1
Contact :

Re: [Calc] Utilisateurs fichier partagé

Message par Dude »

Roby68 a écrit :simuler le réseau du travail avec l'aide d'un Cloud.
Ce n'est pas un partage mais un répertoire synchronisé.
Avatar de l’utilisateur
Hubert Lambert
SuppOOrter
SuppOOrter
Messages : 1214
Inscription : 06 avr. 2016 09:26

Re: [Calc] Utilisateurs fichier partagé

Message par Hubert Lambert »

Essaie cette version, légèrement modifiée (les utilisateurs sont sur une même ligne séparés par un point-virgule, ce que je n'avais pas saisi d'emblée) :

Code : Tout sélectionner

sub main
    doc = thiscomponent
    destination = doc.Sheets(0).getCellByPosition(0,0)
    insere_utilisateurs(doc, destination)
end sub

sub insere_utilisateurs(doc, cell)
    aurl = split(doc.Location, "/")
    filename = aurl(ubound(aurl))
    lockfile = ".~sharing." & filename & "#"
    aurl(ubound(aurl)) = lockfile
    lockurl = convertToURL(join(aurl,"/"))
    sfa = createUnoService("com.sun.star.ucb.SimpleFileAccess")
    if not sfa.exists(lockurl) then
        msgbox "Le fichier n'est pas partagé."
        exit sub
    end if

    instream = sfa.openFileRead(lockurl)
    textinput = createUnoService("com.sun.star.io.TextInputStream")
    textinput.setInputStream(instream)
    dim utilisateurs(0)
    utilisateurs(0) = array("Nom utilisateur", "Date et heure accès")
    do while not textinput.isEOF
        n = ubound(utilisateurs()) +1
        redim preserve utilisateurs(n)
        line_ = textinput.readString(array(59), True)
        aline = split(line_, ",")
        if aline(0) = "" then aline(0) = "???"
        coord = aline(0) & " [" & aline(1) & "] sur " & aline(2)
        date_ = aline(3)
        utilisateurs(n) = array(coord, date_)
    loop
    textinput.closeInput()
    instream.closeInput()
    plagedest = cell.Spreadsheet.getCellRangeByPosition(cell.RangeAddress.StartColumn,_
                                                        cell.RangeAddress.StartRow,_
                                                        cell.RangeAddress.StartColumn + ubound(utilisateurs(0)),_
                                                        cell.RangeAddress.StartRow + ubound(utilisateurs))
    plagedest.setDataArray(utilisateurs)
    plagedest.Columns.OptimalWidth = True
end sub
AOOo 4.1.7 sur Win10
AOOo 4.1.x sur Linux Mint
LibreOffice 5.x/6.x sur Linux Mint
--
| « Nos défauts devraient nous donner une qualité : l'indulgence pour les défauts des autres » (Rivarol)
Avatar de l’utilisateur
Roby68
Membre OOrganisé
Membre OOrganisé
Messages : 66
Inscription : 09 oct. 2013 23:12

Re: [Calc] Utilisateurs fichier partagé

Message par Roby68 »

Bonsoir le Forum, Hubert Lambert,

Je prends ton code et j'essaierai demain au bureau.
Sinon en faisant une recherche sur le texte affiché, une correspondance peut être vérifiée ou pas, c'est ok pour moi.

Merci encore.

Bonne soirée à tous.
Roby
LibreOffice 5.2.6.2 / LibreOffice 5.3 ( au Bureau ) "Par obligation de version".
Win 7 Pro

LibreOffice 6.2.5.2 ( Maison )
Win 10 Pro
Verrouillé