[Python学习笔记]制作自动将xls文件转化为xlsx文件的程序

发布时间 2023-12-15 10:20:08作者: 紫色天空玫玫

背景:供应商程序导出的文件是xls格式的,我需要使用Power Query将这些文件合并整理,但是目前没有找到可以打卡xls文件的代码,所以将xls文件转化为xlsx文件后再使用Power Query进行处理。

思路:

  1. 网上找到了将xls文件转化为xlsx文件的代码,将这个代码定义为一个函数去执行转换的功能;

  2. 在使用中,将目标文件夹的地址输入到cmd中,然后程序自动历遍每一个xls文件并将其转换为xlsx文件;

代码:

  1. 执行转换的代码,python的excel转换xls为xlsx几种方法 - CSDN文库

  2. 导入需要使用的module以及定义全局变量:全局变量有 a.输入的文件夹地址字符串,b.xls文件名列表,

import os
import pandas as pd

# 设定全局变量
folder_path = ''#xls文件夹路径
xlsfilename_list = ''#xls文件列表,从xls文件夹路径中导出

 

  3. 定义函数:将网上找到的执行代码定义为一个函数,此处输入输出的变量名要用自己之前定义的变量名,并且在函数内还需要定义一些局部变量。函数的输入是一个字符串,字符串的内容是xls文件的绝对地址。

#定义转换函数
def xls_to_xlsx(xlsfilename):
    temp = pd.read_excel(xlsfilename)#使用pd.read_excel来读取xls文件,输入为文件名称字符串
    xlsxfilename = xlsfilename.replace('.xls','.xlsx')#使用原文件名来命名新的xlsx文件,但是需要将后缀.xls改为.xlsx
    temp.to_excel(xlsxfilename,index = False)#将文件转化为xlsx文件
    return 

 

  4. 获取需要做变换的文件夹路径,并且将文件夹中的所有文件名全部获取

#交互输入地址并读取该地址下的文件名
print('请输入包含xls文件的地址并以回车结束')
folder_path = str(input())#输入的文件夹路径
os.chdir(folder_path)#将程序路径改为输入的文件夹路径
xlsfilename_list = os.listdir()#得到文件夹中所有文件的名称列表

 

  5. 使用for循环来历遍文件夹中的所有文件

#循环打开每一个xls文件并转换为xlsx文件
NumofCycle = len(xlsfilename_list)#获得路径中xls文件的数量,并且使用这个数量作为for循环的参数
for i in range(1,NumofCycle+1):
    print('正在转换第' + str(i) + '个文件')#提示目前正在转换的进度
    xls_to_xlsx(xlsfilename_list[i-1])#执行转换程序
print('转换完毕,退出请按任意键')#提示转换完毕

 

 

最终得到的整个程序如下:

# -*- coding: utf-8 -*-
"""
Created on Thu Dec 14 23:19:09 2023

@author: Ray
"""

import os
import pandas as pd

# 设定全局变量
folder_path = ''#xls文件夹路径
xlsfilename_list = ''#xls文件列表,从xls文件夹路径中导出

#定义转换函数
def xls_to_xlsx(xlsfilename):
    temp = pd.read_excel(xlsfilename)#使用pd.read_excel来读取xls文件,输入为文件名称字符串
    xlsxfilename = xlsfilename.replace('.xls','.xlsx')#使用原文件名来命名新的xlsx文件,但是需要将后缀.xls改为.xlsx
    temp.to_excel(xlsxfilename,index = False)#将文件转化为xlsx文件
    return 

#交互输入地址并读取该地址下的文件名
print('请输入包含xls文件的地址并以回车结束')
folder_path = str(input())#输入的文件夹路径
os.chdir(folder_path)#将程序路径改为输入的文件夹路径
xlsfilename_list = os.listdir()#得到文件夹中所有文件的名称列表


#循环打开每一个xls文件并转换为xlsx文件
NumofCycle = len(xlsfilename_list)#获得路径中xls文件的数量,并且使用这个数量作为for循环的参数
for i in range(1,NumofCycle+1):
    print('正在转换第' + str(i) + '个文件')#提示目前正在转换的进度
    xls_to_xlsx(xlsfilename_list[i-1])#执行转换程序
print('转换完毕,退出请按任意键')#提示转换完毕
os.system('pause')

 

 

问题以及解决办法:目前的程序不智能,还有以下几个问题需要处理:

  1. 无法识别文件夹中除了xls文件以外的其他文件,当路径中有xlsx文件以外,会将xlsx文件转化为xlsxx文件,很明显这会报错。目前需要人工确保文件夹中的所有文件为xls文件才能正确工作;解决这个问题的方法就是在执行循环中加一个判定的语句,判断文件名称中是否含有'.xls'字符串,如果包含则执行转换程序,不包含则continue

 

转换成exe文件:这个步骤是为了以后使用小程序方便,网络上有很多转换的案例,这里需要提示的就是:因为这个程序需要有人工输入交互,所以在转换时要把控制台打开,至少我在转换exe文件的时候如果没有加控制台-c的命令,最终exe文件是闪退的,代码没有问题,但是exe文件闪退。我加了-c的命令后就正常了。

 

------------祝愿大家都能用python提高自己的工作效率