Fichier htm a transcrire proprement sur Excel (avec macro)

Bonjour a tous,

Apres l'aide (super) de la derniere fois, je reviens vers vous, avec un probleme plus difficile (je pense).

Pour un jeu online, je peux extracter de la base de donner du jeu des tas d'info utiles pour nous.

Mais cette masse de data est pas pratique a utiliser vu qu'elle est en format texte avec des ":" et des guillements partout, en un seul bloc.

Il y a plusieurs sortes de donnees que je peux obtenir (via le logiciel Fiddler, pour ceux qui connaissent) mais toutes ont la meme structures.

Voici 2 fichiers attachees, pour montrer ce que on peut obtenir. Ce sont des fichier htm ou txt.

(Je ne peux pas attacher de fichier htm a ce message.... Mais ce sera principalement un fichier htm a utiliser....)

J'aimerais, via un macro dans excel, pouvoir appuyer sur un bouton, qui irait chercher toutes la masse de donnees dans le fichier htm (ou texte mais on peut se concentrer sur le htm), et qui l'ordonerais correctement sur une feuille excel.

Toutes les data ne sont pas utile mais je ne sais pas encore ce qui est utile/inutile.

Dans le fichier fiddler_23-33-31, il y a ca (un extrait):

{"user_id":2153807,"name":"yangedward","level":"20","rating":"693238","commander_id":"1486","last_update_time":"1438702397","gp_earned":"1420","member_role":1,"online":0},"2206290":{"user_id":2206290,"name":"azreal","level":"20","rating":"378403","commander_id":"1204","last_update_time":"1438702984","gp_earned":"1704","member_role":21,"online":0},"2393066":{"user_id":2393066,"name":"EngeJI","level":"20","rating":"416856","commander_id":"1034","last_update_time":"1438665827","gp_earned":"1378","member_role":1,"online":0},"2398299":

Il faudrait qu'il mette en A1: user_id, en B1: name, etc.... en automatisant pour qu'il aille chercher le 'titre' de la colonne lui meme. Ca sera pas toujours pareil.

Dans la colonne 1, il ira chercher tous les user id (exemple: A2: 2153807, A3: 2206290),

Dans la colonne 2, les name (example B2: yangedward, B3: azreal)

Etc etc.

Ca me permettrait de voir plus clair dans les info recuperer d'internet, voir ce qui est utilisable et ce qui ne l'est pas.

Je pense qu'il faudra affinier le script par apres, si possible, pour essayer qu'il ne travaille que sur les donnees utiles.

Je pensais a ce que le bouton:

  • soit demande quel fichier il faut ouvrir/travailler,
  • soit va chercher tous les fichiers htm dans le meme dossier ou se trouve le macro et fasse le boulot en mettant les outputs sur differents onglets -> Cette option serait top

Ca me semble realisable mais mes competences en macro sont proche de 0 et je ne pense pas y arriver.

Si quelqu'un a un peu de temps a consacrer a cela, ca serait super.

Merci d'avance!!

Thor'

Ton fichier texte est génial ! c'est ce que l'on appelle un fichier json.

Je te conseille d'utiliser des outils de conversion de json en csv, le fichier csv sera lu directement par excel.


Un outil ici

http://www.convertcsv.com/json-to-csv.htm

en mettant semi-colon comme séparateur

J'ai essayé, mais es-tu sûr d'avoir l'intégralité des données ?

merci! premiere fois que j'entend parler de json.

par contre, il semble que le convertisseur ne prend pas tout le fichier.

Le fichier txt a plus de donnees que le csv output. J'ai pris tout le contenu des donnees du htm, oui.

Et le csv de sortie est pareil, tout moche...

Je cherche un peu.

Je suis quand même surpris par ton fichier ... je crains que n'importe quelle méthode du coup donne le même résultat.

A propos de json :

Structurer les données dans un fichier .json :

{...} : les accolades définissent un objet.

"language":"Java" : Les guillemets (double-quotes) et les double-points définissent un couple clé/valeur (on parle de membre).

[...] : Les crochets définissent un tableau (ou array en anglais).

{"id":1, "language":"json", "author":"Douglas Crockford"} : Les virgules permettent de séparer les membres d'un tableau ou, comme ici, d'un objet . A noter : pas de virgule pour le dernier membre d'un objet, sinon, il ne sera pas valide et vous aurez des erreurs lors de l'analyse du fichier.

tout doit être encodé en utf-8.

