python,pandas ,openpyxl提取excel特定数据,合并单元格合并列,设置表格格式,设置字体颜色,

news2024/10/7 17:24:02

python,pandas ,openpyxl提取excel特定数据,合并单元格合并列,设置表格格式,设置字体颜色,

代码

import os

import numpy
import pandas as pd
import openpyxl
from openpyxl.styles import Font
from openpyxl.styles import Border, Side

def read(file):
    # 读取表格A和表格B
    df_a = pd.read_excel(file, skiprows=9)  # 用实际的文件路径替换 '表格A.xlsx'

    df_b = pd.DataFrame()
    columns_to_copy = ['Case NO', 'Serial NO', 'Net Weight', 'Length', 'Width', 'Thickness', 'ThicknessRange',
                       'ArealWeight', 'ArealWeightRange', 'TensileStrength', 'Elongation', 'SurfaceRoughnessSSide',
                       'SurfaceRoughnessMSide', 'SurfaceGlossSSide', 'SurfaceGlossMSide', 'Wettability', 'WrapHeight',
                       'HTAntiOxidization', 'Cr'
                       ]
    df_subset = df_a[columns_to_copy]

    # 将所选列复制到表格B的相应位置,空列用于合并使用
    df_b['Case NO'] = df_subset['Case NO']
    df_b['Serial NO'] = df_subset['Serial NO']
    df_b['Net Weight'] = df_subset['Net Weight']
    df_b['Length'] = df_subset['Length']
    df_b['Areal Weight'] = df_subset['ArealWeight']
    df_b['Tensile Strength'] = df_subset['TensileStrength']
    df_b['Column1'] = [None] * len(df_b)
    

    # 定义每列的区间要求,使用 numpy.inf 表示正无穷大,-numpy.inf 表示负无穷大
    column_ranges = {
        'Areal Weight': (54 - 2.5, 54 + 2.5),  # 0 到正无穷大
        'Tensile Strength': (300, numpy.inf),  # 负无穷大到 200
        'Elongation': (5, numpy.inf),
        'Wettability': '合格',
        'Warp Height': (-numpy.inf, 10),
        'Surface Roughness M': (-numpy.inf, 3.0),
        'Surface Roughness S': (-numpy.inf, 0.4),
    }

    df_b = df_b.iloc[1:-1]
    # 遍历每列并根据不同的条件进行处理
    for column, range_or_string in column_ranges.items():
        if isinstance(range_or_string, tuple):  # 区间检查
            min_value, max_value = range_or_string
            df_b[column] = df_b[column].apply(
                lambda x: x if (x == 0 or (min_value <= float(x) <= max_value)) else str(x) + 'XX')
        elif isinstance(range_or_string, str):  # 字符串设置
            df_b[column] = range_or_string

    # 编写一个函数来尝试将值转换为float
    def try_convert_to_float(value):
        try:
            return float(value)
        except (ValueError, TypeError):
            return value

    # 使用applymap将DataFrame中的值尝试转换为float,保留无法转换的原始值
    df_b = df_b.applymap(try_convert_to_float)

    # 定义一个函数来设置样式,将文本居中对齐和上下居中对齐
    def set_cell_style(value):
        style = 'text-align: center; vertical-align: middle;'
        return style

    # 使用Styler对象来应用样式,同时设置文本的居中对齐和上下居中对齐
    df_b = df_b.style.applymap(lambda x: set_cell_style(x))

    # 保存到新文件
    df_b.to_excel('temp.xlsx', index=False, engine='openpyxl')

    # 合并单元格
    wb = openpyxl.load_workbook('temp.xlsx')
    ws = wb.active
    #第一列连续相同值的合并单元格
    # 获取第一列数据
    type_list = []
    i = 2
    while True:
        r = ws.cell(i, 1).value
        if r:
            type_list.append(r)
        else:
            break
        i += 1

    # 判断合并单元格的始末位置
    s = 0
    e = 0
    flag = type_list[0]
    for i in range(len(type_list)):
        if type_list[i] != flag:
            flag = type_list[i]
            e = i - 1
            if e >= s:
                ws.merge_cells("A" + str(s + 2) + ":A" + str(e + 2))
                s = e + 1
        if i == len(type_list) - 1:
            e = i
            ws.merge_cells("A" + str(s + 2) + ":A" + str(e + 2))

    ### 合并列
    num_rows = ws.max_row

    combine_columns = {
        ('F', 'G'),
        ('H', 'I'),
        ('J', 'K'),
        ('L', 'M'),
        ('N', 'P'),
        ('Q', 'R'),
        ('S', 'T'),
    }

    for i in range(num_rows):
        for columns in combine_columns:
            start, end = columns
            ws.merge_cells(start + str(i + 1) + ":" + end + str(i + 1))

    # 定义不同列的字体配置
    font_columns = [
        (['A', 'B', 'C', 'D'], Font(name='Times New Roman', size=9, bold=True)),
        (['E', 'F', 'H', 'L', 'Q', 'S'], Font(name='Times New Roman', size=12)),
        (['J', 'N'], Font(name='宋体', size=12)),
    ]

    # 设置列的字体样式
    for labels, font in font_columns:
        for label in labels:
            for cell in ws[label]:
                cell.font = font
                # XX结尾的数据改成红色
                if cell.value and str(cell.value).endswith("XX"):
                    cell.value = cell.value[:-2]
                    cell.font = Font(name='Times New Roman', size=12, bold=True, color="FF0000", )
    # 创建一个边框样式
    border_style = Border(
        left=Side(border_style='thin', color='000000'),
        right=Side(border_style='thin', color='000000'),
        top=Side(border_style='thin', color='000000'),
        bottom=Side(border_style='thin', color='000000')
    )

    # 遍历工作表中的所有单元格并应用边框样式
    for row in ws.iter_rows():
        for cell in row:
            cell.border = border_style
    wb.save('output_excel_file.xlsx')

    try:
        os.remove('temp.xlsx')
    except FileNotFoundError:
        pass
    except Exception as e:
        pass
    return 'output_excel_file.xlsx'

