删除含有合并单元格的excel某列:

提示:这里简述项目相关背景:

项目场景:昨天帮朋友忙,需求是删除excel的某一列,而该列被包含在合并单元格中。
我以为弄个dataframe多简单的事情,没想到啊,还是经验少

提示:这里描述项目中遇到的问题:

例如:使用pandas读成dataframe再删除时,发现因为删除的列中的某几行是合并单元格的状态,导致结果不符合期望结果。因为使用的是dataframe,输出为新的excel文件时,单元格字体、大小等属性都和原本的excel表格不一致。

cols=[x for i,x in enumerate(df.columns) if df.iat[0,i]=='区县']
df_1=df.drop(cols,axis=1)

如图为删除前
在这里插入图片描述
如图为删除后,单元格框线都没了,很多数据也丢失了,刚开始的时候每一个合并的单元格都会被拆分然后填充合并时的内容。这是已经经过几次修改后的情况,还是不行。在这里插入图片描述

原因分析:

提示:合并单元格时还是合并的原来的行列位置,我们已经删除了一列,那么所有列坐标在这一列之后的单元格都要往前移一列。若删除n列,就要往前移n列:

解决方案:

提示:使用openpyxl来操作excel,这样还不会更改单元格字体、大小等属性。先找出excel中所有合并单元格信息,再拆分,删除列后,再将这些单元格合并,但合并时要注意坐标要改变了。

# 这里是引用的模块
from copy import deepcopy
import openpyxl
import os
import warnings
warnings.filterwarnings('ignore')
#将所有合并单元格信息放入list
m_list = ws.merged_cells
            # print(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
                cr.append((r1, r2, c1, c2))
			# 找某个特定值所在的列索引
            for row in ws.iter_rows(min_row=1, max_row=100, min_col=1, max_col=8):  
                for cell in row:
                    if cell.value == '区县':
                        val = cell.coordinate
                        a = cell.column
                        # print('即将删除'+val+'所在列')
						# 先拆分,后删列
                        merge_cr = deepcopy(cr)
                        for r in cr:
                            ws.unmerge_cells(start_row=r[0], end_row=r[1], start_column=r[2], end_column=r[3])
                        ws.delete_cols(a)
                        # 合并已拆分得单元格,可根据实际情况,控制合并单元格坐标,这里仅删除了一列
                        for r in merge_cr:
                            if a < r[3] and r[2] - 1 > 1:
                                ws.merge_cells(start_row=r[0], end_row=r[1], start_column=r[2] - 1, end_column=r[3] - 1)
                            elif a < r[3] and r[2] - 1 < 1:
                                ws.merge_cells(start_row=r[0], end_row=r[1], start_column=r[2], end_column=r[3] - 1)
                            elif r[2] < a and r[3] < a:
                                ws.merge_cells(start_row=r[0], end_row=r[1], start_column=r[2], end_column=r[3])

最终结果仅将“区县”这一列删除,其他单元格任何属性都没有影响。

昨天帮朋友忙,需求是删除excel的某一列,而该列被包含在合并单元格中。我以为弄个dataframe多简单的事情,没想到啊,还是经验少。使用pandas读成dataframe再删除时,发现因为删除的列中的某几行是合并单元格的状态,导致结果不符合期望结果。因为使用的是dataframe,输出为新的excel文件时,单元格字体、大小等属性都和原本的excel表格不一致。... 说明:原本想将多变为一列,以便后续的可视化处理,但是合并后出现这样的错位 原本试图通过pandas的cancat()方法中的参数解决,但是没有效果。 pandas的cancat()方法参数解释,参见《pandas数据合并与重塑(pd.concat篇)》,链接: link. 既然参数中找不到解决问题的原因,我就又重新复习了一遍cancat()方法。 原本以为是excel文件索引的问题,即假设:第一个
java poi对Excel表格进行单元行删除 前几天工作时,突然需要去使用POI 来对Excel 表格进行操作,其他的操作都都没什么问题,但是在需要删除某些单元行的时候碰到了一下小坑,记录下来,防止以后忘记。 一般使用POI删除单元行有两种方法 一种只删除单元行中的内容,不删除单元行 即 sheet.remove(row); //sheet即取得的工作表,row表示要具体删除的行 这个方法...
首先,如果你希望使用 pandasExcel 中取消合并单元格,你可以使用 pandas 的 unmerge_cells() 方法。 例如,假设你有一个名为 df 的 DataFrame,你可以使用以下代码来取消合并单元格: df.unmerge_cells('A1:C3') 这将取消合并单元格 A1:C3。 要填充多出来的单元格,你可以使用 pandas 的 fillna() 方法。 ...
要按合并单元格,可以使用Excel中的“合并和居中”功能。具体步骤如下: 1.选中要合并的单元格所在的。 2.点击“开始”选项卡中的“合并和居中”按钮。 3.在弹出的下拉菜单中选择“向下合并”选项。 4.完成后,选中的单元格将会被合并成一个单元格,内容也会自动合并在一起。 另外,如果要使用公式合并单元格,可以使用“&”符号连接单元格内容,例如“=A1&B1&C1”可以将A1、B1、C1三个单元格的内容合并在一起。需要注意的是,使用公式合并单元格时,合并后的单元格无法再次拆分。