excel行号

本文介绍了一种简便的方法来从Excel行号中提取数字,包括如何使用trim函数去除字母并将其转换为数值类型。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

需要取得类似excel的行列号里的数字时,便捷方法是trim($str,'A..Z'),$str是类似"N41"这样的excel行号,此法可以直接去掉大写字母,注意结果+0或者*1以转换成数值型;
import pandas as pd from openpyxl import load_workbook from openpyxl.drawing.image import Image import base64 from io import BytesIO file_path = r"D:\excel\anwang.xlsx" def extract_image_base64(ws): """精确提取图片并映射到Excel行号""" img_dict = {} for img in ws._images: if isinstance(img, Image): # 获取锚定单元格的精确行号(兼容不同openpyxl版本) try: # 新版本通过坐标获取 row = img.anchor._from.row + 1 # openpyxl行号从0开始,转换为Excel行号 except AttributeError: # 旧版本通过锚点对象获取 row = img.anchor.top_left.row + 1 # 转换图片为base64 img_bytes = BytesIO() img.image.save(img_bytes, format=img.image.format) img_dict[row] = base64.b64encode(img_bytes.getvalue()).decode('utf-8') return img_dict try: # ===== 加载Excel ===== wb = load_workbook(file_path, data_only=True) ws = wb.active # ===== 提取图片 ===== img_base64_dict = extract_image_base64(ws) print(f"检测到{len(img_base64_dict)}张图片,分布行号:{list(img_base64_dict.keys())}") # ===== 读取数据 ===== df = pd.read_excel(file_path, engine='openpyxl') # ===== 关键修改:调整行号偏移 ===== # Excel数据从第2行开始(第1行是标题),Pandas索引从0开始 df['attachment'] = df.index.map(lambda x: img_base64_dict.get(x + 2, None)) # x+2对应Excel数据行 # 强制转换列类型为object df['attachment'] = df['attachment'].astype('object') # ===== 验证结果 ===== print("\n【处理后的attachment列】") print(df[['Title', 'attachment']].head(3)) print(f"\n非空图片数量:{df['attachment'].notnull().sum()}") except Exception as e: print(f"执行出错:{str(e)}")我想修改这段代码,这段代码读取的excel表结构为:列名清单: 1. Title 2. Description 3. Account 4. ListingDate 5. Price 6. attachment 7. Address 8. Date 数据类型及非空统计: 数据类型 非空值数量 Title object 72 Description object 72 Account int64 72 ListingDate object 72 Price object 72 attachment float64 0 Address object 71 Date datetime64[ns] 71但是我读取不到excel表中attachment这一列的图片,读取到的都是none。图片通过插入图片对象的方式添加的图片。请修改这段代码将读取excel表前五行,将attachment这一列的图片用base64编码打印出来
03-27
import pandas as pd from openpyxl import load_workbook from openpyxl.drawing.image import Image import base64 from io import BytesIO file_path = r"D:\excel\anwang.xlsx" def extract_image_base64(ws, target_col='attachment'): """提取指定列的图片为Base64""" # 创建行号与图片的映射字典 img_dict = {} # 遍历所有图片对象 for img in ws._images: if isinstance(img, Image): # 获取图片锚定的左上角单元格行号(从1开始) anchor = img.anchor if isinstance(anchor, tuple): # 兼容openpyxl不同版本 row = anchor[1] else: row = anchor.top_left.row # 将图片转为二进制流 img_bytes = BytesIO() img.image.save(img_bytes, format='PNG') img_dict[row] = base64.b64encode(img_bytes.getvalue()).decode('utf-8') return img_dict try: # ===== 步骤1:用openpyxl加载原始Excel ===== wb = load_workbook(file_path, data_only=True) ws = wb.active # 获取第一个工作表 # ===== 步骤2:提取图片到字典 ===== img_base64_dict = extract_image_base64(ws, target_col='attachment') # ===== 步骤3:创建DataFrame并与图片匹配 ===== df = pd.read_excel(file_path, engine='openpyxl') if 'attachment' in df.columns: # 根据行号映射填充Base64数据(注意Excel行号从1开始,Pandas索引从0开始) df['attachment'] = df.index.map(lambda x: img_base64_dict.get(x + 1, None)) # 输出结果 print("\n【Attachment列内容】") print(df['attachment'].to_string(index=False)) else: print("警告:未找到attachment列") except FileNotFoundError: print(f"错误:文件 {file_path} 不存在!") except Exception as e: print(f"发生错误: {e}")修改以上代码,目前读取到的excel表列名清单: 1. Title 2. Description 3. Account 4. ListingDate 5. Price 6. attachment 7. Address 8. Date 数据类型及非空统计: 数据类型 非空值数量 Title object 72 Description object 72 Account int64 72 ListingDate object 72 Price object 72 attachment float64 0 Address object 71 Date datetime64[ns] 71当前代码读取attachment这一列的值为none,可是这一列存入了图片。
03-27
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值