python操作excel一些实现

python操作excel一些实现

抽了点时间,把python使用openpyxl操作excel的一些实现封装了下,后面有需求直接用吧

numpytest.openexcel.py

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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
#!/usr/bin/env python3
# -*-coding: utf-8 -*-
"""
@author: kyle
@time: 2019/7/18 13:17
"""
import openpyxl


def load_excel(filename):
"""
加载excel
:param filename:
:return:
"""
# 加载execl文件
wb = openpyxl.load_workbook(filename)
return wb


def get_excel(filename, sheetname):
"""
获取excel行、列数
:param filename: 待读取文件名
:param sheetname: 列名
:return: 行、列数
"""
wb = load_excel(filename)
# 指定读取sheet页
sheet = wb[sheetname]
# 获取最大行数
nrows = sheet.max_row
ncols = sheet.max_column
return nrows, ncols


def read_excels(filename, sheetname):
"""
读取excel所有数据
:param filename: 待读取文件
:param sheetname: 带读取sheet页
:return: 数据
"""
# 获取指定sheet页
wb = load_excel(filename)
sheet = wb[sheetname]
# 获取最大行、列数
nrow = get_excel(filename, sheetname)[0]
ncol = get_excel(filename, sheetname)[1]
# 读取数据
testdata = []
for i in list(range(1, nrow+1)):
tmplist = []
for j in list(range(1, ncol+1)):
tmplist.append(sheet.cell(row=i, column=j).value)
testdata.append(tmplist)
return testdata


def read_excel(filename, sheetname, col):
"""
读取excel指定列,返回数据列表
:param filename: 带读取excel文件
:return: 列数据
"""
# 获取指定sheet页
wb = load_excel(filename)
sheet = wb[sheetname]
# 获取最大行数
nrows = get_excel(filename, sheetname)[0]
# 获取数据
testdata = []
for i in list(range(2, nrows+1)):
testdata.append(sheet.cell(row=i, column=col).value)
return testdata


def write_excel(filename, sheetname, colname, col, testdata):
"""
已知数据集,写数据到指定列
:param filename: 待写数据文件
:param sheetname: 待写数据页签
:param colname: 待写数据列名
:param col: 待写数据列
:param testdata: 待写数据集(列表格式)
:return:
"""
# 激活写页签
wb = load_excel(filename)
sheet = wb[sheetname]

# 写入列标题
sheet.cell(row=1, column=col, value=str(colname))
# 写入数据
# 写数据
for i in range(2, len(testdata) + 1):
sheet.cell(row=i, column=col, value=str(testdata[i-2]))
# 写入缺失的最后一行数据
max_row = len(testdata) + 1
sheet.cell(row=max_row, column=col, value=str(testdata[-1]))
# 保存文件
wb.save(filename)


def write_col(filename, wfilename, sheetname, wsheetname, colname, col, colnumber):
"""
先读取,再写数据到指定列
:param filename: 数据读取文件
:param wfilename: 待写数据文件
:param sheetname: 读取数据页签
:param wsheetname: 待写数据页签
:param colname: 写数据列名
:param col: 读数据列序号
:param colnumber: 写数据列序号
:return: None
"""
# 激活写页签
wb = load_excel(wfilename)
sheet = wb[wsheetname]

# 写入列标题
sheet.cell(row=1, column=colnumber, value=str(colname))
# 写入数据
# 读取待写数据
testdata = read_excel(filename, sheetname, col)
# 写数据
for i in range(2, len(testdata)+1):
sheet.cell(row=i, column=colnumber, value=str(testdata[i-2]))
# 写入缺失的最后一行数据
max_row = len(testdata) + 1
sheet.cell(row=max_row, column=colnumber, value=str(testdata[-1]))
# 保存文件
wb.save(filename)


def write_data(filename, wfilename, sheetname, wsheetname, nrow, ncol):
"""
写所有数据
:param filename: 读取文件
:param wfilename: 待写入文件
:param sheetname: 读数据页签
:param wsheetname: 待写数据页签
:param nrow: 写数据行数
:param ncol: 写数据列数
:return:
"""
# 激活写页签
wb = load_excel(wfilename)
sheet = wb[wsheetname]

# 待写数据
testdata = read_excels(filename, sheetname)

# 写数据
for i in range(0, nrow):
for j in range(0, ncol):
sheet.cell(row=i+1, column=j+1, value=str(testdata[i][j]))
wb.save(filename)

然后写了个DES加密的client,以后加密直接从excel一列读数据,再写到下一列即可:
desclient

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
#!/usr/bin/env python3
# -*-coding: utf-8 -*-
"""
@author: kyle
@time: 2019/7/18 15:22
"""
import binascii
from numpytest import openexcel
from pyDes import des, ECB, PAD_PKCS5


# 获取待加密数据列
filename = 'E:/DESFile/loginname.xlsx'
sheet = 'Sheet1'
colnumber = 1
loginname = openexcel.read_excel(filename, sheet, colnumber)


# DES加密方法
def des_en(msg):
"""
DES 加密,分组方式 ECB,填充方式 PAD_PKCS5
:param msg: msg待加密字符串
:return: 返回加密后字符串,16进制,utf-8格式化,输出结果去除b和\n
"""
secret_key = 'SKUHWKLL'
iv =secret_key
key = des(secret_key, ECB, iv, pad=None, padmode=PAD_PKCS5)
entrymsg = key.encrypt(msg, padmode=PAD_PKCS5)
desstr = binascii.b2a_base64(entrymsg)
# return str(desstr, 'utf8')
# 去除写入excel可能出现的空行
desmsg = str(desstr, 'utf8')
return desmsg.strip()


# 加密处理
username = []
for i in loginname:
username.append(des_en(i))

# 写入excel指定列
filename = 'E:/DESFile/loginname.xlsx'
sheet = 'Sheet1'
col = 2
colname = 'Username'
openexcel.write_excel(filename, sheet, colname, col, username)

完~

文章目录
|