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 已知一个字符,在一个list中找出近似值或相似值实现模糊匹配

    python 已知一个字符,在一个list中找出近似值或相似值实现模糊匹配

    今天小编就为大家分享一篇python 已知一个字符,在一个list中找出近似值或相似值实现模糊匹配,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-02-02
  • Python 变量类型及命名规则介绍

    Python 变量类型及命名规则介绍

    Python编程中,变量是用于存放值或对像的容器。而变量的名称可以自定义,基本的命名规则如下
    2013-06-06
  • PyCharm中配置模板用法详解

    PyCharm中配置模板用法详解

    在PyCharm中配置模板,可以在创建新文件时自动生成固定的文件说明信息,配置方法包括打开PyCharm设置、编辑文件和代码模板、选择PythonScript并输入模板命令等步骤,参数定制化也方便了个性化需求
    2026-04-04
  • 基于Python的文件类型和字符串详解

    基于Python的文件类型和字符串详解

    下面小编就为大家分享一篇基于Python的文件类型和字符串详解,具有很的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2017-12-12
  • Pandas.DataFrame行和列的转置的实现

    Pandas.DataFrame行和列的转置的实现

    本文主要介绍了Pandas.DataFrame行和列的转置的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • pytorch模型部署到onnx的详细过程

    pytorch模型部署到onnx的详细过程

    这篇文章主要介绍了如何简单的将pytorch模型部署到onnx,本文结合示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-08-08
  • python将html转成PDF的实现代码(包含中文)

    python将html转成PDF的实现代码(包含中文)

    python将html转成PDF的实现代码,需要用到xhtml2pdf和微软雅黑字体,需要的朋友可以参考下
    2013-03-03
  • 基于python实现Pycharm断点调试

    基于python实现Pycharm断点调试

    这篇文章主要介绍了基于python实现Pycharm断点调试,在我们写程序的时候,很容易遇到各种各样的bug,然后编译器提示程序出错的地方。很多时候可以通过提示的信息修改程序,但是有时我们想得到更多的信息,这个时候就需要进行断点调试,下面我们就一起来学习ycharm断点调试
    2022-02-02
  • python 并发下载器实现方法示例

    python 并发下载器实现方法示例

    这篇文章主要介绍了python 并发下载器实现方法,结合实例形式详细分析了并发下载器相关原理及Python并发下载视频的相关操作技巧,需要的朋友可以参考下
    2019-11-11
  • 使用Python删除文本文件中特定行的操作方法

    使用Python删除文本文件中特定行的操作方法

    文件操作是编程中的重要方面,Python作为强大的编程语言,提供了处理文件的能力,删除特定行是文件处理中常见的需求,本文给大家介绍了Python快速删除文本文件中指定行的方法,文中有详细的代码示例供大家参考,需要的朋友可以参考下
    2023-12-12

最新评论