我是靠谱客的博主 勤劳龙猫,这篇文章主要介绍利用Openyxl为Excel批量插入表头行(Excel读写基础操作)——下,现在分享给大家,希望可以做个参考。

在《利用Openyxl为Excel批量插入表头行(Excel读写基础操作)——上》的基础上,详细内容请参考前文https://blog.csdn.net/lzqg1990/article/details/95944843 ,又做了一些改进:

 

本次新增功能:

  • 将Excel源文件转成CSV格式——直接将原表cell值写入CSV文件

CSV(Comma-Separated Values)不能包含多个sheet,逗号或字符分隔值,本质上是纯文本。

本文处理的excel数据,由于每个工作簿只含一个sheet,不用遍历workbook下所有sheet转为csv,但需留意上述情况。

  • 删除Excel中空值(None)所在行——空值所在行不写入CSV文件

注意Python中的None与 NULL(即空字符)的区别

  • 表头中统计不含空值的行数——记录写入csv中的行数

 

完善后的代码如下:

复制代码
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#coding=UTF-8 import os import csv import openpyxl root = r'D:PythonCode_inWorkxijingexcel'#需要处理excel的根目录 root_root, root_dir_name = os.path.split(root) #优先遍历父目录、不遍历目录下的快捷方式 #os.walk()中topdown=True从父到子,topdown=False代表从子到父遍历 #root相对根目录、及其下属dirs文件夹、本层files文件(不含子文件夹文件) file_walk = os.walk(root, topdown=True, onerror=None, followlinks=False) ###新建好处理后成果——root的镜像文件夹rootnew,注意topdown=True ls = [] for root, dirs, files in file_walk: new_csv_root = root.replace(root_dir_name,root_dir_name+'_csv') ## print(new_csv_root) os.mkdir(new_csv_root) for file in files: file_path = os.path.join(root,file) print(file_path) if '.xlsx' in file_path:#注意excel有多种后缀格式 ls.append(file_path) ##print(ls) ##ws for worksheet ##wb for workbook num = 0 #遍历根目录下所有excel文件 for xlsx_path in ls: num += 1 new_csv_path = xlsx_path.replace(root_dir_name,root_dir_name+'_csv').replace('.xlsx','.csv') new_csv_root,csv_name = os.path.split(new_csv_path)#将文件名和根目录分开 #01新建空csv outputCSV = open(new_csv_path, 'w', newline='')#源excel只有一页sheet,无需遍历 #02复制原sheet内容 wb_old = openpyxl.load_workbook(xlsx_path) ws_old = wb_old.active #判断源sheet中含空值的行数 isNull = False #判断一行是否为空,为空则不插入新表 newLines = 0 # 记录已经写入新csv中的行数,默认为0不含表头 nullLines = 0 # 记录空行数 #两个for循环遍历整个源sheet的单元格内容 result = [] for i in range(ws_old.max_row): isNull = False #判断一行是否为空,为空则不插入新表 for j in range(ws_old.max_column): #print(sheet.cell(i+1,j+1).value) if ws_old.cell(i+1,j+1).value == None:#如果cell值为None isNull = True nullLines += 1 break if isNull == False: ls_column = [] for j in range(ws_old.max_column): value=ws_old.cell(i+1, j+1).value ls_column.append(str(value)) result.append(ls_column) newLines += 1 result.insert(0, [str(newLines), '1', '1', '过程线']) for i in range(len(result)): outputCSV.writelines(','.join(result[i]) + 'n') outputCSV.close() print('共{}excel转csv文件新建完成!'.format(num)) print('请在excel根目录的上级文件中寻找同名_csv文件夹!') #一个 Excel 文件可能包含多个工作表,必须为每个表创建一个 CSV 文件。 #本数据对象的excel文件只含1个sheet,不需遍历sheet。 #workbook: 工作簿,一个excel文件包含多个sheet。 #sheet:工作表,一个workbook有多个,表名识别,如“sheet1”,“sheet2”等。 #cell: 单元格,存储数据对象

 

最后

以上就是勤劳龙猫最近收集整理的关于利用Openyxl为Excel批量插入表头行(Excel读写基础操作)——下的全部内容,更多相关利用Openyxl为Excel批量插入表头行(Excel读写基础操作)——下内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(62)

评论列表共有 0 条评论

立即
投稿
返回
顶部