前言
4月換了份新工作。在新環境下要學習的地方很多;工作側重點也有所改變。當然工作也更忙了。下班閒暇之餘敲敲代碼寫寫自己的程序也是一種享受IT職業的方式。
言歸正傳,換了新工作後我依然沒有逃避txt轉xlsx的問題,天天都在手動打開txt設值分隔符。某天終於按耐不住這重複無聊的步驟,於是基於《windows二維碼工具3.0》寫了這個小工具。
正文
內容
- txt 轉 xlsx 網上源碼真的很多
- 界面設計上,由於工作中需要一次轉20多個txt,所以選擇批處理方式。
- 合併單元格,日期格式,金額格式,小數點。xlsx格式這一直是頭大的問題。但慶幸的是在我的工作中完全不需要設置xlsx格式,所以內容都是以“字符串”寫入單元格,無合併單元格。
- 運行環境需要安裝 Visual C++ Redistributable for Visual Studio 2015 安裝包
演示
部分代碼
class WriteThread(QtCore.QThread):
'''
工作線程,處理txt轉xlsx
'''
_signal = pyqtSignal(int, str)
def __init__(self, srcfiles, dstfiles, split, coding):
super(WriteThread, self).__init__()
self.srcfiles = srcfiles
self.dstfiles = dstfiles
self.split = split
self.coding = coding
def run(self):
currentfile = ''
try:
for i in range(len(self.srcfiles)):
currentfile = self.srcfiles[i]
self.txt_to_xlsx(self.srcfiles[i], self.dstfiles[i], self.split, self.coding)
self._signal.emit(0, "OK")
except Exception as e:
self._signal.emit(-1, currentfile + ':' + str(e))
def txt_to_xlsx(self, filename, outfile, split, encoding):
fr = codecs.open(filename, 'r', encoding=encoding)
wb = openpyxl.Workbook()
ws = wb.active
row = 0
for line in fr:
row += 1
line = line.strip()
line = line.split(split)
col = 0
for j in range(len(line)):
col += 1
ws.cell(column=col, row=row, value=line[j])
wb.save(outfile)
打包exe說明
- 環境使用virtualenv (annaconda環境下打包exe會非常的大)
- 安裝pyqt5 openpyxl pyinstaller
- 打包命令
pyinstaller -F -w txt2xlsx.py 或 pyinstaller txt2xlsx.spec
感悟
實際工具不難寫,開發初期寫了個cmd版本,在工作中試用了一天。實測可以滿足需求,後續花了幾個小時完成了界面開發。小工具滿足自己的需求,也給大家參考參考,最最重要的還是要想法去折騰。所以我也自己琢磨着搞個小程序,收集些需求空閒之餘折騰下。
源代碼和工具下載
鏈接: https://pan.baidu.com/s/1bkITnqW85KNC0CSw52XuSQ
提取碼: swca