Comment écrire une trame de données de valeurs de chaîne dans un fichier Excel sous forme de valeurs numériques formatées?

Jan 05 2021

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

DonLarry Jan 06 2021 at 07:11

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

DonLarry Jan 05 2021 at 21:55

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'})