输出效果

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1136209.html

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

相关文章

数字音频工作站软件 Ableton Live 11 mac中文软件特点与功能

Ableton Live 11 mac是一款数字音频工作站软件&#xff0c;用于音乐制作、录音、混音和现场演出。它由Ableton公司开发&#xff0c;是一款极其流行的音乐制作软件之一。 Ableton Live 11 mac软件特点和功能 Comping功能&#xff1a;Live 11增加了Comping功能&#xff0c;允许用…

详解:飞讯是如何助力集团型制造企业实现数字化转型的

飞讯软件成立17年来&#xff0c;成功服务了上百家自动化装备及零部件制造企业&#xff0c;对这类企业的业务特点和痛点非常熟悉。在解决企业数字化转型挑战方面&#xff0c;我们拥有丰富的经验和技术平台优势。因此&#xff0c;于2022年我们与东莞一家大型自动化装备制造企业正…

Fuzz测试:自动化测试软件隐患和漏洞的秘密武器

0x01 什么是模糊测试 模糊测试&#xff08;Fuzz Testing&#xff09;是一种广泛用于软件安全和质量测试的自动化测试方法。它的基本思想是向输入参数或数据中注入随机、不规则或异常的数据&#xff0c;以检测目标程序或系统在处理不合法、不正常或边缘情况下的行为。模糊测试通…

Egg.js使用MySql数据库

最近在接手一个项目&#xff0c;vuenuxtegg&#xff0c;我也是刚开始学习egg.js&#xff0c;所以会将自己踩的坑都记录下来。 安装mysql 使用sequelize连接数据库&#xff0c;首先安装egg-sequelize和mysql2。 npm install --save egg-sequelize mysql2打开package.json文件…

优思学院|中质协六西格玛考试形式是什么样的?

中质协的考试形式主要为单选和多选题&#xff0c;近年也有加了一小部分填空题&#xff0c;和国际认证考试有很大区别&#xff0c;因为美质协&#xff08;ASQ&#xff09;、国际精益六西格玛研究所&#xff08;ILSSI&#xff09;&#xff0c;又或者著名的PMP项目管理认证等都是采…

day51 --动态规划10

121. 买卖股票的最佳时机 122.买卖股票的最佳时机II 第一题&#xff1a;买卖股票的最佳时机 给定一个数组 prices &#xff0c;它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票&#xff0c;并选择在 未来的某一个不同的日子 卖出…

Phthon下载库函数

在代码中使用import tushare as ts导入时编译会报错找不到tushare&#xff0c;此时则表示本地没有相应的库函数包 打开安装python的目录&#xff0c;找到pip.exe文件目录&#xff0c;例如D:\Python\Python311\Scripts&#xff0c;文件夹右键->在终端打开&#xff0c;输入pi…

RPC远程调用加密方法获取返回值

前言 从混淆的加密JS中还原了加密参数的具体生成流程&#xff0c;结果想从JS转python的过程中第一步就卡住了。开头密钥JS代码如下&#xff0c;但是水平有限不知道如何转为python实现(如果有大佬知道希望可以评论指点)。利用execjsjsdom来执行简化还原后的JS代码依旧无法实现。…

云游数智农业世界,体验北斗时空智能

