python的EXCEL脚本

作用

对给定的列提取第1行,第27行,2-24行红色填充的数据,替换并生成sql语句,保存为output.txt

代码

要求安装openpyxl库

python 复制代码
pip intall openpyxl
python 复制代码
import openpyxl
### 对给定的列提取第1行,第27行,2-24行红色填充的数据,替换并生成sql语句,保存为output.txt ###

# 定义颜色填充的识别函数
def is_red_fill(cell):
    # 检查单元格是否有填充,并且填充颜色是否为红色(FFFF0000)
    return cell.fill.start_color.index == 'FFFF0000'

# 读取Excel文件并获取指定列的数据,提取第1行,第27行,2-24行红色填充的数
def get_data_from_excel(file_path, column):
    wb = openpyxl.load_workbook(file_path)
    ws = wb.active
    
    # 获取第1行的文本
    first_row_text = ws[column + '1'].value if ws[column + '1'].value else ''
    
    # 获取第27行的文本
    twenty_seventh_row_text = ws[column + '27'].value if ws[column + '27'].value else ''
    
    # 获取第2行到第24行红色填充的数据
    red_filled_texts = []
    for row in range(2, 25):  # 从第2行到第24行
        cell = ws[column + str(row)]
        if is_red_fill(cell) and cell.value:  # 检查是否有红色填充并且单元格有值
            red_filled_texts.append(cell.value)
    
    return first_row_text, twenty_seventh_row_text, red_filled_texts


# 调用函数并打印结果
def fanction(file_path, columns):  
    result = []
    for column in columns:
        # column = 'AE'  # 假设我们关注的是B列
        first_row_text, twenty_seventh_row_text, red_filled_texts = get_data_from_excel(file_path, column)
        red_filled_texts = tuple(red_filled_texts)
        red_filled_texts = str(red_filled_texts)

        # print(f"第1行的文本: {first_row_text}")
        # print(f"第27行的文本: {twenty_seventh_row_text}")
        # print(f"第2行到第24行红色填充的数据: {red_filled_texts}")

        if (first_row_text == "") | (twenty_seventh_row_text == "") | (len(red_filled_texts) < 3):
            print(column, "数据不全")
            continue  # 数据不全跳过

        sql1 = f"""update t_LIMS_ORDERTASK OT 
left join T_LIMS_TEST t on T.ID=OT.TESTID
set T.TESTUSERNAME='{twenty_seventh_row_text}'
where T.TESTREPORTFORMULA='{first_row_text}' and OT.TESTUSERNAME in {red_filled_texts};"""

        sql2 = f"""update T_LIMS_ORDERTASKLOG L 
left join T_LIMS_ORDERTASK L on L.ORDERTASKID =OT.ID
left join T_LIMS_TEST t on T.ID=OT.TESTID 
set L.CREATEDBYNAME ='{twenty_seventh_row_text}'
where T.TESTREPORTFORMULA='{first_row_text}' and L.CREATEDBYNAME  in {red_filled_texts} and L.OPERATIONTYPE ='班长审核';"""

        result.append(sql1)
        result.append(sql2)

    with open('output.txt', 'w', encoding='utf-8') as f:
        for item in result:
            f.write("%s\n\n" % item)
        print("output.txt保存成功!")

path = r"C:\Users\16071\Desktop\LIMS未持证上岗资质异常处理.xlsx"
cols = ['B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'AA', 'AE']
fanction(path, cols)
相关推荐
开开心心就好5 分钟前
AI人声伴奏分离工具,离线提取伴奏K歌用
java·linux·开发语言·网络·人工智能·电脑·blender
Never_Satisfied9 分钟前
在JavaScript / HTML中,关于querySelectorAll方法
开发语言·javascript·html
B站_计算机毕业设计之家23 分钟前
豆瓣电影数据采集分析推荐系统 | Python Vue Flask框架 LSTM Echarts多技术融合开发 毕业设计源码 计算机
vue.js·python·机器学习·flask·echarts·lstm·推荐算法
渣渣苏31 分钟前
Langchain实战快速入门
人工智能·python·langchain
3GPP仿真实验室32 分钟前
【Matlab源码】6G候选波形:OFDM-IM 增强仿真平台 DM、CI
开发语言·matlab·ci/cd
devmoon36 分钟前
在 Polkadot 上部署独立区块链Paseo 测试网实战部署指南
开发语言·安全·区块链·polkadot·erc-20·测试网·独立链
lili-felicity36 分钟前
CANN流水线并行推理与资源调度优化
开发语言·人工智能
沐知全栈开发37 分钟前
CSS3 边框:全面解析与实战技巧
开发语言
lili-felicity40 分钟前
CANN模型量化详解:从FP32到INT8的精度与性能平衡
人工智能·python
数据知道42 分钟前
PostgreSQL实战:详解如何用Python优雅地从PG中存取处理JSON
python·postgresql·json