当前位置: 首页 > news >正文

【Python】Excel表格操作:ISBN转条形码

一、效果

原始文件:

输出文件:

二、代码

import os
import logging
from openpyxl import load_workbook
from openpyxl.drawing.image import Image as ExcelImage
from barcode import EAN13
from barcode.writer import ImageWriterlogging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')def delete_files(directory):file_list = os.listdir(directory)for file in file_list:file_path = os.path.join(directory, file)if os.path.isfile(file_path):os.remove(file_path)def generate_barcode_image_with_text(barcode_str, output_path_without_ext):# Generate barcode image without textean = EAN13(barcode_str, writer=ImageWriter())saved_path = ean.save(output_path_without_ext)return saved_pathdef insert_barcodes_to_excel(excel_file, ISBNCol, imgCol):logging.info("开始处理")if not os.path.exists('barcode_temp'):os.makedirs('barcode_temp')wb = load_workbook(excel_file)ws = wb.activelogging.info(f"加载工作表: {ws.title}")img_height_in_points = 45  # 你设置的图片高度,单位是磅,1磅约等于1.33像素for row in range(2, ws.max_row + 1):barcode_cell = ws.cell(row=row, column=ISBNCol)barcode_str = str(barcode_cell.value).strip()if not barcode_str or len(barcode_str) != 13 or not barcode_str.isdigit():logging.warning(f"第{row}行条码格式不正确,跳过: {barcode_str}")continueimg_path_no_ext = os.path.join('barcode_temp', f'barcode_{barcode_str}')try:img_path = generate_barcode_image_with_text(barcode_str, img_path_no_ext)except Exception as e:logging.error(f"生成条码失败,行{row},条码{barcode_str},错误: {e}")continueimg_for_excel = ExcelImage(img_path)img_for_excel.width = 180img_for_excel.height = 60img_cell = f'{imgCol}{row}'# # 设置列宽ws.column_dimensions[imgCol].width = img_for_excel.width * 0.15# # 设置行高ws.row_dimensions[row].height = img_for_excel.heightws.add_image(img_for_excel, img_cell)# 调整当前行高,避免图片重叠current_height = ws.row_dimensions[row].heightif current_height is None or current_height < img_height_in_points:ws.row_dimensions[row].height = img_height_in_points# logging.info(f"插入条码图片到 {img_cell} 并调整行高")new_file = os.path.splitext(excel_file)[0] + '_with_barcodes.xlsx'try:wb.save(new_file)logging.info(f"保存新文件: {new_file}")except PermissionError:logging.error(f"保存文件失败,可能文件被打开: {new_file}")if os.path.exists('barcode_temp'):logging.info("删除临时文件")delete_files('barcode_temp')logging.info("完成处理!")if __name__ == "__main__":excel_path = 'D:\\temp\\图书清单.xlsx'insert_barcodes_to_excel(excel_path, 1, "B")

三、说明

1、insert_barcodes_to_excel参数1:原始Excel表格文件绝对路径。

2、insert_barcodes_to_excel参数2:ISBN所在列,数字格式。例如:ISBN在A列则输入1,在B列则输入2。

3、insert_barcodes_to_excel参数3:生成的条形码需要放在第几列,大写字母格式。例如:需要放在第二列则输入B,第三列则输入C。

http://www.lqws.cn/news/451981.html

相关文章:

  • React Native【实战范例】弹跳动画菜单导航
  • 学习threejs,三维汽车模拟器,场景有树、云、山等
  • Nginx-Ingress-Controller自定义端口实现TCP/UDP转发
  • 大数据系统架构实践(一):Zookeeper集群部署
  • 局域网投屏工具(将任何设备转换为计算机的辅助屏幕)Deskreen
  • LVS负载均衡群集:Nginx+Tomcat负载均衡群集
  • Lora训练
  • 项目管理利器:甘特图的全面解析与应用指南
  • 计算机网络八股第二期
  • net程序-Serilog 集成 SQL Server LocalDB 日志记录指南
  • 有方 N58 LTE Cat.1 模块联合 SD NAND 贴片式 TF 卡 MKDV1GIL-AST,打造 T-BOX 高性能解决方案
  • 如何在WordPress中添加导航菜单?
  • 基于 CNN-LSTM-GRU 架构的超音速导弹轨迹高级预测
  • Redis如何解决缓存击穿,缓存雪崩,缓存穿透
  • 技术革新赋能楼宇自控:物联网云计算推动应用前景深度拓展
  • 饼图:数据可视化的“切蛋糕”艺术
  • 搜索二叉数(c++)
  • 【Leetcode】字符串之二进制求和、字符串相乘
  • PCB板高速飞拍检测系统 助力电子制造自动化领域
  • idea中push拒绝,merge,rebase的区别
  • C++ 单例模式一种实现方式
  • Cesium、ThreeWebGL详解(二)渲染引擎向GPU传数据、性能优化、引擎对比
  • 使用 C++/OpenCV 构建中文 OCR 系统:实现账单、发票及 PDF 读取
  • 云计算处理器选哪款?性能与能效的平衡艺术
  • 动态WCMP+Flowlet ALB:双引擎驱动智算网络负载均衡
  • 【Pandas】pandas DataFrame explode
  • shel脚本重启Jar服务
  • 对接世界职业院校技能大赛标准,唯众打造高质量物联网实训室
  • 第二章 SQL编程系列-SQL编程基础
  • 人力资源战略重构,AI驱动高质量发展论坛顺利召开