今日&#xff0c;2023年中国国际农业机械展览会在武汉正式拉开帷幕&#xff0c;众多与会者云集&#xff0c;各类农机产品纷呈&#xff0c;盛况空前。 千寻位置作为国家北斗地基增强系统的建设与运营方&#xff0c;在中国国际农业机械展览会上亮相&#xff0c;以「北斗时空智能 …

基于pyenv和virtualenv搭建python多版本虚拟环境

pyenv简介 由于Python的依赖是基于site的&#xff0c;这对于生产环境来说&#xff0c;是一种简单而正确的方式&#xff0c;然而&#xff0c;对于我们的开发环境&#xff0c;基于这样的管理方式&#xff0c;带来了可怕的第三方依赖管理的难题&#xff0c;virtualenv适时出现了&a…

【AICFD案例教程】锥形燃烧器燃烧仿真

AICFD是由天洑软件自主研发的通用智能热流体仿真软件&#xff0c;用于高效解决能源动力、船舶海洋、电子设备和车辆运载等领域复杂的流动和传热问题。软件涵盖了从建模、仿真到结果处理完整仿真分析流程&#xff0c;帮助工业企业建立设计、仿真和优化相结合的一体化流程&#x…

Linux入门攻坚——5、find,locate,特殊权限,磁盘管理初识

文件查找&#xff1a;在文件系统上查找符合条件的文件。 工具&#xff1a;locate——非实时查找&#xff08;数据库查找&#xff0c;基于索引&#xff0c;索引需要维护&#xff0c;有间隔&#xff0c;所以有不一致的情况存在&#xff09;。find——实时查找 locate&#xff1…

Leetcode—26.删除有序数组中的重复项【简单】

2023每日刷题&#xff08;十&#xff09; Leetcode—26.删除有序数组中的重复项 双指针法实现代码 int removeDuplicates(int* nums, int numsSize){int i 0;int j 1;while(j < numsSize) {if(nums[j] ! nums[i]) {nums[i] nums[j];}j;}return i 1; } 运行结果 之后我…

算法通关村第19关【黄金】| 继续盘点高频动态规划dp问题

回文串专题 1.最长回文串 思路&#xff1a; 确定dp&#xff1a;dp[i][j]子串是否是回文串 确定递推公式&#xff1a; 例如&#xff1a;aa|cbc|aa dp[2][4] dp[3][3] true 如果s[i] s[j] 那么 dp[i][j] dp[i1][j-1]否则dp[i][j] false 确定初始化&#xff1a;dp[i][i] …

Ubuntu ARMv8编译Qt源码以及QtCreator

最近需要在NVIDIA小盒子上面跑一个程序&#xff0c;一开始想着在Ubuntu x64下交叉编译一版&#xff0c;后来发现libqxcb.so 这个库在configure时就会一直报错&#xff0c;多方查找怀疑可能是由于硬件不支持在x64环境下编译AMR架构的xcb库。 所以最后在ARM下直接编译Qt源码了&am…

ONNX: export failure ❌ 0.0s: Unsupported ONNX opset version: 17

python export.py --weights runs/train/exp6/weights/best.pt --include onnx yolov5 训练好的pt文件导出onnx 导出失败 异常信息&#xff1a; Fusing layers… YOLOv5s summary: 157 layers, 7012822 parameters, 0 gradients, 15.8 GFLOPs PyTorch: starting from runs/tra…

vue中时间控件

//组件 <template><div class"home-time"><div class"tab"><el-radio-group v-model"radio" change"radioChange"><el-radio-button label"1">天</el-radio-button><el-radio-butto…

蕉下冲锋衣:过冬利器还是昙花一现?

“双11”前夕&#xff0c;靠防晒单品小黑伞起家的蕉下上新“过冬”产品冲锋衣。 此前&#xff0c;蕉下于2022年4月和10月分别向港交所递交招股书&#xff0c;拟冲刺“中国城市户外第一股”&#xff1b;截止目前&#xff0c;其IPO申请状态已转为“失效”。 「不二研究」据蕉下…

记一次 .Net+SqlSugar 查询超时的问题排查过程

环境和版本&#xff1a;.Net 6 SqlSuger 5.1.4.* &#xff0c;数据库是mysql 5.7 &#xff0c;数据量在2000多条左右 业务是一个非常简单的查询&#xff0c;代码如下&#xff1a; var list _dbClient.Queryable<tb_name>().ToList(); tb_name 下配置了一对多的关系…

Calibre软件学习

Mentor calibre 软件 版图物理验证主要包括&#xff1a; ①设计规则检查&#xff08; DRC &#xff09; ②电学规则检查&#xff08; ERC &#xff09; ③版图与电路图一致性检查 ( LVS) LVS 版图与电路图一致性检查 ( Layout Versus Schematic, LVS) 的目的在于检查人工…