使用Python Pandas为Excel数据生成Code128/Code39条形码报错咨询
Excel批量生成Code128/Code39条形码报错解决方案
报错原因汇总
- 所有报错的核心原因是
python-barcode库仅支持接收单个字符串生成条形码,不能直接传入pandas Series对象或字符串访问器:KeyError: 'ROW1.RACK1':代码中传入的df8.str是pandas的字符串访问器对象,不是实际文本,Code39误将其作为字典读取key触发报错TypeError: unhashable type: 'Series':直接传入整列Series对象,Code128生成时需要对输入做哈希校验,可变的Series对象不支持哈希操作IllegalCharacterError:字符串处理过程中混入了空格、换行等不可见字符,或是旧版本库默认开启了严格字符校验
- 后续修改后输出文本而非条形码的原因:
str(df8)是将整列Series转为带索引的汇总文本,并非单个单元格内容;且直接将条形码对象存入DataFrame时,pandas导出Excel会自动将对象转为字符串,无法识别为图片。
解决方案(批量生成独立条形码文件)
以下代码会自动创建barcodes文件夹,将每个唯一编码对应生成独立的png格式条形码,同时导出编码和条形码文件名的对应Excel表:
import pandas as pd import os from barcode import Code128 from barcode.writer import ImageWriter # 初始化存储条形码的文件夹 if not os.path.exists("barcodes"): os.makedirs("barcodes") def cleanup(): # 替换为你的源文件读取路径,csv可换为pd.read_csv df1 = pd.read_excel("你的源表格.xlsx") # 原有的字符串处理逻辑 df8 = df1['Shelf'].str[:-7] df11 = df8.str.split('.').str[0] df12 = df8.str.split('.').str[1] df13 = df11.str.split('row').str[1] df14 = df12.str.split('rack|case|table|display|endcap|bin|dispenser').str[1] df15 = df13 + '.' + df14 # 取唯一编码批量生成条形码,避免重复生成 unique_codes = df8.dropna().unique() for code in unique_codes: # 去除首尾不可见字符,避免非法字符报错 clean_code = code.strip() # 生成Code128条形码,add_checksum控制是否添加校验位 code_obj = Code128(clean_code, writer=ImageWriter(), add_checksum=False) # 保存文件,替换点为下划线避免文件名异常 save_path = os.path.join("barcodes", clean_code.replace(".", "_")) code_obj.save(save_path) # 生成对应关系表导出Excel res_df = pd.DataFrame({ "Shelf": df1["Shelf"], "row/rack": df15, "对应条形码文件名": df8.str.replace(".", "_") + ".png" }) # 按原有逻辑排序、去重清空 res_df = res_df.sort_values(["row/rack", "Shelf"], ascending=(True, False)) res_df.loc[res_df["对应条形码文件名"].duplicated(keep="first"), "对应条形码文件名"] = "" res_df.to_excel("条形码对应表.xlsx", index=False) if __name__ == "__main__": cleanup()
补充说明
- 若需使用Code39,将代码中的
Code128替换为Code39,并将clean_code转为大写:clean_code = code.strip().upper()即可 - 若需将条形码直接插入Excel单元格,可使用
openpyxl库的图片插入功能,遍历对应关系表将对应路径的png文件插入到指定单元格,调整单元格行高列宽即可正常显示
内容的提问来源于stack exchange,提问作者Nathaniel
相关产品推荐
相关产品推荐

