拆分单元格的实现使用了第三方库openpyxl,但是这个库只支持xlsx类型的文件,所以如果我们有xls类型的文件的话要先转成xlsx类型
实现效果:
待拆分excel

拆分后的excel

具体实现步骤:
1.xls文件转xlsx文件:
也是借助一个库:pywin32

import win32com.client as win32def changeXlsToXlsx(path, savePath):if path.endswith(".xls"):excel = win32.gencache.EnsureDispatch('Excel.Application')excel.Visible = False  # 不打开excel页面wb = excel.Workbooks.Open(path)if wb is None:print("打开xls失败")returnelse:xlsx_path = path + 'x'wb.SaveAs(xlsx_path, FileFormat=51)  # FileFormat = 51 is for .xlsx extensionwb.Close()  # FileFormat = 56 is for .xls extensionexcel.Application.Quit()print('格式转换完成')else:print('格式无需转换')

打开xls失败的话,考虑以下原因:(1)后台存在一个excel进程占用了打开的文件 ,资源管理器中找到该进程结束就行。(2)考虑传入的xls文件路径问题导致wb为None,可以试着把左(右)斜换成右(左)斜。
以上两个原因是我在写代码时实际遇到的问题。

2.得到xlsx文件后,进行拆分操作即可:

import openpyxldef handleXlsx(xlsx_path, savePath):if savePath == xlsx_path:print("拆分路径不可以跟xlsx文件路径一样哦\n")returnworkbook = openpyxl.load_workbook(xlsx_path)  # 加载已经存在的excelname_list = workbook.sheetnamesworksheet = workbook[name_list[0]]m_list = worksheet.merged_cells  # 合并单元格的位置信息,可迭代对象(单个是一个'openpyxl.worksheet.cell_range.CellRange'对象),print后就是excel坐标信息if m_list:cr = []for m_area in m_list:# 合并单元格的起始行坐标、终止行坐标。。。。,r1, r2, c1, c2 = m_area.min_row, m_area.max_row, m_area.min_col, m_area.max_col# 纵向合并单元格的位置信息提取出if r2 - r1 > 0:cr.append((r1, r2, c1, c2))# 这里注意需要把合并单元格的信息提取出再拆分for r in cr:worksheet.unmerge_cells(start_row=r[0], end_row=r[1],start_column=r[2], end_column=r[3])for i in range(r[1] - r[0] + 1):for j in range(r[3] - r[2] + 1):worksheet.cell(row=r[0] + i, column=r[2] + j, value=worksheet.cell(r[0], r[2]).value)workbook.save(savePath)

以上两个函数其实最耗时的是第一个,本质是 打开excel另存为的 形式来实现。

最初也考虑过使用pandas来xls转换成xlsx,但是当写出xlsx文件后,失去了原有的一些合并单元格的形式,导致不能完成拆分。

此文章借鉴了 https://blog.csdn.net/weixin_44788825/article/details/104526131

若是觉得每次都要复制路径比较麻烦的话,可以考虑使用pyqt写一个可视化页面,直接选择文件就行。