Concernant les fichiers :

  • Je vais regarder de plus près dans la journée ... le premier fichier ne peut pas être complet car le nombre de } n'est pas égal au nombre de { ... et il ne se termine pas par ],alors qu'il commence bien par {
    Le second me parait plus correct en structure. Je vais donc m'y pencher.

Concernant la méthode :

  1. La conversion en csv est déjà un pas important, ensuite à nous de retraiter le fichier csv par excel plus facilement.
    Un autre voie à considérer et d’interpréter les données dans un bout de programme en javascript, lequel produirait facilement un tableau que l'on peut coller ensuite dans un fichier excel. Je vais voir aussi dans cette voie mais cela prendra plus d etemps ... à moins qu'un expert résolve le sujet avant cela.

Ok merci!! J'essayerais te renvoyer un nouveau fichier htm ou txt bientôt.

Grand merci!

Ci-joint le second fichier transformé en excel

Méthode :

  • convertir en format csv
  • ouvrir le csv
  • copier les valeurs
  • coller en transposant
epicetou

Le fichier n'a aucun récurrence : toutes les rubriques sont différentes. Il y en a 1737

Je vois. Merci.

Il traite toutes les {} comme un champ.

Donc pour 2 joueurs (les 2 premiers), ca donne ca dans l'excel:

"

faction_war.attacker_faction_name SithOrder

faction_war.attacker_faction_members.0.war_event_id 18

faction_war.attacker_faction_members.0.member_id 1947675

faction_war.attacker_faction_members.0.faction_id 68569002

faction_war.attacker_faction_members.0.faction_war_points 48783

faction_war.attacker_faction_members.0.current_war_points 0

faction_war.attacker_faction_members.0.win_streak 0

faction_war.attacker_faction_members.0.wins 461

faction_war.attacker_faction_members.0.losses 356

faction_war.attacker_faction_members.0.battle_energy 10

faction_war.attacker_faction_members.0.member_name Vinsanity08

faction_war.attacker_faction_members.1.war_event_id 18

faction_war.attacker_faction_members.1.member_id 2140652

faction_war.attacker_faction_members.1.faction_id 68569002

faction_war.attacker_faction_members.1.faction_war_points 43844

faction_war.attacker_faction_members.1.current_war_points 0

faction_war.attacker_faction_members.1.win_streak 0

faction_war.attacker_faction_members.1.wins 455

faction_war.attacker_faction_members.1.losses 408

faction_war.attacker_faction_members.1.battle_energy 10

faction_war.attacker_faction_members.1.member_name X3rO

"

Est ce qu'il serait possible de mettre tous les joueurs dans un beau tableau?

Qui donne ca:

Colonne A: Faction name, Colonne B: Member name ; Colonne C: battle energy, etc etc etc

Puis un joueur par ligne

Donc A2: SithOrder ; B2: Vinsanity08 ; C2: 10 ; etc etc

A3: X3rO ; etc etc

Le debut et la fin du fichier ne sont pas utile.

Il faut je pense un macro/script qui va chercher le fichier txt, et qui le classe tout seul.

La ca serait super top classe

A voir si c'est faisable

Merci

Thor

Thor

je pars du principe que le fichier texte a été converti en csv comme indiqué ci-dessus

on obtient 2 lignes de plus de 1700 valeurs

je recopie ces lignes dans les 2 premières lignes de l'onglet csv

et puis tu appuies sur le bouton jaune des 2 autres onglets (en A1 il y a la "racine" recherchée de la variable)

Merci! Ca a l'air pas mal! Faut que je teste un peu

En transformant le json en csv, en suivant ce que tu as dit plus haut, j'obtiens pas tout a fait la meme chose...

J'obtiens tout le texte sur 4 lignes

j'ai pourtant coche semi colon dans le convertisseur.

Voici ce que j'obtiens, en attache. Est ce qu'il faut que je change qqch dans excel?

23convertcsv-7.zip (9.08 Ko)

quel version d'excel as-tu ?

comme il y a 1700 valeurs, ... pour ma part je ne vois bien que 2 lignes

2010 (en anglais, desole pour mes textes sans accents...)

Voici un screenshot dans le lien ci dessous:

De quel fichier es-tu parti ?

en fait la conversion ne s'est pas faite car le fichier de base était sans doute mal codé.

En réalité ici il ne fait que recopier le fichier texte sans conversion.

Prends (pour tester) le second fichier de ton premier post et converti-le pour voir !


il y a peut-être une autre raison ... comme tu es en excel 2010 EN, il faut que tu convertisses peut-être en virgule et non en point-virgule (semi-colon)

Oui c'est ca!

Il faut une mettre virgule (comma) et ca passe

Merci!

En faisant la fine bouche: On peut mettre un bouton dans excel qui va chercher le txt json et le transcris direct en beau tableau comme tu as fait?

Le truc c'est qu'il faudra telecharger un fichier json toutes les heures environ pour le jeu a certain moment, donc transferer directement du txt (ou htm) en tableau serait super mega top.

J'ai trouve ca sur un forum:

Sub TestJsonDecode() 'This works, uses vba-json library 
    Dim lib As New JSONLib 'Instantiate JSON class object 
    Dim jsonParsedObj As Object 'Not needed 

    jsonString = "{'key1':'val1','key2':'val2'}" 
    Set jsonParsedObj = lib.parse(CStr(jsonString)) 

    For Each keyName In jsonParsedObj.keys 
        MsgBox "Keyname=" & keyName & "//Value=" & jsonParsedObj(keyName) 
    Next 

    Set jsonParsedObj = Nothing 
    Set lib = Nothing 
End Sub 

Sub TestJsonEncode() 'This works, uses vba-json library 
    Dim lib As New JSONLib 'Instantiate JSON class object 
    Set arr = CreateObject("Scripting.Dictionary") 

    arr("key1") = "val1" 
    arr("key2") = "val2" 

    MsgBox lib.toString(arr) 
End Sub 

Ca peut etre faisable ou c'est impossible?

Merci!

Thor

On peut regarder ...

pour le code, il faut avoir vba-json library

https://github.com/VBA-tools/VBA-JSON

Ce qui risque de bloquer, c'est de mettre l'intégralité de la chaîne json dans une même variable comme dans l'exemple jsonString = "{'key1':'val1','key2':'val2'}", et c'est ce qui me bloque depuis le début, mais je vais essayer (pas tout de suite).


Il y a aussi ceci :

Get a jSon response from a web service and populate a worksheet with the result.

Dim dSet As New cDataSet, cb As New cBrowser, jo As New cJobject

    dSet.populateJSON jo.deSerialize( _
        cb.httpGET( _
            "http://dl.dropbox.com/u/14196218/files/jSon1.html" _
            ) _
        ).Child("cDataSet"), Range("json1!$a$1")

create and print a jSon string from a worksheet.

Dim dSet As New cDataSet

    Debug.Print dSet.populateData( _
        Range("jSon2!$a$1"), , , , , , True _
        ).jObject.Serialize(True)

à tester ... sujet passionnant !

En y travaillant, je m'aperçois surtout que cet outil est des plus sommaires et fait une conversion "curieuse", comme s'il s'agissait d'écrire en langage objet en ajoutant les attributs à la suite des autres et séparés par un ".", donc à proscrire.

Je vais voir si je peux utiliser les autres outils ci-dessus, sinon développer un code spécifique.

ThorondorT a écrit :

Oui c'est ca!

Il faut une mettre virgule (comma) et ca passe

Merci!

En faisant la fine bouche: On peut mettre un bouton dans excel qui va chercher le txt json et le transcris direct en beau tableau comme tu as fait?

Le truc c'est qu'il faudra telecharger un fichier json toutes les heures environ pour le jeu a certain moment, donc transferer directement du txt (ou htm) en tableau serait super mega top.

J'ai trouve ca sur un forum:

Conclusion à ce stade de tous mes essais ... excel ne peut pas traiter une chaîne de 37 877 octets dans une seule zone.

Si elle est copiée dans une cellule, elle est tronquée.

Elle peut être mise en intégralité dans une zonetexte, mais dans ce cas elle ne peut pas être lue !!

Il faut donc passer par un outil-passerelle avant de l'inclure dans excel.

Soit l'outil précédent, bien que curieux !! soit un autre outil plus performant en terme de conversion json > csv, soit un développement en javascript dans une page html, soit un outil php.

Là cela sort du cadre excel et me demanderait un temps trop important.

J'en reste donc pour ma part à la méthode proposée ci-dessus.

https://forum.excel-pratique.com/excel/fichier-htm-a-transcrire-proprement-sur-excel-avec-macro-t67129.html#p382522

Good news

J'ai réussi à lire un fichier texte en spécifiant un délimiteur

https://msdn.microsoft.com/fr-fr/library/office/Ff837097.aspx

à partir de là, je pourrai réadapter le code ...

18lecture-texte.xlsm (28.92 Ko)
ThorondorT a écrit :

Le truc c'est qu'il faudra telecharger un fichier json toutes les heures environ pour le jeu a certain moment, donc transferer directement du txt (ou htm) en tableau serait super mega top.

Hé voilà,

a voir ...

27lecture-jeu.xlsm (21.52 Ko)

C'est super!!!

Franchement ca decoiffe!

Je vais essayer de recuperer un 2eme fichier json structure pareil pour tester.

1 petit bug d'estetique:

- si je selectionne importer, puis que j'annule, il m'annonce un bug "run time error "1004".

Une petit addition:

Est il possible qu'il genere dirrectement un graphe du genre celui en piece jointe, par onglet? A mettre dans le macro 'importer', pas besoin de dreer un bouton supplementaire.

chaque colonne est un joueur (colonne M dans les onglets)

Dans chaque colonne, les infos des colonnes J & K.

Le truc, c'est que le jeu genere des fichier json different, en fonction de ce que l'on cherche (montrer leur win/loss comme ici, montrer le jeu des adversaires,etc...)

Je vais essayer de generer d'autres json pour voir ce qu'il est faisable de faire

Merci! C'est franchement du boulot top top!

bon dimanche soir

Thor

image1
Rechercher des sujets similaires à "fichier htm transcrire proprement macro"