Python + openpyxl + pandas 一步实现将Excel表中内容按指定条件筛选分成多个子表并保留指定表头内容

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、将多个dataframe写入同一个Excel的不同工作Sheet二、完整地复制粘贴Excel中的某些内容1.导入模块2.将列宽对应3.将行宽对应4.复制粘贴单元格内容总结欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必
摘要由CSDN通过智能技术生成


前言

应用背景:
工作需要将表格按某些条件拆分成多个工作薄,且一个工作薄中再按某些条件存放多个工作表,且保留格式,例如颜色,合并单元格,字体大小等等,主要用于表头的复制时保留格式。
难点:
1.将数据保存到同一工作薄的不同工作表。
2.复制excel表中的某些内容并保留对应的格式。
实现目标:完美地模拟“将一个总表数据,筛选负责人拆分成对应的负责人表,且在每一个表内分成库存和备货两张子表,并对表头进行处理”


一、将多个dataframe写入同一个Excel的不同工作Sheet

多个dataframe需要写入同一个excel时,每次使用df.to_excel(文件名)的形式去写,系统都会重新创建一个新的文件。也就意味着前面的文件会被覆盖掉,你得到的只能是最后一个df写入的结果文件

通过创建一个ExcelWriter对象,可以解决上面的问题

import pandas as pd

