【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.pswp.cn/pingmian/85619.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/85619.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Fargo】mediasoup发送2:码率分配、传输基类设计及WebRtcTransport原理

Fargo 使用了mediasoup的代码,搬运了他的架构架构精妙,但是似乎是为了sfu而生,【Fargo】mediasoup发送1:控制与数据分离的分层设计和原理我本地用来发送测试,因此需要进一步梳理: 通过分析这段代码,我来详细解释: 一、sfu 需要码率级别的分配控制 1. DistributeAvail…

矩阵置零C++

给定一个 m x n 的矩阵&#xff0c;如果一个元素为 0 &#xff0c;则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 思路&#xff1a; 1、让首行首列记录哪一行哪一列有0 2、于是可以直接遍历非首行首列的元素&#xff0c;若该元素对应的首行首列为0&#xff0c;说明…

大内存对电脑性能有哪些提升

在科技飞速发展的今天&#xff0c;电脑已经成为我们生活和工作中不可或缺的伙伴。无论是日常办公、追剧娱乐&#xff0c;还是进行复杂的游戏和专业设计&#xff0c;电脑的性能都至关重要。而在影响电脑性能的众多因素中&#xff0c;内存大小常常被人们忽视。 多任务处理更流畅…

【StarRocks系列】Update语句

目录 简要流程 详细流程 1. UPDATE 语句执行流程 2. 如何更新表的数据 3. 是否支持事务 总结关键点 简要流程 前端处理&#xff08;FE&#xff09;&#xff1a; 解析 SQL 并验证主键条件生成包含主键列表和新值的更新计划按主键哈希分发到对应 BE 后端执行&#xff08…

计算机三级Linux应用与开发

第 1 章 计算机体系结构与操作系统 1.1 计算科学与计算机系统 冯诺依曼体系的结构要点&#xff1a; 计算机数制采用二进制&#xff0c;程序指令和数据统一存储&#xff0c;计算机应按照程序顺序执行。按照冯诺依曼结构设计的计算机由 控制器&#xff0c;运算器&#xff0c;存…

Web攻防-XSS跨站Cookie盗取数据包提交网络钓鱼BEEF项目XSS平台危害利用

知识点&#xff1a; 1、Web攻防-XSS跨站-手工代码&框架工具&在线平台 2、Web攻防-XSS跨站-Cookie盗取&数据提交&网络钓鱼 演示案例-WEB攻防-XSS跨站-Cookie盗取&数据提交&网络钓鱼&Beef工具 1、XSS跨站-攻击利用-凭据盗取 条件&#xff1a;无防…

自力更生式养老VS三大新型养老:在时代裂变中重构银发生存法则

在岁月长河中&#xff0c;父母曾为子女遮风挡雨&#xff0c;当他们步入暮年&#xff0c;养老问题成为家庭与社会共同关注的焦点。 “父母的养老终究是自力更生”&#xff0c;这句话道出了养老的本质内核。 然而&#xff0c;在自力更生的基础上&#xff0c;选择合适的养老方式…

计算机网络学习笔记:Wireshark观察TCP通信

文章目录 前言一、前置准备二、三报文握手过程抓包2.1、第一次握手2.2、第二次握手2.3、第三次握手 三、通信过程抓包3.1、报文 44379 – 客户端发数据&#xff08;PSH, ACK&#xff09;3.2、 报文 44380 – 服务端确认收到数据&#xff08;ACK&#xff09;3.3、报文 44469 – …

在Linux中,Iptables能做什么?

概述 背景说明 在运维工作中&#xff0c;Iptables是一个不可或缺的工具&#xff0c;它提供了强大的网络流量控制和管理能力。 问题呈现 iptables是一个不可获取的工具&#xff0c;你对其了解多少&#xff1f;该工具你是否真的会用&#xff1f;详细功能对应的应用场景你是否…

Linux——linux的基本命令

目录 一、linux的目录结构 二、绝对路径和相对路径 三、文件类型&#xff08;linux下所有东西都可看作文件&#xff09; 四、文件的权限 五、文件权限的修改&#xff08;chmod&#xff09; 六、linux常用的命令 七、文件查看命令 八、文件编辑命令 九、文件压缩与解压…

智慧水利数字孪生解决方案:百川孪生智领千行,100+标杆案例赋能智慧水利全域升级

