如何将excel公式转为值(不改变原有excel格式)?
评论
收藏

如何将excel公式转为值(不改变原有excel格式)?

经验分享
水苏—刀刀侠
2024-02-01 11:47·浏览量:1046
水苏—刀刀侠
发布于 2024-01-24 21:16更新于 2024-02-01 11:471046浏览

一、背景

  • 背景:一般来说我们将公式转为值的时候,可以直接使用复制,然后粘贴的时候选择粘贴值即可,今天遇到了一个问题就是这个excel表格的公式位置不确定,单元格也设置了很多格式,还有合并单元格,这个时候该如何用影刀去实现公式转为值呢?还要让他的格式不改变?
  • 技术定位:初级/中级
  • 目标群体:需要保留excel格式的前提下把公式转为值的相关excel统计人员
  • 整体思路:使用openxyl遍历判断单元格,然后将是公式的单元格转为值,另存的到一个excel表格即可

二、解决方案

2.1 开发步骤

新建python模块

  • 拷贝以下代码
  • 粘贴覆盖掉新建的python模块的代码即可
# 使用提醒:
# 1. xbot包提供软件自动化、数据表格、Excel、日志、AI等功能
# 2. package包提供访问当前应用数据的功能,如获取元素、访问全局变量、获取资源文件等功能
# 3. 当此模块作为流程独立运行时执行main函数
# 4. 可视化流程中可以通过"调用模块"的指令使用此模块

import xbot
from xbot import print, sleep
from .import package
from .package import variables as glv
from openpyxl import load_workbook

def replace_formula(path1, path2):
    '''
    path1 需要替换公式的excel文件路径
    path2 另存为的excel文件路径
    '''
    # 加载Excel工作簿
    workbook = load_workbook(path1,data_only=True)

    # 获取活动的工作表
    worksheet = workbook.active

    # 获取所有合并单元格的范围
    merged_cell_ranges = worksheet.merged_cells.ranges

    # 将合并单元格的范围转换为单元格坐标列表
    merged_cells = set()
    for merged_range in merged_cell_ranges:
        for row in worksheet.iter_rows(min_row=merged_range.min_row,
                                    max_row=merged_range.max_row,
                                    min_col=merged_range.min_col,
                                    max_col=merged_range.max_col):
            for cell in row:
                merged_cells.add(cell.coordinate)

    # 遍历所有单元格
    for row in worksheet.iter_rows():
        for cell in row:
            # 检查单元格是否包含公式并且不是合并区域中的非左上角单元格
            if cell.coordinate not in merged_cells and cell.value is not None:
                if isinstance(cell.value, str) and cell.value.startswith('='):
                    # 计算公式的结果值
                    # 注意:这里你需要一个真实的公式计算器或者Excel实例
                    cell.value = cell.value[1:]

    # 保存工作簿
    workbook.save(path2)
    return path2

调用python模块

  • 使用调用模块指令
  • 调用新建好的python模块选择指定方法

2.2 效果展示

三、总结

代码是gpt写的,稍加修改了下,希望遇到这个问题的朋友,直接拷贝代码,开箱即用,非常方便。


收藏1
全部评论(1)
最新
发布评论
评论