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

ASP Discussion :

Ouvrir un document OpenOffice odt


Sujet :

ASP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 38
    Points : 16
    Points
    16
    Par défaut Ouvrir un document OpenOffice odt
    Bonjour à tous.

    J'essaie actuellement, en vain, d'accéder à un fichier OpenOffice odt.
    J'ai pu trouver des exemples en VB mais je n'ai pas réussi à les intégrer dans mon code asp.
    Certains disent qu'il faut lire ces fichiers comme des fichiers xml (ce que je suis en train d'essayer de faire) mais je ne vois pas comment ce serait possible. Pour moi il faudrait d'abord dézipper le fichier odt (on peut les décompresser et obtenir différents fichiers xml dont un qui contient le contenu texte du fichier odt) et ensuite y accéder, mais cela n'est pas possible pour moi, tout doit être automatisé.

    La finalité de tout cela est que les utilisateurs puissent uploader leur document sur le serveur avec des balises prédéfinies à l'intérieur (par exemple [nomclient]) et que je leur renvoie le même document avec les balises remplacées par les infos qu'ils ont demandé.

    Une âme charitable (ou plusieurs) est donc la bienvenue pour m'aider dans cette vaste entreprise

  2. #2
    Modérateur
    Avatar de roro06
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    1 480
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 480
    Points : 1 978
    Points
    1 978
    Par défaut
    Bonjour

    Pour essayer de te répondre, sans être hors sujet :

    le bout de code suivant permet d'envoyer au client un flux au format pdf, mais lu "comme du XML" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    set xml=Server.CreateObject("Microsoft.XMLHTTP")
    xml.Open "GET", pth, False 
    xml.send
     
        Response.Buffer = True
        Response.Expires = 0
     
        ' Place at end of code.
        Response.ContentType = "application/pdf"
        Response.AddHeader "Content-Type", "application/pdf"
        Response.AddHeader "Content-Disposition", "inline;filename=telechargement.pdf"
        Response.BinaryWrite xml.responseBody
        Response.End
        xml = nothing
    pth représentant, ici, le chemin physique du document PDF à visualiser.

    Tu peux peut-être t'en inpirer pour tes documents ODT (je ne connais pas le format et ne peut te garantir que ça fonctionnera de la même manière), sachant toutefois qu'il faut au minimum modifier le type MIME de la sortie.

    les lignes suivantes, au moins, seront à adapter à tes besoins :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        Response.ContentType = "application/pdf"
        Response.AddHeader "Content-Type", "application/pdf"
        Response.AddHeader "Content-Disposition", "inline;filename=telechargement.pdf"
    Un petit coup de ( puisse t'il vivre pour toujours !) (*) m'a donné les pistes suivantes :

    application/vnd.oasis.opendocument.text
    application/x-vnd.oasis.opendocument.text
    testes les deux possibilités.

    (*)


    N'oubliez pas de consulter les FAQ ASP et les cours et tutoriels ASP

    " La vie c'est quelque chose de très fort et de très beau.... La vie appartient a tous les vivants. It's both a dream and a feeling. C'est être ce que nous ne sommes pas sans le rester. La vie c'est mourir aussi....Et mourir c'est vraiment strong...c'est rester en vie au delà de la mort...Tous ceux qui sont morts n'ignorent pas de le savoir."
    (J.C. VanDamme, humoriste et philosophe belge . A moins que ce ne soit l'inverse ...)

    Chuck Norris comprend JC Van Damme.

  3. #3
    Poumtschak
    Invité(e)
    Par défaut
    Citation Envoyé par Aguado Voir le message
    La finalité de tout cela est que les utilisateurs puissent uploader leur document sur le serveur avec des balises prédéfinies à l'intérieur (par exemple [nomclient]) et que je leur renvoie le même document avec les balises remplacées par les infos qu'ils ont demandé.
    Si c'est pour faire un publipostage ou équivalent, il serait peut-être plus simple de générer une source de données en .csv en fonction des champs demandés par les utilisateurs, à charge pour eux ensuite de faire pointer leur document dessus.

    Autant il doit être possible de générer un document OpenDocument sur le serveur ex-nihilo, autant uploader un document bureautique, le parser, l'altérer et le ré-expédier à l'utilisateur me semble pour le moins tordu s'il s'agit d'informatique de gestion.

    Un souci lors de l'analyse des besoins ?

    AMHA bien sûr.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 38
    Points : 16
    Points
    16
    Par défaut
    @Poumtschak
    Le soucis c'est qu'il y a plein de clients différents avec des mises en pages différentes et des balises différentes. C'est pourquoi l'upload du fichier odt permet seulement de changer les balises et de garder la mise en page appropriée. Et là avec ton fichier csv je vois pas trop comment c'est possible. En même temps c'est ma première expérience dans le publipostage donc il y a de grandes chances que je me trompe ^^

    @roro06
    Je vais regarder plus en détail ce que tu as écrit

    [edit] : en remplaçant les 3 lignes que tu as citées par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Response.ContentType = "application/vnd.oasis.opendocument.text "
    Response.AddHeader "Content-Type", 
    "application/vnd.oasis.opendocument.text "
    Response.AddHeader "Content-Disposition",
    "inline;filename=telechargement.odt"
    cela renvoie bien le fichier odt. Maintenant il ne reste plus qu'à écrire dedans ^^

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 38
    Points : 16
    Points
    16
    Par défaut
    Mon idée pour le moment est de dézipper le fichier odt sur le serveur, modifier le contenu du fichier content.xml pour mettre les valeurs adéquates à la place des balises, puis de le rezipper (méthode que je trouve quand même bien complexe pour ce que je veux faire, je suis ouvert à toutes propositions plus simple ).

    Pour ce faire j'utilise donc les commandes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    cmd = """C:\Program Files\7-Zip\7z.exe"" x ""C:\Inetpub\wwwroot\Srvwebdev\monsite\fichier.odt"""
     
    wshell.Run cmd, SW_SHOWNORMAL, false
    Set wshell=nothing
    Ceci est censé décompressé le fichier odt mais évidemment cela ne fonctionne pas... Lorsque je l'exécute directement sur le serveur pas de soucis, mais via une page asp cela m'affiche une page blanche (pas de message d'erreur) mais rien n'est décompressé.
    C'est peut-être un problème de droits mais même en mettant tous les droits pour tout le monde sur le dossier (pour tester) ça ne change rien.

    Si quelqu'un a une idée pour résoudre ça je suis preneur

  6. #6
    Modérateur
    Avatar de roro06
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    1 480
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 480
    Points : 1 978
    Points
    1 978
    Par défaut
    Bonjour

    Modifier un document déjà créé, "en live", me semble délicat en ASP, dans la mesure où ce format est relativement nouveau (dans son adoption, en tou cas) alors qu'ASP est déjà à la limite de l'obsolète. Tu trouvera difficilement des outils "tout faits" pour ça.

    Je pense que dans un premier temps, générer un document ODT à partir d'un formulaire HTML serait une bonne approche.

    ceci dit, voici un lien que tu peux regarder :

    http://www.kalitech.fr/clients/doc/VB_APIOOo_en.html


    et également :
    http://fr.openoffice.org/Documentati...rammation.html


    N'oubliez pas de consulter les FAQ ASP et les cours et tutoriels ASP

    " La vie c'est quelque chose de très fort et de très beau.... La vie appartient a tous les vivants. It's both a dream and a feeling. C'est être ce que nous ne sommes pas sans le rester. La vie c'est mourir aussi....Et mourir c'est vraiment strong...c'est rester en vie au delà de la mort...Tous ceux qui sont morts n'ignorent pas de le savoir."
    (J.C. VanDamme, humoriste et philosophe belge . A moins que ce ne soit l'inverse ...)

    Chuck Norris comprend JC Van Damme.

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 38
    Points : 16
    Points
    16
    Par défaut
    Ok je vais regarder ça.

    Vous pensez que ce serait plus simple avec des documents Word? Des exemples doivent pouvoir se trouver plus facilement. Je vais peut-être tenter de me rabattre là-dessus.

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 38
    Points : 16
    Points
    16
    Par défaut
    Je n'ai rien trouvé de très concluant pour les fichiers Word. Je suis donc reparti sur ma précédente méthode (décompression, modification, compression) mais la décompression ne veut pas s'effectuer depuis ma page asp.
    Si j'exécute ma commande sur le serveur en local elle fonctionne très bien mais pas depuis la page asp.

    Mon bout de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    set wshell=Server.CreateObject("wscript.shell")
    cmd = """C:\Program Files\7-Zip\7z.exe"" e -y ""cheminfichier.odt"""
    rc = wshell.Run(cmd, SW_SHOWNORMAL, true)
    Set wshell=nothing
    J'ai essayé d'utiliser la version en ligne de commande de 7zip (7za.exe) ainsi que des chemins absolus ou relatifs mais aucun résultat.
    Si j'affiche rc cela me renvoie 2, je n'ai pas trouvé d'explications à ça

    Je ne pense pas que ce soit un problème de droit puisque si je remplace cmd par "notepad" cela me lance bien le bloc-notes.

    Bref j'en demande encore à votre aide

  9. #9
    Poumtschak
    Invité(e)
    Par défaut
    Citation Envoyé par Aguado Voir le message
    Si j'affiche rc cela me renvoie 2, je n'ai pas trouvé d'explications à ça
    D'après la description de la méthode Run de l'objet WShell sur msdn, rc contient le code retour de l'application, en l'occurrence celui de 7zip.

    http://sevenzip.sourceforge.jp/chm/c...exit_codes.htm

    Il y a peut-être un mécanisme de sécurité sur IIS ou au niveau des ACL qui empêchent les scripts ASP de lancer des commandes qui écrivent n'importe où sur le serveur... Voir s'il est possible de donner les droits en écriture sur le dossier de destination aux users spécifiques IUSR_<nom du poste> et IWAM_<nom du poste>.

    Sur le fond (bien que comme roro06 je demeure très perplexe sur le principe de modifier un fichier bureautique côté serveur) avant de me poser la question du zippage-dézippage des fichiers, je mettrais au point l'algorithme de recherche et de remplacement dans l'arborescence xml du format odt.


  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 38
    Points : 16
    Points
    16
    Par défaut
    J'avais essayé d'attribuer des droits en écriture à ces deux utilisateurs mais cela n'a rien changé.

    Pour en revenir sur le côté client ou serveur, je comprend tout à fait que ma solution envisagée ne soit pas très belle (elle ne m'enchante pas non plus ). Mais une modification client demanderait à l'utilisateur de copier/coller lui même les infos désirées dans le document (ça revient à une bête consultation de la bd)?
    Rien ne pourrait être automatisé (mon but est, je le rappelle, de remplacer des balises prédéfinies d'un fichier word ou odt par des infos de la bd, par exemple : [prenomclient] => Jean) ? (dites moi si je me trompe )

    Concrètement, existe t-il un moyen, en asp, d'intégrer des données issues d'une bd oracle dans un document word ou open office déjà mis en page ?

  11. #11
    Poumtschak
    Invité(e)
    Par défaut
    Citation Envoyé par Aguado Voir le message
    Mais une modification client demanderait à l'utilisateur de copier/coller lui même les infos désirées dans le document (ça revient à une bête consultation de la bd)?
    Rien ne pourrait être automatisé
    Bé, si. Rien à voir avec ASP, mais c'est un peu le principe du publipostage...
    • Une lettre-type avec des champs :
      <CIVILITÉ>, <NOM>, <ADRESSE>, <CODE POSTAL>, ce genre de choses
    • Une source de données issue d'une requête, c'est à dire un tableau Calc ou *.csv avec les mêmes noms de colonnes :
      <CIVILITÉ>, <NOM>, <ADRESSE>, <CODE POSTAL>, et toutes les données en ligne.

    Il suffit à l'utilisateur de lancer l'édition pour qu'OpenOffice.org lui génère autant de lettres qu'il y a de lignes, avec les informations qui vont bien à chaque fois.

    Un truc m'échappe encore : puisque la contrainte semble être que les documents "type" sont spécifiques aux utilisateurs, comment est définie la liste exhaustive ainsi que le format des champs que l'application est supposée remplir pour eux ? Un traitement des erreurs est-il prévu ?


  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 38
    Points : 16
    Points
    16
    Par défaut
    Je crois que je commence enfin à saisir le truc ^^

    En fait les utilisateurs seront des mairies qui pourront générer plusieurs types de documents.Ces types de documents seront différents entre eux mais chaque mairie aura accès aux mêmes types de documents. Seuls la présentation de ceux-ci (logos, mise en page, ...) diffère en fonction des villes.

    La requête serait donc la même pour chaque utilisateur (chaque mairie a sa plateforme logicielle indépendante, les noms des champs et des tables sont les même pour toutes). Je créé un fichier csv avec cette requête (comme ça je peux *facilement* m'orienter vers le format word ou open office) et ensuite il me faudrait une macro qui fusionne automatiquement ce fichier csv avec le fichier modèle (.doc ou .odt) présent sur le serveur.
    J'ai bon ou pas ?

    L'export csv ne devrait pas poser de problème. C'est la macro de fusion qui m'inquiète le plus.

    Je vais regarder dans cette direction alors. Merci pour le temps que tu m'accordes en tout cas. Si t'as d'autres suggestions n'hésite pas

  13. #13
    Poumtschak
    Invité(e)
    Par défaut
    Citation Envoyé par Aguado Voir le message
    La requête serait donc la même pour chaque utilisateur (chaque mairie a sa plateforme logicielle indépendante, les noms des champs et des tables sont les même pour toutes). Je créé un fichier csv avec cette requête (comme ça je peux *facilement* m'orienter vers le format word ou open office) et ensuite il me faudrait une macro qui fusionne automatiquement ce fichier csv avec le fichier modèle (.doc ou .odt) présent sur le serveur.
    J'ai bon ou pas ?
    Il n'est pas question de macro : la référence à la source de données se trouve dans le document OpenOffice.org lui-même et dans la configuration du logiciel sur le poste de travail.
    Il faudra donc que les utilisateurs prennent soin d'enregistrer tel quel le fichier *.csv issu des traitements sous un nom et à un emplacement bien déterminés, afin que la lettre-type pointe bien dessus. Et ensuite de lancer l'édition.

    Reste que le travail bureautique au niveau du poste demeure quand même prépondérant. On voit mal le gain apporté par l'application web, sauf s'il s'agit d'accéder à des données mutualisées en provenance d'un échelon supérieur.

    Autre solution : puisque chaque Mairie disposera de son serveur et des ses propres modèles, et sous réserve que la construction de documents ODT complexes soit possible en ASP3, il doit y avoir moyen d'effectuer la génération côté serveur du document complet. On évacue ainsi la phase d'upload, de dézippage et de parsing, et le document en retour s'afficherait dans le navigateur (plug-in OOo) avec les type MIME mentionnés dans le post de roro06.

    Ce qui forcerait à avoir une sorte de canevas de chaque document de chaque mairie, et que cela fasse partie du paramétrage/personnalisation de l'application lors du déploiement. Et rendrait complexe la modification ou l'ajout d'autres modèles, a fortiori s'il s'agit d'une appli « clés en main » sans contrat de maintenance.

    Mais ce n'est plus un publi-postage.

    Compliqué hein ?

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 38
    Points : 16
    Points
    16
    Par défaut
    Oula ^^

    J'ai trouvé comment faire mais pas comme tu l'as décrit

    J'ai codé un script d'upload de fichier (.odt, .doc, .rtf ou .txt). Le fichier, une fois uploadé est converti automatiquement en .rtf (grâce à OpenOffice et PyODConverter).
    Une fois arrivé là j'ai accès au .rtf qui est accessible comme un fichier texte. Je remplace mes balises dedans et je le convertis en pdf (toujours avec PyODConverter mais c'est faisable avec PDFCreator aussi).

    Ça fait tout ce que je voulais et je trouve pas ça trop bancal comme solution donc je suis content

    Merci pour votre aide en tout cas.
    La prochaine fois que je ferais vraiment du publipostage je repasserais par là ^^

  15. #15
    Expert éminent
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Points : 9 506
    Points
    9 506
    Par défaut
    Salut,

    Interessant, tu peux poster ton code?

    Merci
    "Winter is coming" (ma nouvelle page d'accueil)

  16. #16
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 38
    Points : 16
    Points
    16
    Par défaut
    Pas de soucis.

    Ce code utilise Free ASP Upload qui permet d'uploader facilement des fichiers ainsi que PyODConverter en complément d'OpenOffice (et de son interpréteur python intégré) pour convertir des fichiers.

    Code de ma page d'upload/conversion (j'essaierais de poster le reste de mon code plus tard) :

    Edit : je remet le code plus tard. Je viens d'ajouter une table qui permet de faire correspondre les fichiers avec un nom et là il y a quelques soucis ^^

    Edit2 : revoilà le code.
    J'ai également modifié le fichier aspupload.asp en rajoutant une variable me disant si un fichier du même nom était déjà présent avant l'upload (ça permet d'éviter de l'effacer lorsqu'il y a une erreur). Pour faire ça j'ai rajouté une variable (Public exist) et un test dans la fonction Save
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SET fso = Server.CreateObject("Scripting.FileSystemObject")
    nomFic = left(fileItem.FileName, InstrRev(fileItem.FileName,".")-1)
    if fso.fileExists(path & nomFic & ".rtf") then
      exist = true
    end if
    Ceci ne fonctionne que si on uploade qu'un seul fichier(ce qui est toujours mon cas).

    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
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
     
    <!--#Include File="../Include/connexion.Inc"-->
    <!--#Include File="../Include/authentification.Inc"-->
    <!--#Include File="../Include/aspupload.asp"-->
    <!--#Include File="../Include/FonctionsGenerales.inc"-->
    <%
     
    ' procédure qui efface un fichier en fonction de son chemin
    Sub effacerFichier(path, fichierDejaExistant)
      if not fichierDejaExistant then
        Set FSO = Server.CreateObject("Scripting.FileSystemObject")
        FSO.DeleteFile(path)
        set FSO = Nothing
      end if
    End sub
     
     
    SET ObjSys = Server.CreateObject("Scripting.FileSystemObject")
     
    'Récupération du répertoire courant
    SNomRep = Server.MapPath(".")
     
    'Vérification de la présence du répertoire de stockage, s'il n'existe pas on le créé
    SNomRep = SNomRep & "\Modeles"
    If not ObjSys.FolderExists(SNomRep) Then  ObjSys.CreateFolder(SNomRep)
     
    Set ObjSys = nothing
     
    Set Upload = New FreeASPUpload
     
    Upload.Save(SNomRep)
     
    ' tableau contenant les extensions autorisées
    tabExt = array ("doc","rtf","txt","odt")
     
    For Each fileItem In Upload.Files
      ' booléen qui dit si la table doit être mise à jour (insertion ou modification)
      MAJTable = false
     
      ' on récupère l'extension du fichier 
      extension = right(fileItem.FileName, Len(fileItem.FileName)-InstrRev(fileItem.FileName,"."))
      i=0
     
      ' fichierDejaExistant contient un booléen disant s'il existait déjà un fichier du même nom avant l'upload. Ainsi en cas d'erreur ce fichier ne sera pas effacé
      fichierDejaExistant = Upload.exist
     
      ' on regarde si l'extension convient
      appartient = false
      while i <= ubound(tabExt) and not appartient
        if tabExt(i) = extension then appartient = true
        i = i+1
      wend
     
      ' c'est une extension de fichier authorisée
      if appartient then
     
      ' on vérifie qu'un nom de fichier a bien été posté
        if Upload.form("titre") <> "" then
          titre = Upload.form("titre")
     
          ' on vérifie si ce titre est déjà présent ou non dans la table
          reqTitre = "SELECT * FROM arrete WHERE arr_titre='" & Replace(titre,"'","''") & "'"
          Set exReqTitre = conn.execute(reqTitre)
     
          if exReqTitre.eof then
            ' on récupère le nom du fichier sans l'extension
            nomFic = left(fileItem.FileName, InstrRev(fileItem.FileName,".")-1)
            ' on vérifie si le fichier doit être converti ou non en rtf
            if extension <> "rtf" then
            ' il faut convertir le fichier
     
              ' création de l'objet shell
              set wshell=Server.CreateObject("wscript.shell")
     
              ' création de la commande à exécuter
              ' si le fichier rtf existe déjà il sera écrasé
              pathcmd = """C:\Program Files\OpenOffice.org 3\program\python.exe"" ""C:\Program Files\OpenOffice.org 3\program\DocumentConverter.py"" """ & SNomRep & "\" & fileItem.FileName & """ """ & SNomRep & "\" & nomFic & ".rtf"""
     
              ' exécution de la commande
              runcmd = wshell.Run (pathcmd, SW_SHOWNORMAL, true)
              Set wshell=nothing
     
              ' on vérifie si la conversion s'est bien passée
              if runcmd=0 then
                ' conversion ok
                MAJTable = true
     
                message = "Le fichier " & fileItem.FileName & " a bien été chargé et converti en .rtf<br /><br />"
     
              else
              ' problème lors de la conversion
                message = "Erreur lors de la conversion<br /><br />"
              end if
     
            ' on efface le fichier non rtf
            effacerFichier SNomRep & "\" & fileItem.FileName, false
     
            else
            ' le fichier était déjà un rtf
              MAJTable = true
     
              message = "Le fichier " & fileItem.FileName & " a bien été chargé<br /><br />"
            end if
          else
            ' le titre est déjà présent dans la table
            message = "Erreur : titre déjà présent<br /><br />"
            effacerFichier SNomRep & "\" & fileItem.FileName, fichierDejaExistant
          end if
        else
          message = "Erreur : titre vide<br /><br />"
          effacerFichier SNomRep & "\" & fileItem.FileName, fichierDejaExistant
        end if
      else
        message = "Ce type de fichier n'est pas pris en charge<br /><br />"
        effacerFichier SNomRep & "\" & fileItem.FileName, fichierDejaExistant
      end if
     
    Next
     
    response.write "MAJ : " & MAJTable
    response.write "<br />fde : " & fichierDejaExistant
    ' si tout s'est bien passé il faut mettre à jour la table
    if MAJTable then
      ' si un fichier de même nom était déjà présent on met à jour ses infos
      if fichierDejaExistant then
        reqMAJ = "UPDATE arrete SET arr_titre='" & Replace(titre,"'","''") & "', "
        reqMAJ = reqMAJ & "act_ref=" & Session("ActRef") & ", "
        reqMAJ = reqMAJ & "dcreat=" & dbdate
        reqMAJ = reqMAJ & " WHERE arr_nom_fichier='" & Replace(nomFic,"'","''") & "'"
      else
        ' on insère le nom du fichier et son titre dans la table arrete
        ' cette table permet d'associer un fichier à un nom plus explicite
        reqMAJ = "INSERT INTO arrete(arr_ref, act_ref, arr_nom_fichier, arr_titre, dcreat, ucreat) "
        reqMAJ = reqMAJ & " VALUES ('" & RechercheReference("arrete") & "', " & Session("ActRef") & ", '" & Replace(nomFic,"'","''") & "', '" & Replace(titre,"'","''") & "', " & dbdate & ", '" & Replace(Session("NomEmp"), "'", "''") & "')"
      end if
      exeReqIns = conn.execute(reqMAJ)
    end if
     
    %>
     
    <html>
    <head>
      <LINK REL="stylesheet" HREF="../Include/Style<%=Session("ActNumCss")%>.css">
      <title>Placier</title>
      <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
     
      <script language="javascript">
        function validationFormulaire() {
          var fid = document.getElementById('attach1');
          if (fid.value == '')  {
            alert('Il faut choisir un fichier à charger');
            return;
          }
     
          var extension = fid.value.substring(fid.value.lastIndexOf('.')+1,fid.value.length);
          if ( (extension != 'doc') && (extension != 'odt') && (extension != 'rtf') && (extension != 'txt') ) {
            alert('Seuls les fichier .doc, .odt, .rtf et .txt sont authorisés');
            return;
          }
     
          if (document.getElementById("titre").value == '') {
            alert('Il faut choisir un titre pour votre fichier');
            return;
          }
          document.forms[0].submit();
        }
     
        function changementNomFichier() {
          if (document.getElementById("titre").value == '') {
            var fid = document.getElementById('attach1');
            //alert(fid.value);
            var nomFichier = fid.value.substring(0,fid.value.lastIndexOf('.'));
            document.getElementById("titre").value = nomFichier;
          }
     
        }
     
      </script>
    </head>
     
     
     
     
     
    <body>
     
      <div align="center">
        <h3>Chargement d'un nouveau modèle de traité</h3>
     
        <form action="Arretes_Upload.asp" method="post" enctype="multipart/form-data">
          <input type="hidden" name="envoi" value="1" />
          <table>
            <tr>
              <td><label for="attach1">Choix du fichier</label></td>
              <td><input type="file" id="attach1" class="TextBox" name="attach1" size="30" onchange="javascript:changementNomFichier();" /></td>
            </tr>
            <tr>
              <td>&nbsp;</td>
            </tr>
            <tr>
              <td><label for="titre">Titre du fichier</label></td>
              <td><input type="text" name="titre" id="titre" size="30" /></td>
            </tr>
            <tr>
              <td>&nbsp;</td>
            </tr>
            <tr>
              <td></td>
              <td><a href="#" onclick="validationFormulaire();">Charger les donn&eacute;es</a></td>
            </tr>
            <tr>
              <td>&nbsp;</td>
            </tr>
            <tr>
              <td></td>
              <td><a href="Arretes_Upload.asp">Retour</a></td>
            </tr>
            </table>
        </form>
        <%=message %>
     
        </div>
     
      </body>
    </html>

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Ouvrir, éditer, enregistrer documents docx/odt directement sur le serveur
    Par SeigneurMartin dans le forum Général Conception Web
    Réponses: 1
    Dernier message: 17/05/2013, 08h09
  2. Réponses: 4
    Dernier message: 04/07/2007, 13h42
  3. [MFC] Ouvrir un document par double-clique
    Par Choupinou dans le forum MFC
    Réponses: 7
    Dernier message: 03/08/2004, 12h38
  4. [FLASH MX 2004] Ouvrir un document .fla sur Mac
    Par tahiti bob dans le forum Flash
    Réponses: 2
    Dernier message: 12/05/2004, 17h53
  5. Réponses: 3
    Dernier message: 03/06/2003, 13h16

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