Comment écrire une trame de données de valeurs de chaîne dans un fichier Excel sous forme de valeurs numériques formatées?
Fondamentalement, j'ai une liste de valeurs de chaîne qui sont destinées à être converties en numérique et imprimées sur une feuille Excel. Im capable de le faire déjà mais je veux que ces valeurs soient imprimées en tant que "valeurs de nombre excel" . Voici ce que j'ai:
writer = pd.ExcelWriter('test.xlsx', engine='openpyxl')
listOfValues = ['3913375,45','126179,15','22324,72','26335,28','3699901,34']
df_values = pd.DataFrame({'TOTAL': listOfValues}).apply(pd.to_numeric)
df_values.to_excel(writer, sheet_name='test')
writer.save()
Mon résultat est:
Excel résultant
Mais je veux qu'il soit imprimé sous forme de valeurs numériques séparées par des points pour le rendre plus facile à préparer, comme ça:
Ce que je veux avoir comme résultat
(La solution que je veux ne peut pas être imprimée sous forme de chaînes dans le fichier Excel résultant, il doit s'agir de valeurs numériques, comme si nous utilisions l'option "Format as Number (Shift + ctrl + 1)" dans libreoffice calc).
(J'utilise Python 3.8.5 et LibreOffice Calc pour les tests mais le résultat est destiné à fonctionner dans Excel 2016).
C'est possible? Merci pour votre aide et désolé pour mon anglais!
Réponses
J'ai trouvé cette autre question , elle est différente, mais la réponse est la même je pense.
from openpyxl import load_workbook
wb = load_workbook('a.xlsx')
ws = wb[wb.sheetnames[0]]
cell11 = ws.cell(1, 1)
cell11.number_format = '#,##0.00'
wb.save('b.xlsx')
wb.close()
Cela fonctionne avec ce format, mais il semble que cela ne fonctionne pas avec le '#.##0,00'
format
Vérifiez ça https://xlsxwriter.readthedocs.io/working_with_pandas.html
Il est possible de formater toute autre donnée de colonne non date / date / heure en utilisant set_column ()
Essayez de modifier l'exemple de code de mise en forme à partir de ceci:
format1 = workbook.add_format({'num_format': '#,##0.00'})
pour ça:
format1 = workbook.add_format({'num_format': '#.##0,00'})