翼度科技»论坛 编程开发 python 查看内容

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

9

主题

9

帖子

27

积分

新手上路

Rank: 1

积分
27
背景:供应商程序导出的文件是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文件名列表,
  1. import os
  2. import pandas as pd
  3. # 设定全局变量
  4. folder_path = ''#xls文件夹路径
  5. xlsfilename_list = ''#xls文件列表,从xls文件夹路径中导出
复制代码
 
  3. 定义函数:将网上找到的执行代码定义为一个函数,此处输入输出的变量名要用自己之前定义的变量名,并且在函数内还需要定义一些局部变量。函数的输入是一个字符串,字符串的内容是xls文件的绝对地址。
  1. #定义转换函数
  2. def xls_to_xlsx(xlsfilename):
  3.     temp = pd.read_excel(xlsfilename)#使用pd.read_excel来读取xls文件,输入为文件名称字符串
  4.     xlsxfilename = xlsfilename.replace('.xls','.xlsx')#使用原文件名来命名新的xlsx文件,但是需要将后缀.xls改为.xlsx
  5.     temp.to_excel(xlsxfilename,index = False)#将文件转化为xlsx文件
  6.     return
复制代码
 
  4. 获取需要做变换的文件夹路径,并且将文件夹中的所有文件名全部获取
  1. #交互输入地址并读取该地址下的文件名
  2. print('请输入包含xls文件的地址并以回车结束')
  3. folder_path = str(input())#输入的文件夹路径
  4. os.chdir(folder_path)#将程序路径改为输入的文件夹路径
  5. xlsfilename_list = os.listdir()#得到文件夹中所有文件的名称列表
复制代码
 
  5. 使用for循环来历遍文件夹中的所有文件
  1. #循环打开每一个xls文件并转换为xlsx文件
  2. NumofCycle = len(xlsfilename_list)#获得路径中xls文件的数量,并且使用这个数量作为for循环的参数
  3. for i in range(1,NumofCycle+1):
  4.     print('正在转换第' + str(i) + '个文件')#提示目前正在转换的进度
  5.     xls_to_xlsx(xlsfilename_list[i-1])#执行转换程序
  6. print('转换完毕,退出请按任意键')#提示转换完毕
复制代码
 
 
最终得到的整个程序如下:
  1. # -*- coding: utf-8 -*-"""Created on Thu Dec 14 23:19:09 2023@author: Ray"""import os
  2. import pandas as pd
  3. # 设定全局变量
  4. folder_path = ''#xls文件夹路径
  5. xlsfilename_list = ''#xls文件列表,从xls文件夹路径中导出#定义转换函数
  6. def xls_to_xlsx(xlsfilename):
  7.     temp = pd.read_excel(xlsfilename)#使用pd.read_excel来读取xls文件,输入为文件名称字符串
  8.     xlsxfilename = xlsfilename.replace('.xls','.xlsx')#使用原文件名来命名新的xlsx文件,但是需要将后缀.xls改为.xlsx
  9.     temp.to_excel(xlsxfilename,index = False)#将文件转化为xlsx文件
  10.     return #交互输入地址并读取该地址下的文件名
  11. print('请输入包含xls文件的地址并以回车结束')
  12. folder_path = str(input())#输入的文件夹路径
  13. os.chdir(folder_path)#将程序路径改为输入的文件夹路径
  14. xlsfilename_list = os.listdir()#得到文件夹中所有文件的名称列表#循环打开每一个xls文件并转换为xlsx文件
  15. NumofCycle = len(xlsfilename_list)#获得路径中xls文件的数量,并且使用这个数量作为for循环的参数
  16. for i in range(1,NumofCycle+1):
  17.     print('正在转换第' + str(i) + '个文件')#提示目前正在转换的进度
  18.     xls_to_xlsx(xlsfilename_list[i-1])#执行转换程序
  19. print('转换完毕,退出请按任意键')#提示转换完毕os.system('pause')
复制代码
 
 
问题以及解决办法:目前的程序不智能,还有以下几个问题需要处理:
  1. 无法识别文件夹中除了xls文件以外的其他文件,当路径中有xlsx文件以外,会将xlsx文件转化为xlsxx文件,很明显这会报错。目前需要人工确保文件夹中的所有文件为xls文件才能正确工作;解决这个问题的方法就是在执行循环中加一个判定的语句,判断文件名称中是否含有'.xls'字符串,如果包含则执行转换程序,不包含则continue
 
转换成exe文件:这个步骤是为了以后使用小程序方便,网络上有很多转换的案例,这里需要提示的就是:因为这个程序需要有人工输入交互,所以在转换时要把控制台打开,至少我在转换exe文件的时候如果没有加控制台-c的命令,最终exe文件是闪退的,代码没有问题,但是exe文件闪退。我加了-c的命令后就正常了。

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

来源:https://www.cnblogs.com/purpleskying/p/17902519.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具