Python excel表格讀寫,格式化處理

cslience發表於2018-08-31

需求:我們公司是做服裝零售的,有很多個自營店鋪。每個月去店鋪盤點,因為裝置和網路限制,就用掃描槍直接把盤點貨品儲存到一個excel表格當中。然後通過excel表格匯入到 DRP系統當中。excel表的匯入格式是固定的,就貨品條碼一列。實際我們盤點的時候會分很多列,或者很多品牌等等,這時就需要人工介入處理,相當耗時,通過程式後 人工整理10分鐘變一秒。

感受一下

圖片一:盤點excel資料來源:多列、多品牌、不規則

圖片二:目標盤點excel 匯入模板

源excel經過工具過渡到目標模板處理:

python + xlrd + xlwt 開發,用了一個 桌面程式顯示

輸出:每次執行都會單獨建立一個資料夾存放

程式核心思路: 1、選中原始檔 excel表  2、讀取excel所有列 3、寫入到新的excel表中 

涉及到基礎知識:日期轉換字串、excel表讀和寫、檔案和目錄的建立、列表、遍歷等等。

圖形化程式設計程式碼複用。

核心程式碼塊:

1、讀入excel,其中針對不同品牌貨號做了區分,儲存到不同的list中,return一個元祖

	def pd_format_excel(self, file_name):
		if os.path.exists(file_name) == False:
			messagebox.showerror(title='友情提示', message='請選擇正確的檔案')
		bk = xlrd.open_workbook(file_name)
		sheet1 = bk.sheet_by_index(0)
		# sheet1 = bk.sheet_by_name('Sheet1')
		nrows = sheet1.nrows
		nclos = sheet1.ncols
		klist = []
		mlist = []
		l_list = []
		other_list = []
		for x in range(nrows):
			for y in range(nclos):
				cellvalue = str(sheet1.cell_value(x, y)).upper()

				if cellvalue == '':
					continue
				cellvalue = self.del_style_key(cellvalue)

				if cellvalue.startswith('L'):
					l_list.append(cellvalue)
				elif cellvalue.startswith('K'):
					klist.append(cellvalue)
				elif cellvalue.startswith('M'):
					mlist.append(cellvalue)
				else:
					other_list.append(cellvalue)
		return mlist, l_list, klist, other_list

2、根據返回的 元組資料,一個for迴圈遍歷,寫入到excel中

	# 寫入excel表格
	def write_pd_excel(self, list):
			# 新建目錄:執行目錄+當前日期拼接新目錄
		dir_name = os.path.join(os.getcwd(), time.strftime("%Y-%m-%d", time.gmtime()) + '盤點明細單')
		if not os.path.exists(dir_name):
			os.makedirs(dir_name)
		file = xlwt.Workbook()  # 建立工作簿
		'''
			建立第一個sheet:
			 sheet1
		'''
		sheet1 = file.add_sheet(u'Sheet1', cell_overwrite_ok=True)
		# 設定列寬
		sheet1.col(0).width = 256 * 30
		# 生成表頭第1行標題
		sheet1.write(0, 0, '款號')
		# 從第2行開始遍歷excel寫入
		i = 1
		# for迴圈寫入盤點明細
		for row in list:
			sheet1.write(i, 0, row)
			# 移動到下一行繼續迴圈
			i += 1
		# 儲存檔名拼接: 結算方程式碼_結算方名稱_出入庫明細_日期年月.xls
		brandname = self.get_brand_name(list[0][0])
		file_name = brandname + '-' + time.strftime("%Y-%m-%d-%H-%M-%S", time.gmtime()) + '盤點明細單' + '.xls'
		# 儲存excel,目錄+檔名
		file.save(os.path.join(dir_name, file_name))
		self.txt2.insert(END,  file_name + ' 轉換完成\n')

功能簡單,解決了實際工作中遇到的現實問題,記錄下學以致用。

如有需要原始碼可以e-mail我。

相關文章