IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

OpenOffice & LibreOffice Discussion :

Une macro qui fonctionne sous Linux mais pas sous windows


Sujet :

OpenOffice & LibreOffice

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 10
    Points : 3
    Points
    3
    Par défaut Une macro qui fonctionne sous Linux mais pas sous windows
    Une macro qui fonctionne sous Linux mais pas sous windows


    Bonjour,

    aprés maintes recherches (dur d'avoir des infos correctes et détaillées sur le basic en Francais) sur diverses macros pour export pdf et enregistrement du fichier sous un nom précis, je me suis fié aux enregistrements de macro qui semble finalement aussi propres.

    J'ai donc cette macro pour export pdf et sa variante qui enregistre en ods qui fonctionnent parfaitement sous ubuntu mais pas sous windows que ce soit le 8 ou vista.

    En effet sous windows, j'ai un message d'erreur m'indiquant :

    " Erreur lors de l'enregistrement du doc XXXXXX, cet objet n'est pa accessible, impossible d'acceder à l'objet, vos droits ne sont pas suffisants"

    2 choses :
    - je n'ai pas mis de droits sur le fichier
    - le fichier XXXXX indiqué est celui qui est ouvert et doit être exporté ou enregistrer sous un autre nom.

    Calc LO 4.0.2.2 sous linux
    Calc LO 4.0.5.2 sous windows


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    sub exportPdf
     
    rem ----------------------------------------------------------------------
    rem define variables
    dim document   as object
    dim dispatcher as object
    rem ----------------------------------------------------------------------
     
    Dim monDoc as Object
    Dim maFacture as Object
    Dim monNumFact as String
    Dim monTotal as Variant
    Dim unClient as String
    Dim dossier as String, adresse as String
    dim devisfacture as String
     
     
     
    rem get access to the document
    document   = ThisComponent.CurrentController.Frame
    dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
     
     
     
     
    rem ------------------
     
    	monDoc =  thiscomponent
     
    	maFacture = thiscomponent.currentController.activeSheet
     
    	monNumFact = maFacture.getCellRangeByName("H3").getString()'Numero Facture
        rem msgbox monNumFact
     
        unClient = maFacture.getCellRangeByName("G12").getString()'nom client
        devisfacture = maFacture.getCellRangeByName("E3").getString()'devis facture ou avoir
        rem msgbox unClient
     
        dossier = DossierCourant(monDoc) & "PDF"
        adresse = convertToUrl(dossier & getPathSeparator & unClient & "_" & devisfacture & "_" & monNumFact & ".pdf")
     
    rem ----------------------------------------------------------------------
    dim args1(2) as new com.sun.star.beans.PropertyValue
    args1(0).Name = "URL"
    args1(0).Value = adresse
    args1(1).Name = "FilterName"
    args1(1).Value = "calc_pdf_Export"
    args1(2).Name = "FilterData"
    args1(2).Value = Array(Array("UseLosslessCompression",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("Quality",0,90,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("ReduceImageResolution",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("MaxImageResolution",0,300,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("UseTaggedPDF",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("SelectPdfVersion",0,0,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("ExportNotes",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("ExportBookmarks",0,true,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("OpenBookmarkLevels",0,-1,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("UseTransitionEffects",0,true,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("IsSkipEmptyPages",0,true,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("IsAddStream",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("EmbedStandardFonts",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("FormsType",0,0,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("ExportFormFields",0,true,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("AllowDuplicateFieldNames",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("HideViewerToolbar",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("HideViewerMenubar",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("HideViewerWindowControls",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("ResizeWindowToInitialPage",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("CenterWindow",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("OpenInFullScreenMode",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("DisplayPDFDocumentTitle",0,true,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("InitialView",0,0,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("Magnification",0,0,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("Zoom",0,50,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("PageLayout",0,1,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("FirstPageOnLeft",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("InitialPage",0,1,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("Printing",0,2,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("Changes",0,4,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("EnableCopyingOfContent",0,true,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("EnableTextAccessForAccessibilityTools",0,true,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("ExportLinksRelativeFsys",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("PDFViewSelection",0,0,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("ConvertOOoTargetToPDFTarget",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("ExportBookmarksToPDFDestination",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("SignPDF",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("_OkButtonString",0,"",com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("Watermark",0,"",com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("EncryptFile",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("PreparedPasswords",0,,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("RestrictPermissions",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("PreparedPermissionPassword",0,Array(),com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("SignatureLocation",0,"",com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("SignatureReason",0,"",com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("SignatureContactInfo",0,"",com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("SignaturePassword",0,"",com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("SignatureCertificate",0,,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("",0,,com.sun.star.beans.PropertyState.DIRECT_VALUE))
     
    dispatcher.executeDispatch(document, ".uno:ExportToPDF", "", 0, args1())
     
     
    end sub

    Voilà c'est enervant...

  2. #2
    Rédacteur

    Avatar de zoom61
    Homme Profil pro
    ...
    Inscrit en
    Janvier 2005
    Messages
    9 429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : ...
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 9 429
    Points : 58 222
    Points
    58 222
    Billets dans le blog
    11
    Par défaut
    Salut,

    Je viens de tester ta macro, et elle fonctionne sauf que je n'ai pas la macro DossierCourant. Cette macro, est-elle dans ton fichier ou dans l'application ("Mes macros et ..." ou "Macros et ...") ?
    Si elle est dans l'application, c'est normal que cela ne fonctionne pas sous Windows si elle n'y est pas .

    @+.

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    SAlut,

    Merci de ta lecture.

    La macro y est bien sous windows.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Function DossierCourant() As String
     
       Dim i As Double
       Dim temp As String   
     
       temp = ThisComponent.URL
       i = len(temp)
     
       While asc(mid(temp,i,1)) <> 47
          i = i - 1
       Wend
     
       DossierCourant = mid(temp,1,i)
     
    End Function
    D'ailleurs je la comprends pas trop, s'il y a un autre moyen de récupérer le chemin du dossier courant ca serait bien...

    Sinon en continuant à chercher, le problème vient en effet de là.

    Je penchais plutot pour getPathSeparator mais c'est peut être DossierCourant qui pose ce problème.

    En fait dossiercourant renvoie le chemin avec les / de linux et pas les \ de windows.

    Mais comment corriger ca ?

  4. #4
    Rédacteur

    Avatar de zoom61
    Homme Profil pro
    ...
    Inscrit en
    Janvier 2005
    Messages
    9 429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : ...
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 9 429
    Points : 58 222
    Points
    58 222
    Billets dans le blog
    11
    Par défaut
    Salut,

    Te voici un code qui fonctionne sous Windows :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    REM  *****  BASIC  *****
     
    Sub Main
     
    End Sub
     
    sub exportPdf
     
    rem ----------------------------------------------------------------------
    rem define variables
    dim document   as object
    dim dispatcher as object
    rem ----------------------------------------------------------------------
     
    Dim monDoc as Object
    Dim maFacture as Object
    Dim monNumFact as String
    Dim monTotal as Variant
    Dim unClient as String
    Dim dossier as String, adresse as String
    dim devisfacture as String
     dim propsFiltre as Variant, props as Variant
     
     
    rem get access to the document
    document   = ThisComponent.CurrentController.Frame
    dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
     
     
     
     
    rem ------------------
     
    	monDoc =  thiscomponent
     
    	maFacture = thiscomponent.currentController.activeSheet
     
    	monNumFact = maFacture.getCellRangeByName("H3").getString()'Numero Facture
        rem msgbox monNumFact
     
        unClient = maFacture.getCellRangeByName("G12").getString()'nom client
        devisfacture = maFacture.getCellRangeByName("E3").getString()'devis facture ou avoir
        rem msgbox unClient
     
        dossier = DossierCourant(monDoc) & "PDF"
        adresse = convertFromUrl(dossier & getPathSeparator & unClient & "_" & devisfacture & "_" & monNumFact & ".pdf")
     
     
    propsFiltre = CreateProperties(Array( _
      "Quality", 30, _
      "ReduceImageResolution", True,  "MaxImageResolution", 75, _
      "UseTaggedPDF", True, _
      "FormsType", 1, _
      "ExportNotes", True, _
      "InitialView", 1,  "PageLayout", 3, _
      "DisplayPDFDocumentTitle", False, _
      "PDFViewSelection", 1  ))
    props = CreateProperties(Array( _
      "FilterName", "calc_pdf_Export",  "FilterData", propsFiltre() ))
    adresseDoc = convertToURL(adresse)
    monDoc.storeToURL(adresseDoc, props())
     
    end sub
     
    Function CreateProperties(propList() As Variant) As Object
    Dim n as long, x as long
     
    n = UBound(propList)
    if n < 0  then
      CreateProperties = Array()
    else
      if (n and 1) = 0  then
        MsgBox("Erreur : nombre impair d'arguments", 16, "CreateProperties")
      else
        Dim p(n\2) As New com.sun.star.beans.PropertyValue
        for x = 0 to n\2
          p(x).Name = propList(2*x)
          p(x).Value = propList(2*x +1)
        next
        CreateProperties = p()
      end if
    end if
    End Function
     
    Function DossierCourant() As String
     
       Dim i As Double
       Dim temp As String   
     
       temp = ThisComponent.URL
       i = len(temp)
     
       While asc(mid(temp,i,1)) <> 47
          i = i - 1
       Wend
     
       DossierCourant = mid(temp,1,i)
     
    End Function
    J'ai rajouté la fonction CreateProperties et tu utilisais convertToUrl au lieu de convertFromUrl.

    @+.

Discussions similaires

  1. Bad_alloc sous Linux mais pas sous mac
    Par betaplus dans le forum C++
    Réponses: 4
    Dernier message: 11/03/2013, 14h03
  2. JCheckbox icones persos - Bug sous linux mais pas sous Windows
    Par Hemophilius dans le forum AWT/Swing
    Réponses: 16
    Dernier message: 04/11/2011, 15h34
  3. Script qui marche sous Linux mais pas sous Windows et vice versa
    Par tu-phat dans le forum Applications et environnements graphiques
    Réponses: 2
    Dernier message: 26/11/2009, 02h39
  4. Réponses: 5
    Dernier message: 13/04/2009, 23h12
  5. [JMF] Code fonctionnant sous Linux mais pas sous XP
    Par Monsieur_Max dans le forum Multimédia
    Réponses: 4
    Dernier message: 25/05/2006, 18h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo