Python excel表格讀寫,格式化處理
阿新 • • 發佈:2019-01-07
需求:我們公司是做服裝零售的,有很多個自營店鋪。每個月去店鋪盤點,因為裝置和網路限制,就用掃描槍直接把盤點貨品儲存到一個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我。