| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279 |
- import threading
- import xlsxwriter
- import shutil
- from pic_deal import Picture
- from excel_base_func import *
- class GenerateGoodsArtNoTable():
- def __init__(self):
- pass
- def show_progress(self, data):
- progress_bar_value = data["progress_bar_value"]
- self.label_5.setText(data["type"])
- self.progressBar.setValue(progress_bar_value)
- pass
- def check(self):
- _path = self.image_dir + "/历史"
- if not os.path.exists(_path):
- os.mkdir(_path)
- return True
- def set_state(self, state_value: int):
- # 0禁用 1进行中 2已结束
- if state_value not in [0, 1, 2]:
- return
- self.state = state_value
- if self.state == 0:
- self.pushButton.setText("执行中")
- self.pushButton.setEnabled(False)
- if self.state == 1:
- self.progressBar.show()
- self.textBrowser_2.show()
- self.pushButton.setText("执行中")
- self.pushButton.setEnabled(False)
- self.textBrowser_2.clear()
- if self.state == 2:
- self.pushButton.setText("执行完毕")
- self.pushButton.setEnabled(True)
- self.progressBar.hide()
- def run(self):
- self.set_state(state_value=1)
- self.t = threading.Thread(target=self.run_by_thread, args=())
- self.t.start()
- def show_progress_detail(self, text):
- self.textBrowser_2.append(text)
- def run_by_thread(self, dir_path=None):
- if not dir_path:
- dir_path = self.label_4.text()
- if not dir_path:
- self.show_progress_detail("请选择文件夹")
- self.set_state(state_value=2)
- return
- if not os.path.exists(dir_path):
- self.show_progress_detail("该文件夹不存在")
- self.set_state(state_value=2)
- return
- GenerateGoodsArtNoTable.deal(dir_path)
- # 完成处理
- self.set_state(state_value=2)
- def save_as_excel(self, out_excel_data, out_excel_path=None):
- self.show_progress_detail("开始尝试导出Excel文件~~~~")
- def close_book(_book):
- try:
- _book.close()
- except BaseException as e:
- print(e)
- self.show_progress_detail("请先关闭文件:{}".format(out_excel_path))
- return False
- return True
- options = {
- "default_format_properties": {
- "align": "left",
- "valign": "vcenter",
- "text_wrap": True,
- }
- }
- book = xlsxwriter.Workbook(filename=out_excel_path, options=options)
- sheet = book.add_worksheet("sheet1")
- # sheet.freeze_panes(1, 2)
- sheet.set_column("B:B", 17)
- sheet.write_row("A1", ["货号", "缩略图"])
- for index, data in enumerate(out_excel_data):
- # print(data)
- goods_no, image_file = data
- try:
- im = Image.open(image_file)
- im_x, im_y = im.size
- image_width = 100
- image_height = int(im_y * image_width / im_x)
- sheet.set_row(index + 1, 95)
- x_scale = round(image_width / im_x, 2) # 固定宽度/要插入的原始图片宽
- y_scale = round(image_height / im_y, 2) # 固定高度/要插入的原始图片高
- sheet.insert_image(
- index + 1,
- 1,
- image_file,
- {
- "x_scale": x_scale,
- "y_scale": y_scale,
- "x_offset": 5,
- "y_offset": 5,
- },
- )
- except:
- self.show_progress_detail("图片异常,{}".format(image_file))
- pass
- sheet.write_row("A{}".format(index + 2), [goods_no])
- close_book(book)
- self.show_progress_detail("已保存文件至:{}".format(out_excel_path))
- # while 1:
- # if self.is_del:
- # break
- #
- # if not close_book(book):
- # time.sleep(1)
- # self.show_progress_detail("请先关闭文件:{}".format(out_excel_path))
- # else:
- # self.show_progress_detail("已保存文件至:{}".format(out_excel_path))
- # break
- @classmethod
- def deal(cls, dir_path):
- def close_book(_book):
- try:
- _book.close()
- except BaseException as e:
- print(e)
- return False
- return True
- # print("dir_path", dir_path)
- out_excel_data = []
- for goods_art_no_folder in os.listdir(dir_path): # 遍历货号文件夹集合
- if not os.path.isdir(
- "{}/{}".format(dir_path, goods_art_no_folder)
- ): # 非文件夹进行过滤
- continue
- if "软件" in goods_art_no_folder:
- continue
- # print("goods_art_no_folder", goods_art_no_folder)
- # 如果存在800的主图,则优先进行使用
- big_image_folder_path = "{}/{}/800x800".format(
- dir_path, goods_art_no_folder
- )
- if not os.path.exists(big_image_folder_path):
- os.mkdir(big_image_folder_path)
- all_big_images = os.listdir(big_image_folder_path)
- goods_pic_total = len(all_big_images)
- _Type = [".png", ".PNG", ".jpg", ".JPG", ".gif", ".GIF", ".jpge", ".JPGE"]
- thumb_image_file_path = None
- # print("all_big_images",all_big_images)
- if all_big_images:
- for _file in all_big_images:
- # print(_file)
- file_name, e = os.path.splitext(_file)
- # print(file_name, e)
- if e in _Type:
- thumb_image_file_path = "{}/{}/800x800/{}".format(
- dir_path, goods_art_no_folder, _file
- )
- break
- # 如果不存在主图则进行使用原始图
- if thumb_image_file_path is None:
- _path = "{}/{}/原始图".format(dir_path, goods_art_no_folder)
- if not os.path.exists(_path):
- continue
- all_original_images = os.listdir(_path) # 遍历货号原始图文件夹
- goods_pic_total = len(all_original_images)
- if not all_original_images:
- continue
- image_file = all_original_images[0] # 取第一个货号图
- image_file_path = "{}/{}/原始图/{}".format(
- dir_path, goods_art_no_folder, image_file
- )
- if not os.path.exists(
- "{}/{}/200images".format(dir_path, goods_art_no_folder)
- ):
- os.mkdir("{}/{}/200images".format(dir_path, goods_art_no_folder))
- thumb_image_file_path = "{}/{}/200images/{}".format(
- dir_path, goods_art_no_folder, image_file
- )
- if not os.path.exists(thumb_image_file_path):
- # 开始触发进行压缩生成文件
- shutil.copy(image_file_path, thumb_image_file_path) # 复制文件
- pic = Picture(thumb_image_file_path)
- pic.resize(width=600)
- pic.save_img(thumb_image_file_path)
- # print("thumb_image_file_path", thumb_image_file_path)
- goods_number = ""
- if "@" in goods_art_no_folder:
- _ = goods_art_no_folder.split("@")
- goods_art_no_folder = _[0]
- goods_number = _[1].replace("NUM", "")
- out_excel_data.append(
- [
- goods_number,
- goods_art_no_folder,
- thumb_image_file_path,
- goods_pic_total,
- ]
- )
- if out_excel_data:
- out_excel_path = "{}/货号表-{}.xlsx".format(dir_path, time.time())
- options = {
- "default_format_properties": {
- "align": "left",
- "valign": "vcenter",
- "text_wrap": True,
- }
- }
- book = xlsxwriter.Workbook(filename=out_excel_path, options=options)
- sheet = book.add_worksheet("sheet1")
- # sheet.freeze_panes(1, 2)
- sheet.set_column("B:B", 17)
- sheet.set_column("D:D", 20)
- sheet.write_row("A1", ["编号", "原货号", "新货号", "缩略图", "原始图张数"])
- for index, data in enumerate(out_excel_data):
- # print(data)
- goods_number, goods_art_no, image_file, goods_pic_total = data
- try:
- im = Image.open(image_file)
- im_x, im_y = im.size
- image_width = 100
- image_height = int(im_y * image_width / im_x)
- sheet.set_row(index + 1, 95)
- x_scale = round(
- image_width / im_x, 2
- ) # 固定宽度/要插入的原始图片宽
- y_scale = round(
- image_height / im_y, 2
- ) # 固定高度/要插入的原始图片高
- sheet.insert_image(
- index + 1,
- 3,
- image_file,
- {
- "x_scale": x_scale,
- "y_scale": y_scale,
- "x_offset": 5,
- "y_offset": 5,
- "object_position":1,
- },
- )
- except:
- pass
- sheet.write_row("A{}".format(index + 2), [goods_number])
- sheet.write_row("B{}".format(index + 2), [goods_art_no])
- sheet.write_row("E{}".format(index + 2), [goods_pic_total])
- close_book(book)
|