在数字技术革命与产业变革深度交织的浪潮下&#xff0c;智慧水利作为保障国家水安全、推动水利高质量发展的核心载体&#xff0c;正以数字孪生技术为引擎&#xff0c;驱动水利行业从“经验驱动”向“数据驱动”转型。 山东融谷作为智慧水利数字孪生领域的创新实践者&#xff0c…

深入解析ID3算法:信息熵驱动的决策树构建基石

本文来自「大千AI助手」技术实战系列&#xff0c;专注用真话讲技术&#xff0c;拒绝过度包装。 ID3&#xff08;Iterative Dichotomiser 3&#xff09; 是机器学习史上的里程碑算法&#xff0c;由Ross Quinlan于1986年提出。它首次将信息论引入决策树构建&#xff0c;奠定了现代…

Java解析audio时长

前提需要电脑上先安装后ffmpeg public long parseDuration(String audioPath) {long durationMs -1;try {Process process Runtime.getRuntime().exec("ffprobe " audioPath);// InputStream is process.getInputStream();InputStream is process.getErrorStrea…

python学智能算法(十五)|机器学习朴素贝叶斯方法进阶-CountVectorizer多文本处理

【1】引言 前序学习进程中&#xff0c;已经学习CountVectorizer文本处理的简单技巧&#xff0c;先相关文章链接为&#xff1a; python学智能算法&#xff08;十四&#xff09;|机器学习朴素贝叶斯方法进阶-CountVectorizer文本处理简单测试-CSDN博客 此次继续深入&#xff0…

AiPy 监控视频智能监察:人像一键抽取+可反复执行程序落地

兄弟们&#xff0c;不知道你们有没有过查监控的经历&#xff0c;虽然现在监控摄像头是越来越多&#xff0c;硬盘越塞越满&#xff0c;但真出了事儿&#xff0c;回放查录像堪比大海捞针&#xff01;纯人工一帧帧的去找&#xff0c;能把眼睛盯瞎还是人影都找不到。不过我最近搞了…

期货反向跟单-终止盘手合作原则(二)

在期货反向跟单的领域中&#xff0c;数据就是实打实的真金白银&#xff0c;是策略能否持续盈利的核心价值所在。然而&#xff0c;许多团队在实际运营过程中&#xff0c;都遭遇了相似的困境&#xff1a;期初策略运转良好&#xff0c;可随着时间推移&#xff0c;数据表现却每况愈…

【Unity】MiniGame编辑器小游戏(三)马赛克【Mosaic】

更新日期&#xff1a;2025年6月17日。 项目源码&#xff1a;后续章节发布 索引 马赛克【Mosaic】一、游戏最终效果二、玩法简介三、正式开始1.定义游戏窗口类2.规划游戏窗口、视口区域3.地图方块阵列①.定义方块结构体②.生成方块阵列③.计算九宫格黑色方块数量④.排除任意九宫…

基于深度学习的智能图像质量评估系统:技术与实践

前言 在数字图像处理和计算机视觉领域&#xff0c;图像质量评估&#xff08;Image Quality Assessment, IQA&#xff09;是一个重要的研究方向。图像质量评估的目标是通过算法自动评估图像的质量&#xff0c;包括清晰度、对比度、噪声水平等。传统的图像质量评估方法主要依赖于…

【Golang面试题】Go语言实现请求频率限制

Go语言实现请求频率限制&#xff1a;从计数器到令牌桶的完整指南 在实际开发中&#xff0c;接口被恶意刷请求是常见问题。本文将深入探讨Go语言中四种主流的请求限流方案&#xff0c;从简单到复杂逐步深入&#xff0c;助你构建高可用服务。 一、基础方案&#xff1a;计数器法…

11Labs 增长负责人分享:企业级市场将从消费级或开发者切入丨Voice Agent 学习笔记

本文摘自 Founder Park AI 产品如何做增长&#xff0c;ElevenLabs的案例很值得学习。 专注于 AI 语音生成的独角兽企业 ElevenLabs 可以说一直在高速增长。在今年 1 月完成 1.8 亿美元 C 轮融资后&#xff0c;ElevenLabs 的估值突破 30 亿&#xff0c;直指 33 亿美元。2024 年…