La valeur écrite par la bibliothèque Python openpyxl est affichée dans le format d'affichage exponentiel en utilisant E.
sample_code.py
import openpyxl
wb = openpyxl.open('./Book1.xlsx')
sh = wb['Sheet1']
sh.cell(row=1, column=1).value = 308985489249593041
wb.save('./result.xlsx')
résultat Même si l'affichage est fait avec la fonction exponentielle supprimée, certaines des fins sont remplacées par des 0, ce qui pose problème.
Problèmes avec les spécifications d'Excel au lieu d'Openpyxl
Si vous entrez plus de 15 chiffres dans une cellule Excel, tous les nombres de plus de 15 seront remplacés par 0.
[La saisie d'un nombre long dans une cellule Excel modifie le dernier nombre à 0](https://docs.microsoft.com/en-us/office/troubleshoot/excel/last-digits-changed-to- à partir de zéros)
Dans le cas du calcul numérique, cela ne semble pas poser de problème si la précision est légèrement réduite si le nombre de chiffres est d'autant. C'est un problème si vous écrivez quelque chose comme un identifiant, un numéro cleca ou même un seul chiffre.
Écrivez simplement un nombre sous forme de chaîne de caractères
sample_code.py
import openpyxl
wb = openpyxl.open('./Book1.xlsx')
sh = wb['Sheet1']
#Je vais faire en sorte que la valeur numérique soit écrite ici de type str
sh.cell(row=1, column=1).value = str(308985489249593041)
wb.save('./result.xlsx')
Je suis en colère parce que c'est une chaîne ou un nombre qui commence par une apostrophie, mais je pourrais l'écrire À propos, le calcul dans Excel peut être effectué normalement même si cette erreur se produit.
sample_code.py
import openpyxl
wb = openpyxl.open('./result.xlsx')
sh = wb['Sheet1']
A1_value = sh.cell(row=1, column=1).value
print(A1_value)
print(type(A1_value))
'''
> 308985489249593041
> <class 'str'>
Il semble être acquis sous forme de chaîne de caractères Je dois le remplacer à nouveau par int
Les articles suivants ont été introduits dans les commentaires. Spécifiez le format d'affichage des nombres avec openpyxl
Voilà pourquoi
J'ai passé quelques formats à sh.cell (row =, colum =). Number_format =
.
Le nombre à écrire est le même que ci-dessus 308985489249593041
Dans le format donné par la colonne A, la colonne B est le résultat
Oh, c'est incroyable. Le format a changé correctement.
Mais malheureusement, la fin peut être changée en 0 ...
C'est un format B2 ou chaîne de caractères, mais cela semble impossible si c'est un type int au moment de l'écriture ...
Existe-t-il une solution de contournement plus intelligente? Vous pouvez libérer la limite supérieure avec un plug-in Excel Si vous savez, faites-le moi savoir
Recommended Posts