Python实现Excel表格数据读取及转换保存

 更新时间:2026年06月05日 09:03:52   作者:ice813033181  
本文介绍了一个Python实现的Excel表格数据转换工具,使用tkinter构建GUI界面,支持读取.xls/.xlsx文件并显示在文本框中,同时允许用户编辑后导出为.txt或.xlsx格式,有需要的可以了解下

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,包含列:OrderIDProductCategorySalesQuantityDate

任务:计算每笔订单的 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读取pdf中的文字与表格

    如何用Python读取pdf中的文字与表格

    这篇文章主要介绍了如何在Python中安装和使用PyPDF2和pdfplumber库来处理PDF文件,包括安装步骤、库的使用方法以及它们在提取文本和表格方面的不同优势,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-11-11
  • Python2与python3中 for 循环语句基础与实例分析

    Python2与python3中 for 循环语句基础与实例分析

    Python for循环可以遍历任何序列的项目,如一个列表或者一个字符串,也是python中比较常用的一个函数,这里通过基础与实例给大家分享一下
    2017-11-11
  • 使用Python给Excel工作表设置背景色或背景图

    使用Python给Excel工作表设置背景色或背景图

    Excel是工作中数据处理和分析数据的重要工具,面对海量的数据和复杂的表格,如何提高工作效率、减少视觉疲劳并提升数据的可读性是不容忽视的问题,而给工作表设置合适的背景是表格优化的一个有效方式,本文将介绍如何用Python给Excel工作表设置背景色或背景图
    2024-07-07
  • Python中kwargs.get()方法语法及高级用法详解

    Python中kwargs.get()方法语法及高级用法详解

    这篇文章主要介绍了Python中kwargs.get()方法语法及高级用法的相关资料,该方法用于安全地获取字典中的值,并提供了默认值以避免KeyError异常,需要的朋友可以参考下
    2026-01-01
  • Python编写绘图系统之从文本文件导入数据并绘图

    Python编写绘图系统之从文本文件导入数据并绘图

    这篇文章主要为大家详细介绍了Python如何编写一个绘图系统,可以实现从文本文件导入数据并绘图,文中的示例代码讲解详细,感兴趣的可以了解一下
    2023-08-08
  • python如何获取Prometheus监控数据

    python如何获取Prometheus监控数据

    这篇文章主要介绍了python如何获取Prometheus监控数据,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-05-05
  • 如何在python中实现随机选择

    如何在python中实现随机选择

    这篇文章主要介绍了如何在python中实现随机选择,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • Python基于百度云文字识别API

    Python基于百度云文字识别API

    这篇文章主要介绍了Python基于百度云文字识别API,用Python实现最简单的文字识别,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-12-12
  • Python from import导包ModuleNotFoundError No module named找不到模块问题解决

    Python from import导包ModuleNotFoundError No module named

    最近在执行python脚本时,from import的模块没有被加载进来,找不到module,这篇文章主要给大家介绍了关于Python from import导包ModuleNotFoundError No module named找不到模块问题的解决办法,需要的朋友可以参考下
    2022-08-08
  • 关于Numpy之repeat、tile的用法总结

    关于Numpy之repeat、tile的用法总结

    这篇文章主要介绍了关于Numpy之repeat、tile的用法总结,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06

最新评论