使用 openpyxl 1.8.6 将 excel 单元格编号格式 "General" 更改为 "Text"

Change excel cell number format "General" to "Text", using openpyxl 1.8.6

如何将 excel 单元格数字格式 General 更改为 Text 而不管单元格中的数据?

我正在使用 openpyxl 1.8.6。

数字格式仅适用于数字。如果您想将数字更改为文本,则必须更改数据类型:

ws['A1'] = str(ws['A1'].value)

不再支持版本 1.8.6。您应该考虑升级到更新的版本。

我知道这个问题真的很老了,但它可能仍然是相关的,因为我刚刚在谷歌搜索同样的东西时发现了它。以上大部分时间都有效,但在 Excel 开始表现得像我过去认识的人,并认为一切都是约会的烦人情况下。 ;)

我会这样做:

cell = ws['A1']
cell.number_format = '@'

'@' 是强制文本格式的占位符。文档建议这适用于版本 1.8.6 以及最新版本。

基于@SuperScienceGrl 的精彩回答:

from openpyxl.styles import numbers

cell.number_format = numbers.FORMAT_TEXT

您可以在他们的 official readthedocs page

查看完整的格式列表

正在将@run_the_race 答案应用于列:

#!/usr/bin/env python3

from openpyxl import load_workbook
from openpyxl.styles import numbers

xlsx_file = 'file.xlsx'

# openning:
wb = load_workbook(filename = xlsx_file)

# set column O of default sheet to be text:
ws = wb.active
for row in ws[2:ws.max_row]:  # skip the header
    cell = row[14]            # column O
    cell.number_format = numbers.FORMAT_TEXT

# saving:
wb.save(xlsx_file)

同样包含在接受“名称”列的脚本中,例如 AA:

#!/usr/bin/env python3

import argparse

from openpyxl import load_workbook
from openpyxl.styles import numbers


# ==============
## parsing args:

desc="""
Converts given column of the xlsx file (default sheet) to a text format.

Dependencies:
pip3 install --user --upgrade openpyxl
"""

parser = argparse.ArgumentParser(description=desc, formatter_class=argparse.RawDescriptionHelpFormatter)
parser.add_argument('--version', action='version', version='%(prog)s 0.01')

parser.add_argument('-f', '--file',
                    help = "xlsx file",
                    dest = 'xlsx_file',
                    type = argparse.FileType('r'),
                    )

parser.add_argument('-c', '--column',
                    help = "column (default to %(default)s)",
                    dest = 'column',
                    type = str,
                    default = "A",
                    )

args = parser.parse_args()


# =========
## program:

xlsx_file = args.xlsx_file.name

column_number = sum(
    [ ord(char) - 97 + i*26 for i,char in enumerate(
        list( args.column.lower() )
        ) ]
)

# openning:
wb = load_workbook(filename = xlsx_file)

# convert given column of the default sheet to a text format:
ws = wb.active
for row in ws[2:ws.max_row]:        # skip the header
    cell = row[column_number]
    cell.number_format = numbers.FORMAT_TEXT

# saving:
wb.save(xlsx_file)