Python:如何强制字符串保留格式不被Excel转换为日期?
解决Excel自动将"4/10"转为日期的问题
针对你使用的pandas、xlwings、openpyxl三个库,分别提供以下解决方案,确保"4/10"这类物料名称以纯字符串形式写入Excel:
使用pandas的解决方案
有两种可靠方式:
- 方式一:在字符串前添加英文单引号(
'),Excel会自动识别为文本格式,且最终单元格不会显示单引号
import pandas as pd # 构造数据时给目标字符串前加单引号 df = pd.DataFrame({'物料名称': ["'4/10", "'5/20", "A-123"]}) df.to_excel('物料清单.xlsx', index=False)
- 方式二:借助openpyxl引擎,写入后设置单元格格式为文本
import pandas as pd from openpyxl import load_workbook # 先写入原始数据 df = pd.DataFrame({'物料名称': ["4/10", "5/20", "A-123"]}) df.to_excel('物料清单.xlsx', index=False, engine='openpyxl') # 加载工作簿并设置目标列格式为文本 wb = load_workbook('物料清单.xlsx') ws = wb.active # 假设物料名称在B列,跳过表头设置整列格式 for cell in ws['B'][1:]: cell.number_format = '@' wb.save('物料清单.xlsx')
使用xlwings的解决方案
xlwings可以直接先设置单元格格式为文本,再写入内容,从根源避免Excel自动转换:
import xlwings as xw # 打开或新建工作簿 wb = xw.Book('物料清单.xlsx') ws = wb.sheets[0] # 可选:设置整列为文本格式 ws.range('A:A').number_format = '@' # 写入表头 ws['A1'].value = '物料名称' # 写入目标字符串 ws['A2'].value = "4/10" ws['A3'].value = "5/20" wb.save() wb.close()
使用openpyxl的解决方案
直接创建单元格并指定文本格式,再写入数据:
from openpyxl import Workbook wb = Workbook() ws = wb.active # 设置表头 ws['A1'] = '物料名称' # 方式一:单个单元格设置格式后写入 cell = ws['A2'] cell.number_format = '@' cell.value = "4/10" # 方式二:设置整列为文本格式后批量写入 ws.column_dimensions['A'].number_format = '@' ws['A3'] = "5/20" ws['A4'] = "B-456" wb.save('物料清单.xlsx')
内容的提问来源于stack exchange,提问作者II-SARIP-II
相关产品推荐
相关产品推荐