python对Excel合并单元格拆分相关推荐

  1. python读写excel(合并单元格)

    读取 import xlrddef read_excel(file_path):# 获取数据data = xlrd.open_workbook(file_path)# 获取所有sheet名字sheet ...

  2. python处理excel合并单元格的拆分和填补

    目录 一.问题需求 二.解决办法 一.问题需求 本篇博文可以说是博主另一篇博文的反向需求--博文:<python实现excel单元格对象合并>.        简单描述下问题,借助示例来说 ...

  3. python合并word单元格_python之DataFrame实现excel合并单元格_python

    这篇文章主要为大家详细介绍了python之DataFrame实现excel合并单元格,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 在工作中经常遇到需要将数据输出到excel,且需要对其中一些单元 ...

  4. Pandas读取excel合并单元格的正确姿势(openpyxl合并单元格拆分并填充内容)

    问题介绍(ffill填充存在的问题) 在pandas读取excel经常会遇到合并单元格的问题.例如: 此时使用pandas读取到的内容为: 如果去百度,几乎所有人会说应该用如下代码: df['班级'] ...

  5. html表格里面怎么合并单元格的快捷键,excel合并单元格快捷键是什么

    excel合并单元格快捷键是什么 快捷键的熟练使用可以帮助我们在工作中提高效率,那么excel合并单元格快捷键是什么呢?接下来为大家讲解excel合并单元格快捷键设置方法的图文演示. 合并单元格在ex ...

  6. [办公应用]如何将excel合并单元格分拆后每个单元格上仍保留数据?

    合并单元格虽然美观,但是无法进行排序.筛选等操作. 只有合并单元格拆分后才可以按常规进行统计.但是普通拆分后,excel仅保留合并单元格数据到区域左上角的单元格. 解决方案: 选定多个合并单元格,应用 ...

  7. Java POI 对Excel合并单元格的数据处理

    Java POI 对Excel合并单元格的数据处理 最近在项目开发过程中,有个一个导入Excel文件处理合并单元格数据的需求,就自己在网上找了一个模板,自己进行二次开发来开发需求. Excel工具类 ...

  8. springboot项目导出excel 合并单元格表格

    springboot项目导出excel 合并单元格表格 导出效果 业务controller 业务数据 业务实体类 注解MyExcel.java 注解 MyExcels 导出工具类MyExcelUtil ...

  9. python 读取excel中单元格的内容

    python 读取excel中单元格的内容 excel文件内容: 读取excel代码: # coding=utf-8 import xlrd import sysreload(sys) sys.set ...

  10. asp.net mvc excel合并单元格_excel统计求和:如何在合并后的单元格中复制求和公式...

    编按:哈喽,大家好!又到了一年一度的双十一购物狂欢节,小伙伴们有没有蠢蠢欲动呢?钱包都准备好了吗!这个双十一,大家都盯上了哪些好物呢?哪类产品的开销又会成为你贡献双十一销售额的主力军呢?赶紧在exce ...

最新文章

  1. 《SolidWorks 2016中文版机械设计从入门到精通》——第1章 认识SolidWorks1.1 SolidWorks概述...
  2. DataX配置及使用
  3. java 堆转储快照_Java堆转储:您可以完成任务吗?
  4. 小程序基础 - wafer2 - PHP - 后台和前台 - 利用对象数组来传递表单数组的正确方法 - 下载部分(服务器到微信)
  5. Spring Boot : springboot项目混淆方案
  6. 购物车代码(html+css)
  7. XeThru Sensors SW Module Connector-matlab
  8. c语言程序移动平均法,计算C中的移动平均值
  9. wps交叉引用更新域遇到错误!未找到(错误!未定义)
  10. 批处理文件进行音频格式转换
  11. matlab结构体与元胞,元胞数组与结构体数组
  12. 细粒度图像分类论文研读-2011
  13. 恒源云(GPUSHARE)_CV训练时容易忽视的数据标签问题
  14. 现代信息技术(IT)对会计模式的影响(by 杨烈飙)
  15. 红叶李之Linux文件系统
  16. 大话西游手游如何修改服务器,大话西游手游如何重新更换职业?更换新职业操作方法说明...
  17. 福利 | Hadoop权威指南(中文)第四版
  18. RPC TAF(TARS) 框架 初学
  19. Element 组件之 右键鼠标 自定义菜单
  20. vsc code-runner插件运行python文件,解释器更改为ananconda

热门文章

  1. 斯诺登逃亡之路上的守护天使都有谁
  2. SpringBoot+SpringBootJPA+Thymeleaf实现基本CURD+分页
  3. 91 个常见的 Laravel 面试题和答案
  4. 【转】最落魄的日子你是怎样熬过来的?
  5. 淘宝网无法确认收货(chrome)
  6. 大数据分析:家庭教育的10个主要问题
  7. MySQL Audit 审计
  8. MimeType对照表
  9. 恶魔和梦魇的私语------- 关于软件开发的务虚主义对话(3)
  10. 正则表达式中常用符号