Python实现Excel表格数据读取及转换保存
Python代码实现选择打开.xls以及.xlsx类型的表格文件,在文本框中显示表格数据,也可以在文本框中粘贴或者编辑数据,选择导出.txt文本文件或者.xlsx表格文件。
(本代码暂不支持导出.xls格式文件)
一、效果图预览

表格数据随机生成如下所示:

二、代码运行报错处理(pip install )
如果运行报错,可能是没有导入pandas库的原因,可以win+r进入运行界面,输入pip install pandas,导入pandas库即可。
同理如果有其他库缺失报错,同样可以(pip install 库名)运行导入。
三、代码演示
借助AI生成主体代码后,进行优化调整后代码如下:
#Python代码,tkinter界面,选择打开xls表格文件,读取表格数据,在text中显示出来,可导出为文本文件
#pip install pandas
import tkinter as tk
from tkinter import filedialog, messagebox
import pandas as pd
class ExcelToTextApp:
def __init__(self, root):
self.root = root
self.root.title("Excel to Text Converter")
# Create widgets
self.create_widgets()
def create_widgets(self):
# Button to open Excel file
self.open_button = tk.Button(self.root, text="Open Excel File", command=self.open_file)
self.open_button.pack(pady=10)
# Text widget to display data
self.text = tk.Text(self.root, height=20, width=80)
self.text.pack(pady=10)
# Button to export text
self.export_button = tk.Button(self.root, text="Export to Text File", command=self.export_text)
self.export_button.pack(pady=10)
# Button to export to Excel
self.excel_export_button = tk.Button(self.root, text="Export to Excel", command=self.export_excel)
self.excel_export_button.pack(pady=10)
def open_file(self):
file_path = filedialog.askopenfilename(filetypes=[("Excel files", "*.xls;*.xlsx")])
if file_path:
try:
df = pd.read_excel(file_path)
# Convert DataFrame to string representation
excel_data = df.to_string()
self.text.delete(1.0, tk.END) # Clear previous data
self.text.insert(tk.END, excel_data) # Insert new data
except Exception as e:
messagebox.showerror("Error", f"Failed to read Excel file: {e}")
def export_text(self):
file_path = filedialog.asksaveasfilename(defaultextension=".txt", filetypes=[("Text files", "*.txt")])
if file_path:
try:
with open(file_path, 'w', encoding='utf-8') as f:
f.write(self.text.get(1.0, tk.END))
messagebox.showinfo("Success", "Data exported successfully!")
except Exception as e:
messagebox.showerror("Error", f"Failed to export data: {e}")
def export_excel(self):
# Get text content
text_content = self.text.get(1.0, tk.END)
# Check if content is empty
if not text_content.strip():
messagebox.showerror("Error", "No data to export")
return
# Try to convert text to DataFrame
try:
# Split text into lines
lines = text_content.strip().split('\n')
# Extract column names (first line)
columns = lines[0].split()
# Prepare data rows
data = []
for line in lines[1:]:
# Split each line into columns
row_data = line.split()
# Handle rows with different number of columns
if len(row_data) != len(columns):
# Pad with empty strings if too short
row_data += [''] * (len(columns) - len(row_data))
# Truncate if too long
row_data = row_data[:len(columns)]
data.append(row_data)
# Create DataFrame
df = pd.DataFrame(data, columns=columns)
# Ask for save location
file_path = filedialog.asksaveasfilename(
defaultextension=".xlsx",
filetypes=[("Excel files", "*.xlsx")],
title="Save as Excel file"
)
if file_path:
try:
# Save to Excel
df.to_excel(file_path, index=False)
messagebox.showinfo("Success", "Data exported successfully!")
except Exception as e:
messagebox.showerror("Error", f"Failed to export Excel file: {e}")
except Exception as e:
messagebox.showerror("Error", f"Failed to convert text to Excel format: {e}")
if __name__ == "__main__":
root = tk.Tk()
app = ExcelToTextApp(root)
root.mainloop()四、知识扩展
Python 读取和转换 Excel 数据最常用的库是 pandas(配合 openpyxl 或 xlrd 引擎)。pandas 提供强大的数据处理能力,可以轻松完成筛选、计算、分组、合并等转换操作。
1. 环境准备
安装必要的库:
pip install pandas openpyxl
pandas:核心数据处理库。openpyxl:读取/写入.xlsx文件引擎。
2. 读取 Excel 数据
基本读取
import pandas as pd
# 读取整个 Excel 文件的第一个工作表
df = pd.read_excel('data.xlsx')
print(df.head()) # 查看前5行指定工作表
# 按工作表名称
df = pd.read_excel('data.xlsx', sheet_name='Sheet1')
# 按工作表索引 (0 表示第一个)
df = pd.read_excel('data.xlsx', sheet_name=0)
# 读取多个工作表,返回字典
dfs = pd.read_excel('data.xlsx', sheet_name=['Sheet1', 'Sheet2'])指定列与行
# 只读取 A,C,D 列 (A=0, B=1, C=2, D=3, ...)
df = pd.read_excel('data.xlsx', usecols='A,C,D')
# 或使用列名列表
df = pd.read_excel('data.xlsx', usecols=['Name', 'Age', 'Salary'])
# 跳过前2行,以第3行为表头
df = pd.read_excel('data.xlsx', skiprows=2, header=0)
# 读取特定行范围(例如前100行)
df = pd.read_excel('data.xlsx', nrows=100)处理数据类型
# 指定列的数据类型,避免自动推断出错
dtype = {'ID': str, 'Age': int}
df = pd.read_excel('data.xlsx', dtype=dtype)3. 数据转换常用操作
查看与清洗
# 查看基本信息
df.info()
df.describe()
# 检查缺失值
df.isnull().sum()
# 删除包含缺失值的行
df_clean = df.dropna()
# 填充缺失值
df['Age'] = df['Age'].fillna(df['Age'].median())
df['Note'] = df['Note'].fillna('暂无')列操作(新增、修改、删除)
# 新增列(计算)
df['Total'] = df['Price'] * df['Quantity']
# 修改列名
df.rename(columns={'OldName': 'NewName'}, inplace=True)
# 删除列
df.drop(['Unnamed: 0', 'TempCol'], axis=1, inplace=True)条件筛选
# 筛选 Age > 30 的行
df_filtered = df[df['Age'] > 30]
# 多条件(且)
df_filtered = df[(df['Age'] > 30) & (df['Salary'] < 5000)]
# 多条件(或)
df_filtered = df[(df['City'] == 'Beijing') | (df['City'] == 'Shanghai')]
# 按文本包含筛选
df_filtered = df[df['Name'].str.contains('张', na=False)]排序与去重
# 按一列排序
df_sorted = df.sort_values('Date', ascending=True)
# 按多列排序
df_sorted = df.sort_values(['Group', 'Value'], ascending=[True, False])
# 去重(保留第一个)
df_unique = df.drop_duplicates(subset='ID')分组聚合
# 按部门统计平均工资
grouped = df.groupby('Department')['Salary'].mean().reset_index()
# 多聚合函数
result = df.groupby('Department').agg(
平均工资=('Salary', 'mean'),
最高工资=('Salary', 'max'),
人数=('EmployeeID', 'count')
).reset_index()数据类型转换
# 将字符串日期转为 datetime 类型
df['Date'] = pd.to_datetime(df['Date'], format='%Y-%m-%d')
# 将分类数据转为 category 类型(节省内存)
df['Status'] = df['Status'].astype('category')
# 数值列四舍五入
df['Rate'] = df['Rate'].round(2)4. 输出转换后的 Excel
# 保存到新文件,不包含行索引
df_result.to_excel('output.xlsx', index=False)
# 指定工作表名称
df_result.to_excel('output.xlsx', sheet_name='转换结果', index=False)
# 保存多个工作表到同一个文件
with pd.ExcelWriter('multi_sheet.xlsx') as writer:
df1.to_excel(writer, sheet_name='Sheet1', index=False)
df2.to_excel(writer, sheet_name='Sheet2', index=False)5. 完整示例:销售数据转换
假设有一个销售记录表 sales.xlsx,包含列:OrderID, Product, Category, Sales, Quantity, Date。
任务:计算每笔订单的 Revenue,并按 Category 统计总销售额,最后输出新文件。
import pandas as pd
# 1. 读取数据
df = pd.read_excel('sales.xlsx')
# 2. 数据清洗:检查缺失,删除无订单号的记录
df.dropna(subset=['OrderID'], inplace=True)
# 3. 新增列:销售额 = Sales * Quantity
df['Revenue'] = df['Sales'] * df['Quantity']
# 4. 将 Date 转为日期类型
df['Date'] = pd.to_datetime(df['Date'])
# 5. 筛选:只保留 2025 年后的数据
df = df[df['Date'] >= '2025-01-01']
# 6. 分类汇总:按 Category 计算总 Revenue
category_summary = df.groupby('Category')['Revenue'].sum().reset_index()
category_summary.rename(columns={'Revenue': 'TotalRevenue'}, inplace=True)
# 7. 输出结果到 Excel
with pd.ExcelWriter('sales_report.xlsx') as writer:
df.to_excel(writer, sheet_name='明细', index=False)
category_summary.to_excel(writer, sheet_name='分类汇总', index=False)
print("处理完成,已生成 sales_report.xlsx")到此这篇关于Python实现Excel表格数据读取及转换保存的文章就介绍到这了,更多相关Python Excel表格数据转换内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
python 已知一个字符,在一个list中找出近似值或相似值实现模糊匹配
今天小编就为大家分享一篇python 已知一个字符,在一个list中找出近似值或相似值实现模糊匹配,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧2020-02-02


最新评论