writer = pd.ExcelWriter(os.path.join(os.getcwd(), '自定义.xlsx'))
df1.to_excel(writer, sheet_name='自定义sheet_name'#startcol=**, startrow=**)
df2.to_excel(writer, sheet_name='自定义sheet_name'#startcol=**, startrow=**)
df3.to_excel(writer, sheet_name='自定义sheet_name'#startcol=**, startrow=**)
...
 
 
writer.save()# 写入硬盘

#不传sheet_name参数时,默认多个dataframe会写入同一个xlsx文件的同一个sheet里

#startrow, startcol 不传时默认dataframe在excel里在sheet1里其实行列都是一

#需注意,python和excel的索引起始数字不同,如果startrow=2, startcol=4,不是从Excel第二行第四列开始写,而是从Excel第三行第五列开始写
#注意一定要用write.save(),不然生成的文件是没有对应的内容的

原文链接:

https://blog.csdn.net/weixin_42130167/article/details/89705581

二、完整地复制粘贴Excel中的某些内容

上文中使用pandas进行数据处理的时候,输出的表格都是不带格式的,甚至于在读取存在“合并单元格”的数据的时候,还会出现一些难以处理的空值(基于个人理解,excel表格中的合并单元格,显示的值是取第一项的值,其他都只是空值)。
而实际工作中,领导要求的表格都是要好看的格式以及一些表头,颜色等等,因此使用pandas来对特定的表头格式进行完整的复制粘贴。

1.导入模块

import easygui as eg
import os
import openpyxl
import copy
import pandas as pd

2.将列宽对应

代码如下:

def colwidth(s0, s1):
    for i, row in enumerate(s0.iter_cols()):
    	# i = chr(i+97).upper()
        i = convertToTitle(i+1)
        lk = s0.column_dimensions[i].width
        if lk == 0:
            lk = 8.38
        s1.column_dimensions[i].width = lk

其中s0是待复制excel表,s1是待粘贴excel表,都是openpyxl的Worksheet对象,即工作表对象。

enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for循环当中。

openpyxl读取一个sheet所有列数据除了用cols属性,也可以用iter_cols()方法,返回值是生成器,该方法也可以指定读取行和列,和iter_rows不同的是他按照列来输出数据。

综上所述,enumerate(s0.iter_cols())生成的是一个下标对应列的生成器,i默认初始等于0,对应的是’A列’,可通过chr()将数字对应转化为字母(用于下文中column_dimensions的引用)。
但是chr()对于生成”两位数的字母“即不能生成’AA’,而实际上的excel表可能会超过’AA’列,就会产生等同于’超出索引值’效果的报错,不符合实际需求。

>>>i = 0 #生成器生成的列中'A'对应的下标是0
>>>i = chr(i+97).upper()
>>>i
'A'
>>
  • 2
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 使用 Python 可以使用第三方库来读取 Excel 文件。 你可以使用 pandas 库来读取 Excel 文件。pandas 库有一个 read_excel() 函数,可以用来读取 Excel 文件中的数据。你可以使用这个函数来读取你想要的单元格中的数据,并将它们整理到一个新的表中。 示例代码如下: ```python import pandas as pd # 读取第一个 Excel 文件中的数据 df1 = pd.read_excel('file1.xlsx', sheet_name='Sheet1', usecols='A:D') # 读取第二个 Excel 文件中的数据 df2 = pd.read_excel('file2.xlsx', sheet_name='Sheet1', usecols='A:D') # 将两个表中的数据合并到一个新的表中 df = pd.concat([df1, df2]) # 将新表中的数据写入一个新的 Excel 文件 df.to_excel('new_file.xlsx', index=False) ``` 上面的代码将会读取两个 Excel 文件中的数据,并将它们合并到一个新的表中。然后,将新表中的数据写入一个新的 Excel 文件中。 注意,这个示例代码只是一个简单的例子,你可以根据自己的需要来修改代码。比如,你可以调整 usecols 参数来指定读取哪些列,或者调整 sheet_name 参数来指定读取哪个工作表。 ### 回答2: 要实现自动读取多个Excel表格里指定的单元格内容并整理到一个新表,可以使用Pythonopenpyxl库进行操作。 首先,需要安装openpyxl库。可以使用pip install openpyxl命令来安装。 接下来,可以使用openpyxl库提供的方法来实现自动读取和整理数据。 1. 首先导入openpyxl库:```import openpyxl``` 2. 创建一个新的Excel文件:```new_workbook = openpyxl.Workbook()``` 3. 选择要读取的Excel文件:```excel_files = ["file1.xlsx", "file2.xlsx", "file3.xlsx"]``` 4. 遍历所有要读取的Excel文件,获取指定单元格内容,并将其整理到新表中: ```python for file in excel_files: workbook = openpyxl.load_workbook(file) sheets = workbook.sheetnames for sheet_name in sheets: sheet = workbook[sheet_name] cell_value = sheet['A1'].value # 这里假设要读取的单元格是A1 new_sheet = new_workbook.active new_sheet.append([cell_value]) ``` 5. 最后保存整理好的数据到新表格文件:```new_workbook.save("new_file.xlsx")``` 以上就是使用Python程序实现自动读取多个Excel表格里指定单元格内容并整理到一个新表的简单示例。根据实际需求,还可以通过循环遍历读取更多的单元格内容,并对数据进行处理和整理。 ### 回答3: 要实现自动读取多个Excel表格中指定的单元格内容并整理到一个新表,可以使用Pythonpandas库来简化操作。 首先,需要安装pandas库,可以通过在终端或命令提示符中运行以下命令来完成安装: ``` pip install pandas ``` 然后,可以使用pandas的read_excel函数来读取Excel文件。可以使用for循环遍历多个文件,并在每个文件中找到所需的单元格内容。假设要读取的单元格在Sheet1的A1单元格中,具体的实现步骤如下: ```python import pandas as pd # 创建一个空的DataFrame用于保存结果 result = pd.DataFrame() # 遍历多个Excel文件 for file_name in file_list: # 读取当前Excel文件 df = pd.read_excel(file_name, sheet_name='Sheet1') # 提取所需的单元格内容 cell_content = df.iloc[0, 0] # A1单元格 # 将所需的单元格内容添加到结果DataFrame中 result = result.append({'文件名': file_name, '单元格内容': cell_content}, ignore_index=True) # 将结果保存到新的Excel文件 result.to_excel('整理结果.xlsx', index=False) ``` 在上述代码中,`file_list`是一个包含待读取文件路径的列表。在每个文件的循环中,首先使用`pd.read_excel`函数读取文件并指定要读取的Sheet名称。然后,可以使用DataFrame的`iloc`属性来指定要提取的单元格位置。接下来,将提取的单元格内容添加到结果DataFrame中。最后,使用`to_excel`函数将结果保存到新的Excel文件。 以上就是使用Python程序实现自动读取多个Excel表格中指定的单元格内容并整理到一个新表的方法。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值