asp.net mvc excel合并单元格_针对python对Excel合并单元格操作说明

a2e3a28da74b1a127e6136d87b10b0b9.gif 前言

当打开一个Excel工作簿的时候,并不是每一个表都是几行几列的标准形式,譬如它可能出现这样的形式:也就是包含合并单元格的数据,如果以这种表格形式去做接下来的数据处理一定会遇到很多问题。

6a4d1f300545d887ceef4a952773b2b4.png

0 1

拆分合并单元格

对于如何拆分合并单元格,首先搞清楚一个问题合并单元格到底是什么?或者说它是如何储存数据的。用pandas库直接读取,答案就会很清晰。

import pandas as pddata = pd.read_excel(r"C:\Users\Administrator\Desktop\合并单元格.xlsx")print(data)

21a301fd0dc91f6d4eda384c62a1c3a5.png

7dd005ca8344337d5b0ae9e977e9fba0.png

从上面结果很清晰的显示出,无论怎么合并单元格,数据永远储存在合并单元格区域内的最左上角,而其他单元格都是空值。我们再用openpyxl库写成列表的形式再看一遍。

import openpyxl as opwb = op.load_workbook(r"C:\Users\Administrator\Desktop\合并单元格.xlsx")ws = wb.worksheets[0]for rows in list(ws.rows): data2 = [r.value for r in row] print(data2)

635723224c4d08c04e3ae295cd91b890.png

7dd005ca8344337d5b0ae9e977e9fba0.png

然后再用Excel本身的友好提醒来看下,根据提醒不难发现不同的数据是不能轻易合并,否则会丢失数据。那么现在的问题就变成了如何将空值解决掉,将表格变成常见的形式。

d7c0475ed10a606bffc52e033e534dd1.png

7dd005ca8344337d5b0ae9e977e9fba0.png

这一点pandas提供了很好的支撑,可以使用fillna方法把缺失值重新编码为其他值,可以选择前置填充(fill forward)或后值填充(fill backward),前值填充时,将按照前一个值填充缺失值。而按照后一个值填充则为后置填充。本例中选择前置填充来试下效果。(最后一列为全部空值,暂不取。)

import pandas as pddata = pd.read_excel(r"C:\Users\Administrator\Desktop\合并单元格.xlsx")print(data.fillna(method = "ffill").iloc[0:8,0:4])

b367140b4a068280ca349053eea322d6.png

这样的表格再进行后面处理就方便许多。

0 2

合并单元格

前言

当解决了拆分的单元表格,假设处理完成后又想将表格某一部分合并又该如何办呢?很遗憾pandas并未给出很好的解决方案。pandas能做的合并拆分仅限为索引。如果真想实现过程过于复杂,这不是我们想要的。这时候openpyxl库则给出了一个很好的答案:merge_cells方法。

根据下面的结果可以看出,它实施合并的机制和Excel是一模一样的,并没有什么不同。你要确定自己合并的数值,确定的值在你要合并单元格区域内的左上角即可。
import openpyxl as opwb = op.load_workbook(r"C:\Users\Administrator\Desktop\合并单元格.xlsx")ws = wb.worksheets[0]ws.merge_cells('B2:C3')wb.save(r"C:\Users\Administrator\Desktop\合并单元格.xlsx")

bf35f3ece9243f6230e7f52870d95a3c.pnga4a734e61db3d3803cd6d3f774f4e2ec.png

end

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值