Python导出EXCEL去除公式/excel 导出无公式的文件

部署运行你感兴趣的模型镜像

在工作场景中,经常需要将EXCEl导出并发送给其他人的需求,一个sheet中的内容可能关联了好几个EXCEl才得出的,如果直接发送EXCEL,里面会带有公式,不方便查看,并且可能触发了自动计算的话会导致内容都报错了。因此需要将EXCEL中的公式都去除后,导出为正常无公式的文件后,再发送。

这里用Python实现这个功能,并且可以确保数据的除了值没有公式,其他样式都和原来的表格一模一样。

思路:

用excel中的复制sheet功能,将sheet复制到新的EXCEl,并将原来EXCEl中的值再贴到新的EXCEL。这里不使用range的copy功能,会对剪切板有影响。

import datetime
import os

import xlwings as xw


class Export_excel:
    def __init__(self,wb: xw.Book) -> None:
        self.wb=wb
    def export_excelfile(self,exprot_filepath=None):
        with self.wb.app.books.add() as nwb:
            for index,wb_sheet in enumerate(self.wb.sheets):
                # 注意这里的sheet是一个对象,不是sheetname
                wb_sheet:xw.Sheet
                if index==0:
                    copy_sheet:xw.Sheet=wb_sheet.copy(after=nwb.sheets[-1])
                    # 新建的表格会有一个默认sheet,因为copy是放在第一个表格之后的,所以此处可以把第一个sheet删除
                    nwb.sheets[0].delete()
                    # 如果第一个copy的sheet和新建表格的默认sheet重名了,名称会变,带上(1/2)之类的,这里把名称做一次重新赋值。
                    copy_sheet.name=wb_sheet.name
                else:
                    copy_sheet:xw.Sheet=wb_sheet.copy(after=nwb.sheets[-1])
                copy_sheet.used_range.value=wb_sheet.used_range.value
            exprot_filepath=self._get_exprot_filepath(exprot_filepath)
            nwb.save(exprot_filepath)
            
    def export_excelsheet(self,sheetname,exprot_filepath=None):
        with self.wb.app.books.add() as nwb:
            copy_sheet:xw.Sheet=self.wb.sheets(sheetname).copy(after=nwb.sheets[-1])
            nwb.sheets[0].delete()
            copy_sheet.name=sheetname
            # start_address=self.wb.sheets(sheetname).used_range.address.split(':')[0]
            copy_sheet.used_range.value=self.wb.sheets(sheetname).used_range.value
            exprot_filepath=self._get_exprot_filepath(exprot_filepath)
            nwb.save(path=exprot_filepath)
        
    def _get_exprot_filepath(self,exprot_filepath=None):
        if exprot_filepath is None:
            root, ext=os.path.splitext(self.wb.fullname)
            return f'{root}_{datetime.datetime.now().strftime("%Y%m%d%H%M%S")}{ext}'
        else:
            return exprot_filepath

def main():
    with xw.Book('./自动列表.xls') as wb:
        Export_excel(wb).export_excelfile()

if __name__ == '__main__':
    main()

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值