2
votes

Conversion d'Excel en JSON à l'aide de Python

J'ai un fichier Excel et je souhaite le convertir en fichier JSON . Donc, l'Excel est quelque chose comme ça:

import openpyxl, pprint, json
print('Opening workbook...')
wb = openpyxl.load_workbook('excel_form.xlsx')
sheet = wb.get_sheet_by_name('Sheet')


excel_data = {}
print('Reading rows...')
for row in range(2, sheet.max_row + 1):
    Col F  = sheet['F' + str(row)].value
    Col C = sheet['C' + str(row)].value
    Col A = sheet['A' + str(row)].value

    excel_data.setdefault(Col F, {})
    excel_data[Col F].setdefault(Col C, {'Col A': Col A})


# Open a new text file and write the contents of excel_data to it.
print('Writing results...')
with open('DATA.json', 'w') as resultFile:
    json.dump(Matrix, resultFile)
print('Done.')

Je voudrais que le JSON suive ce format:

{
"EE": {
    "A": {
      "Col A key": "1",
      "Col A key": "7"
    },
    "E": {
      "Col A key": "8"
    },
  },

"FF": {
    "B": {
      "Col A key": "2"
    },
    "C": {
      "Col A key": "4"
    }
  },

"HH": {
    "D": {
      "Col A key": "5",
      "Col A key": "6"
    }
  }

}

Quelqu'un peut-il m'aider à mettre en œuvre cela en utilisant python ? J'ai essayé différentes manières mais sans succès. Voici ce que j'ai fait jusqu'à présent:

-------------------------
| Col A | Col C | Col F |
--------+-------+--------
|   1   |   A   |   EE  |
|   2   |   B   |   FF  |
|   4   |   C   |   FF  |
|   5   |   D   |   HH  |
|   6   |   D   |   HH  |
|   7   |   A   |   EE  |
|   8   |   E   |   EE  |
--------------------------

Merci d'avance


3 commentaires

Quel est le problème spécifique avec le code affiché?


Que diriez-vous de cette réponse précédente: stackoverflow.com/questions/53940031/...


Je pense que vous devriez envisager d'utiliser le package simplejson au lieu d'essayer de réinventer la roue.


3 Réponses :


3
votes

Il existe 2 approches pour atteindre le résultat:

  1. Utilisation d' excel2json . C'est un outil assez simple mais qui pourrait vous être utile.
    • Tout d'abord, installez le package excel2json-3 aide de pip .
    • Ensuite, l'exécution de ce bloc de code doit générer un fichier JSON pour chaque feuille du fichier:
import pandas

excel_data_fragment = pandas.read_excel('excel_form.xlsx', sheet_name='Sheet')

json_str = excel_data_fragment.to_json()

print('Excel Sheet to JSON:\n', json_str)

  1. Utiliser des pandas . Si vous recherchez une solution plus complète, vous pourriez tout aussi bien trouver les pandas utiles. C'est une bibliothèque conçue pour la manipulation de données et possède de nombreuses autres fonctionnalités.
    • Installez d'abord les pandas via pip .
    • Ensuite, l'exécution de ce code devrait entraîner l'impression d'une chaîne JSON décrivant la feuille Excel appelée Sheet .
import excel2json

excel2json.convert_from_file('excel_form.xlsx')

Lien vers la source


1 commentaires

Il émet une erreur AttributeError: le module 'excel2json' n'a pas d'erreur d'attribut 'convert_from_file'



3
votes

Je préfère utiliser xlrd pour convertir les lignes Excel au format JSON .

 with open("RulesJson.json", "w", encoding="utf-8") as writeJsonfile:
      json.dump(data_list, writeJsonfile, indent=4,default=str) 

Ouvrez le classeur et sélectionnez la première feuille de calcul

for rownum in range(1, sh.nrows):
     data = OrderedDict()

row_values = sh.row_values(rownum)
data['<Column Name1>'] = row_values[0]
data['<Column Name2>'] = row_values[1]
data_list.append(data)

Créer une liste pour contenir des dictionnaires

data_list = []

Parcourez chaque ligne de la feuille de calcul et récupérez les valeurs dans dict

wb = xlrd.open_workbook("Excel-sheet location here")
sh = wb.sheet_by_index(0)

Ecrire dans un fichier:

import xlrd
from collections import OrderedDict
import json


0 commentaires

0
votes

Vous pouvez consulter cet outil, peut-être que cela vous aidera:

Flatten Tool est une bibliothèque Python et une interface de ligne de commande pour convertir des feuilles de calcul simples ou multiples en un document JSON et inversement.

https://flatten-tool.readthedocs.io/


0 commentaires