首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

盘点一个Python自动化办公Excel数据处理的需求

会当凌绝顶,一览众山小。

大家好,我是Python进阶者。

一、前言

前几天在Python白银交流群【干锅牛蛙】问了一个Python处理Excel数据的问题。问题如下:有两个问题哈:1、表头有合并单元格识别不出来,如何处理类似下图

2、遇到单元格有公式自动识别成了0,如何处理,保留计算后的值,类似下图

附上他自己的代码如下:

目前代码:import pandas as pd

import os

# 读取所有xlsx文件并逐个合并子表

folder_path = r'C:/Users/mengxianqiao/merge_excel_files/测试数据'  # 替换成实际的文件夹路径

all_data = {}

# 遍历文件

for file_name in os.listdir(folder_path):

if file_name.endswith(".xlsx"):

file_path = os.path.join(folder_path, file_name)  # 拼接绝对路径

xls = pd.ExcelFile(file_path)  # 创建excel对象

# 遍历sheet

for sheet_name in xls.sheet_names:

if sheet_name not in all_data:  # 如果sheet不存在,在字典中创建新sheet

all_data[sheet_name] = pd.DataFrame()

# 获取表头行数(默认为1)

header_rows = pd.read_excel(file_path, sheet_name=sheet_name, nrows=1).shape[0]

# print(header_rows)

# 读取数据时跳过已经读取过的表头行

sheet_data = pd.read_excel(file_path, sheet_name=sheet_name, skiprows=range(1, header_rows+1))

# print(sheet_data)

all_data[sheet_name] = pd.concat([all_data[sheet_name], sheet_data], ignore_index=True)

# 将所有合并后的数据保存到一个整体的CSV文件中

output_csv = r"C:/Users/mengxianqiao/merge_excel_files/测试数据/汇总.xlsx"  # 替换成实际的输出文件路径

with pd.ExcelWriter(output_csv, engine='openpyxl') as writer:

for sheet_name, df in all_data.items():

df.to_excel(writer, sheet_name=sheet_name, index=False)

print("数据已成功合并并保存到总表.xlsx。")

二、实现过程

这里【瑜亮老师】、【鶏啊鶏。】、【Python进阶者】都给了一个思路,如下图所示:读取的时候不读取表头,跳过前2行。这个方法可以,上次处理那个民评议表,跳过了前四行。

这就是直接跳过,然后手动加一行表头。代码如下:

import pandas as pd

import pathlib

# 获取文件夹中每个Excel文件的路径

folder = r"C:\Users\Desktop\民主评议表"

excel_files = pathlib.Path(folder).glob('*.xls')

header = ['姓名', '以学铸魂', '以学增智', '以学正风', '以学促干']

data = []

for i in excel_files:

# 读取Excel文件,并跳过前4行,使用前5列数据

df = pd.read_excel(i, skiprows=4, header=None, index_col=0, usecols="A:F")

df.dropna(inplace=True)

df.columns = header

如果是openpyxl的话,读取的时候,有个data_only=True参数,得到的就是数值了。之前在钻石群里有人问过。

后来【论草莓如何成为冻干莓】还给了一个思路如下:

代码如下:

import numpy as np

import pandas as pd

df = pd.DataFrame(np.random.randint(1, 10, size=(20, 10)))

with pd.ExcelWriter('写入合并表头.xlsx', engine='openpyxl') as writer:

book = writer.book

sheet_name = '写入合并表头'

df.to_excel(writer, sheet_name=sheet_name, index=False, startrow=1)

sh = book[sheet_name]

sh['A1'] = '表头合并'

sh.merge_cells(f'A1:H1')  # 合并A1到H1的单元格

实现效果如下:

【黄志诚】感慨道:现在就感觉用pandas分析,用openpyxl美化,写入。

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OncISg1qSwIMkjKd7ol3iQDg0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券