之前在QQ小程序看到收集表可以收集图片,但是却只能导出为Excel,用户上传的图片都变成了一个个单元格的超链接。
但是一个一个去下载也太麻烦了吧,听说python可以处理Excel,那我就试着写一下吧

很巧,这次用到的依赖库,基本在安装python时都安装了
直接省去了安装步骤

遇到的问题

  1. 首先就遇到了文件读取的问题,反复输了很多次都不对
    后来查询了资料,发现如果路径中含有中文会报错,需要加r例如:
    1
    xlrd.open_workbook(r'D:\文字')
    但是我又找到一种解决方法,将python文件和Excel放在一起通过:
    1
    2
    3
    4
    5
    #获取本文件所在目录
    def get_path():
    path = os.path.abspath(__file__)
    path = os.path.dirname(path)
    return path
    获取文件所在目录即可。
  2. 因为版本问题,xlrd库最新版只能处理xls,所以xlsx文件必须要打开后另存为xls。
  3. 需要注意的是,定位单元格时,如A1应该为(0,0),前面是行后面是列,因此A2为(1,0)

运行

首先随便制成一个Excel
image.png
运行python
image.png
运行完毕,在文件目录下发现文件夹
image.png
(这边确实是放了两张一样的图片)
image.png
测试成功

代码

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
import xlrd
import os,stat
import urllib.request
#获取本文件所在目录
def get_path():
path = os.path.abspath(__file__)
path = os.path.dirname(path)
return path
print(get_path())
#xls文件路径
filedata = get_path()+'\\'+input("请输入xls文件名(无需后缀):")+'.xls'
print(filedata)
data = xlrd.open_workbook(filedata)
#文件保存路径
file_path = get_path()+'\\'+input("请输入文件保存的文件夹名字:")
#
ifyg = input('是否每个名字一个文件夹:(y/n)')
table = data.sheets()[0]
nrows = table.nrows
ncols = table.ncols
nameid = []
for i in range(ncols):
if table.cell(0,i).value == '名字':
name = i
def download_img(img_url,file_path,file_name):
#判断文件路径是否存在,如果不存在就创建
if not os.path.exists(file_path):
os.makedirs(file_path)
#获取图片后缀
suffix = os.path.splitext(img_url)[1]
#拼接图片名(包含路径)
filename = os.path.join(file_path,file_name + suffix)
#下载图片,并保存到文件夹中
urllib.request.urlretrieve(img_url,filename=filename)
#修改文件权限
os.chmod(filename,stat.S_IRWXU | stat.S_IRWXG | stat.S_IRWXO)
def zuih(id,phoname,link,file_path):
if ifyg == 'y':
file_paths = file_path+'\\'+id
download_img(link,file_paths,phoname)
else :
phonames = id + phoname
download_img(link,file_path,phonames)
def get_link(i,name,nrows,table):
for j in range(1,nrows):
hyperlink_obj = table.hyperlink_map.get((j,i))
link = hyperlink_obj.url_or_path
link = link.split('?')[0]
id = table.cell(j,name).value
print(id)
print(link)
zuih(id,phoname,link,file_path)
for i in range(ncols):
values = table.cell(1,i).value
#如果values的值不是str类型,则使用astypt转换
if not isinstance(values,str):
values = str(values)
str1 = 'jpeg'
if str1 in values:
phoname = table.cell(0,i).value
get_link(i,name,nrows,table)