IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> python对Excel合并单元格拆分 -> 正文阅读

[Python知识库]python对Excel合并单元格拆分

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

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

import win32com.client as win32

def 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失败")
	       return
	    else:
	        xlsx_path = path + 'x'
	        wb.SaveAs(xlsx_path, FileFormat=51)  # FileFormat = 51 is for .xlsx extension
	        wb.Close()  # FileFormat = 56 is for .xls extension
	        excel.Application.Quit()
	        print('格式转换完成')
	else:
	    print('格式无需转换')

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

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

import openpyxl

def handleXlsx(xlsx_path, savePath):
    if savePath == xlsx_path:
       print("拆分路径不可以跟xlsx文件路径一样哦\n")
       return
    workbook = openpyxl.load_workbook(xlsx_path)  # 加载已经存在的excel
    name_list = workbook.sheetnames
    worksheet = 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知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-08-21 15:19:48  更:2021-08-21 15:20:32 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 10:48:37-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码