由于使用的PHP库解析xls格式文件有问题,而将xls格式转换为xlsx格式就可以解析,考虑到xls文件有很多,需要使用批量转换文件的方法,本文介绍两种方法。
方法1:Python pandas库
使用Python pandas库的to_excel方法来另存为xlsx格式。
考虑到Excel文件一般有多个工作表,需要都读出来然后保存。下面直接给出代码:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45import glob
import os
import time
import pandas as pd
class excelConvert():
def __init__(self):
self.path = os.getcwd() # 当前工作路径
xlsxdirname = "xlsx"
xlsxpath = os.path.join(self.path, xlsxdirname)
if not os.path.exists(xlsxpath):
print(f"创建文件夹: {xlsxdirname}")
os.makedirs(xlsxpath)
self.xlsxpath = xlsxpath
def batch_convert(self):
xls_files = glob.glob(self.path + "/*.xls")
if len(xls_files) != 0:
print('当前目录下的xls格式文件:')
for file in xls_files:
print(os.path.basename(file))
fname, _ = os.path.splitext(file)
basename = os.path.basename(fname)
xlsxpathname = os.path.join(self.xlsxpath, basename)
self.saveasxlsx(file, xlsxpathname)
else:
print('该目录下无xls格式文件,即将退出...')
time.sleep(2)
os._exit(0)
def saveasxlsx(self, xlspath, xlsxpath):
writer = pd.ExcelWriter(xlsxpath + '.xlsx')
datas = pd.read_excel(xlspath,sheet_name=None)
for sheetname, values in datas.items():
data = pd.DataFrame(values)
data.to_excel(writer, sheet_name=sheetname)
writer.save()
writer.close()
if __name__=='__main__':
excel = excelConvert()
excel.batch_convert()
使用上述代码无法保留原Excel文件中的单元格样式,接下来介绍使用VBA代码进行转换。
方法2:VBA批量转换
使用VBA代码进行批量转换,代码来源:https://www.extendoffice.com/documents/excel/1349-excel-batch-convert-xls-to-xlsx.html
打开Excel 2007或者以上版本,ALT + F11 打开 Microsoft Visual Basic for Applications窗口,点击 插入-> 模块,会打开代码窗口。
或者右键点击工作表,选择【查看代码】:
输入以下代码:
1 | Sub ConvertToXlsx() |
点击F5运行,选择xls文件目录和保存xlsx文件的目录,然后会进行批量转换。
逃离是事实,但我没有背叛。——刘慈欣《三体2:黑暗森林》
本文标题:xls批量转换为xlsx格式文件
文章作者:hiyo
文章链接:https://hiyongz.github.io/posts/python-notes-for-xls2xlsx-with-pandas/
许可协议:本博客文章除特别声明外,均采用CC BY-NC-ND 4.0 许可协议。转载请保留原文链接及作者。