前言

遇到excel表中有超链接的单元格,如果想批量提取出,一般可以自己编写公式进行提取,但是非常麻烦,我自己怎么尝试也弄不好,然后用python解决了,无所不能的python👍

代码

此脚本会提取指定列的超链接,然后保存到最后一列。

import openpyxl
import re


# --- 可配置参数 ---
INPUT_FILE = r"C:\Users\20470\Downloads\测试.xlsx"
OUTPUT_FILE = r"C:\Users\20470\Downloads\测试new.xlsx"
SOURCE_COLUMN = 'A'           # 含有超链接的列
NEW_COLUMN_HEADER = '超链接'  # 保存超链接的新列标题
# ------------------



# 打开工作簿
workbook = openpyxl.load_workbook(INPUT_FILE)

# 选择要操作的工作表
worksheet = workbook.active

# 定义一个列表存储即将提取的超链接
link_list = []

# 遍历第一列(A列)
for cell in worksheet[SOURCE_COLUMN]:
    # 判断单元格是否为超链接
    if cell.hyperlink is not None:
        # 获取超链接的地址
        link_list.append(cell.hyperlink.target)
    else:
        link_list.append(None)  # 如果没有超链接,填充 None

# 在文件中新增一列,填写提取出的超链接
new_column_index = worksheet.max_column + 1
# 新增“超链接”列的表头
worksheet.cell(row=1, column=new_column_index, value=NEW_COLUMN_HEADER)


# 将提取出的超链接写入新增的列
for i, link in enumerate(link_list, start=1):  # 使用 enumerate 遍历 link_list,i 从 1 开始
    # 因为表格第一行是表头,并且link_list[0]对应表头,也没有超链接,所以从第二行开始写入link_list[1]及以后的数据
    if i == 1:
        continue  # 跳过第一行(表头)
    worksheet.cell(row=i, column=new_column_index, value=link)


# 保存工作簿
workbook.save(OUTPUT_FILE)
# 关闭工作簿 (在 openpyxl 中,save 后 close 不是必须的,但可以调用)
workbook.close()

print("超链接提取并写入完成!")