Формат ячейки в Excel с помощью модуля openpyxl
Может кто знает как с помощью модуля openpyxl, передать число не в формате общий а именно формате числовой. Третья колонка передается в формате общий.
def exportFile(self, nameFileExport, dataList, range, columnsExport):
wb = workbook.Workbook()
wb.guess_types = True
ws = wb.active
ws.append(columnsExport)
range_ = range + str(len(dataList) + 1)
for row in dataList:
ws.append(row)
tab = Table(displayName='Table1', ref=range_)
ws.add_table(tab)
wb.save(nameFileExport)
Ответы (2 шт):
Автор решения: vadim vaduxa
→ Ссылка
Openpyxl number format, number_format
import openpyxl.styles.numbers
cell.number_format = openpyxl.styles.numbers.BUILTIN_FORMATS[2]
Lib\site-packages\openpyxl\styles\numbers.py:
BUILTIN_FORMATS = {
0: 'General',
1: '0',
2: '0.00',
3: '#,##0',
4: '#,##0.00',
5: '"$"#,##0_);("$"#,##0)',
6: '"$"#,##0_);[Red]("$"#,##0)',
7: '"$"#,##0.00_);("$"#,##0.00)',
8: '"$"#,##0.00_);[Red]("$"#,##0.00)',
9: '0%',
10: '0.00%',
11: '0.00E+00',
12: '# ?/?',
13: '# ??/??',
14: 'mm-dd-yy',
15: 'd-mmm-yy',
16: 'd-mmm',
17: 'mmm-yy',
18: 'h:mm AM/PM',
19: 'h:mm:ss AM/PM',
20: 'h:mm',
21: 'h:mm:ss',
22: 'm/d/yy h:mm',
37: '#,##0_);(#,##0)',
38: '#,##0_);[Red](#,##0)',
39: '#,##0.00_);(#,##0.00)',
40: '#,##0.00_);[Red](#,##0.00)',
41: r'_(* #,##0_);_(* \(#,##0\);_(* "-"_);_(@_)',
42: r'_("$"* #,##0_);_("$"* \(#,##0\);_("$"* "-"_);_(@_)',
43: r'_(* #,##0.00_);_(* \(#,##0.00\);_(* "-"??_);_(@_)',
44: r'_("$"* #,##0.00_)_("$"* \(#,##0.00\)_("$"* "-"??_)_(@_)',
45: 'mm:ss',
46: '[h]:mm:ss',
47: 'mmss.0',
48: '##0.0E+0',
49: '@', }
Автор решения: Sten Horland
→ Ссылка
Используйте .number_format = "0" к ячейке, но это позволит использовать значения вплоть до 15 знаков включительно. Все, что больше корректно отображаться будет только в текстовой форме (приведение к str при задании значения ячейки как вариант). Пример:
ws["A1"].value = 123123123123123
ws["A1"].number_format = "0"
# На выходе будет число 123123123123123
ws["A2"].value = 123123123123123999
ws["A2"].number_format = "0"
На выходе также будет число 123123123123123000, последние цифры заменены на 0.
