背景
在平常的工作中,我们经常要操作excel;但这不是程序猿的思维,程序员应该把excel当成程序可以操作的数据。
读写excel
对excel的操作主要是读取和写入操作,分别介绍下
读取数据
读取excel中的所有sheet
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17import xlrd
def get_all_sheets_names(self):
"""
读取excel里所有的sheet
"""
self.sheet_names = dict()
idx = 0
rd = xlrd.open_workbook(self.excel_r_path)
for one_name in rd.sheet_names():
self.sheet_names[one_name] = idx
idx += 1
if DEBUG_SWITCH == 1:
for key, value in self.sheet_names.items():
print key, value
return读取其中一个sheet中的数据
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21def read_one_excel_data(self, index):
"""
读取一个excel中的数据
"""
one_sheet = self.rd.sheet_by_index(index)
# 行数& 列数
rows = one_sheet.nrows
columns = one_sheet.ncols
for i in range(rows):
one_list = []
for j in range(columns):
one_elem = one_sheet.cell(i, j).value.encode('utf-8')
one_list.append(one_elem)
self.data.append(one_list)
if DEBUG_SWITCH == 1:
for row in self.data:
for dt in row:
print dt,
print
写入数据
1 | def set_style(self, name, height, bold = False): |
做成web版本
只需要将数据加载起来,通过web框架展现出来
上传 & 展现
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20<form action="" enctype='multipart/form-data' method='POST'>
<input type="file" name="file">
<input type="submit" value="上传">
</form>
{% if data_row_num %}
<table class="table table-bordered table-hover">
<tbody>
{% for i in range(data_row_num) %}
<tr>
{% for j in range(col_num) %}
<td>
{{ data_csv[i][j] }}
</td>
{% endfor %}
</tr>
{% endfor %}
</tbody>
</table>
{% endif %}下载
1
2
3
4
5<form action="" enctype='multipart/form-data' method='POST'>
<input type="file" name="file">
<input type="submit" value="upload", name="upload">
<input type="submit" value="download", name="download">
</form>
服务端1
2
3
4
5
6
7if request.form.get('upload') == 'upload':
pass
elif request.form.get('download') == 'download':
path = os.getcwd()
#写入数据到chg.xls
write_excel(path + '/chg.xls', data)
return send_from_directory(path, 'chg.xls', as_attachment = True)
总结
我们既能操纵excel里的数据进行快速分析,也能通过网页的方式查看excel中的数据;更进一步,我们可以让用户提交处理数据的逻辑,将逻辑传递到后台,定制化数据输出