导表工具优化

dev_chengFeng
gaoxin 2020-07-05 19:21:15 +08:00
parent 9053926e02
commit 608c296452
1 changed files with 170 additions and 78 deletions

View File

@ -1,3 +1,4 @@
from xlutils import copy
import xlwt
import xlrd
import os
@ -11,50 +12,52 @@ sys.setdefaultencoding('utf8')
# test
class Test():
# excel line config
_ExportConfigXlsx = os.getcwd() + '/ExportConfig.xlsx'
_ExportConfig = {}
_col_offset = 6
translateXlsx = []
# orginal data
excelFilePath = os.getcwd() + '/../base_data/'
_col_offset = 6
_ExportData = {}
_ExportPath = os.getcwd() + '/Export/'
_ExportName = "LanguageXlsx"
# translate data
_TranslateData = {}
_TranslatePath = os.getcwd() + '/../Language_data/'
_TranslateName = "LanguageXlsx"
_TranslateTitle = ['original', 'change', 'tchinese', 'english', 'korean']
def Show(self):
# print(self.excelFilePath)
# self.FindTranslateXlsx(self.excelFilePath)
def init(self):
print("init")
self.LoadExportConfig()
self.Export()
def LoadExportConfig(self):
_workBook = xlrd.open_workbook(self._ExportConfigXlsx, 'rb')
if _workBook:
_workSheet = _workBook.sheet_by_index(0)
for _rIndex in range(_workSheet.nrows):
if _rIndex != 0:
_rData = _workSheet.row_values(_rIndex)
self._ExportConfig[_rIndex - 1] = _rData
else:
print("Error: Unknow ExportConfig")
self.LoadTranslateData()
print("init done...")
####TOOL
#
def PathDataToStr(self, pathData):
pathStr = []
for _key in pathData:
path = _key
for num in pathData[_key]:
path += "|" + str(num)
pathStr.append(path)
return pathStr
#
def PathStrToData(self, pathStr):
data = {}
for path in pathStr:
_l = path.split('|')
_key = _l[0]+ "|" + _l[1]
data[_key] = []
for i in range(len(_l)):
if i > 1 and _l[i] != "":
data[_key].append(int(_l[i]))
return data
def Export(self):
for _index in range(len(self._ExportConfig)):
_row = self._ExportConfig[_index]
_path = self.excelFilePath + _row[0] + ".xlsx"
print("Read:"+_path)
for i in range(len(_row)):
if i != 0 and _row[i] != "":
colNum = self.ColToNum(_row[i])
self.ReadXlsxData(_path, colNum, _row[0], _row[i])
self.WriteXlsxData()
# get line num
# English line to num line
def ColToNum(self, colStr):
i = 0
l = len(colStr)
@ -67,64 +70,153 @@ class Test():
# def FindTranslateXlsx(self, _file_dir):
# _fileList = os.listdir(_file_dir)
# for _files in _fileList:
# _filePath = os.path.join(_file_dir, _files)
# if os.path.isdir(_filePath):
# self.FindTranslateXlsx(_filePath)
# else:
# self.translateXlsx.append(_filePath)
# self.ReadXlsxData()
def LoadExportConfig(self):
print("LoadExportConfig...")
_workBook = xlrd.open_workbook(self._ExportConfigXlsx, 'rb')
if _workBook:
_workSheet = _workBook.sheet_by_index(0)
for _rIndex in range(_workSheet.nrows):
if _rIndex != 0:
_rData = _workSheet.row_values(_rIndex)
self._ExportConfig[_rIndex - 1] = _rData
def ReadXlsxData(self, _path, _colNum, excelName, excelColName):
_workBook = xlrd.open_workbook(_path, 'rb')
_workSheet = _workBook.sheet_by_index(0)
_cData = _workSheet.col_values(_colNum)
for _index in range(len(_cData)):
if _index >= self._col_offset:
_key = str(_cData[_index])
if _key and _key != "":
if not self._ExportData.has_key(_key):
self._ExportData[_key] = {}
_oName = excelName + "|"+excelColName
if not self._ExportData[_key].has_key(_oName):
self._ExportData[_key][_oName] = []
self._ExportData[_key][_oName].append(_index)
def WriteXlsxData(self):
print("Writing...")
def LoadTranslateData(self):
print("LoadTranslateData...")
self._TranslateData = {}
_workBook = xlrd.open_workbook(self._TranslatePath + self._TranslateName + ".xls", 'rb')
if _workBook:
_workSheet = _workBook.sheet_by_index(0)
for _rIndex in range(_workSheet.nrows):
# except title
if _rIndex != 0:
_rData = _workSheet.row_values(_rIndex)
_key = _rData[0]
# check repeat
if not self._TranslateData.has_key(_key):
self._TranslateData[_key] = self.CreateEmptyTranslateItem()
_pathStr = []
for i in range(len(_rData)):
if i < len(self._TranslateTitle):
# translate data
self._TranslateData[_key][self._TranslateTitle[i]] = _rData[i]
else:
# path data
if _rData[i].strip() != "": _pathStr.append(_rData[i])
self._TranslateData[_key]["pathData"] = self.PathStrToData(_pathStr)
_savePath = self._ExportPath + self._ExportName +'.xls'
def CreateEmptyTranslateItem(self):
o = {}
for k in self._TranslateTitle:
o[k] = ""
o["pathData"] = {}
return o
# clear all path
def ClearTranslateDataPath(self):
for ol in self._TranslateData:
self._TranslateData[ol]["pathData"] = {}
# Add a new data
def AddTranslateData(self, content, fileName, colName, rowNum):
if not self._TranslateData.has_key(content):
self._TranslateData[content] = self.CreateEmptyTranslateItem()
self._TranslateData[content]["original"] = content
_pathData = self._TranslateData[content]["pathData"]
_key = fileName + "|" + colName
if not _pathData.has_key(_key):
_pathData[_key] = []
if not _pathData[_key].__contains__(rowNum):
_pathData[_key].append(rowNum)
self._TranslateData[content]["pathData"] = _pathData
# save to local
def WriteTranslateDataToLocal(self):
print("WriteTranslateDataToLocal...")
_savePath = self._TranslatePath + self._TranslateName +'.xls'
_workBook = xlwt.Workbook(encoding='utf-8')
_workSheet = _workBook.add_sheet(self._ExportName)
_workSheet = _workBook.add_sheet(self._TranslateName)
_title = ['original', 'tchinese', 'english', 'korean']
# title
_titleIndex = 0
for _content in _title:
for _content in self._TranslateTitle:
_workSheet.write(0, _titleIndex, _content)
_titleIndex += 1
_cIndex = 1
for ol in self._ExportData:
# content
_workSheet.write(_cIndex, 0, str(ol))
# content
_rIndex = 1
for ol in self._TranslateData:
# translate
_cIndex = 0
for _content in self._TranslateTitle:
_workSheet.write(_rIndex, _cIndex, str(self._TranslateData[ol][_content]))
_cIndex += 1
# path
_pIndex = 1
for p in self._ExportData[ol]:
nums = ""
for n in self._ExportData[ol][p]:
nums += (str(n) + "#")
_workSheet.write(_cIndex, 4 + _pIndex, str(p) + "|" + nums)
_pIndex += 1
for p in self.PathDataToStr(self._TranslateData[ol]["pathData"]):
_workSheet.write(_rIndex, _cIndex, str(p))
_cIndex += 1
_cIndex += 1
_rIndex += 1
_workBook.save(_savePath)
print("Write Done")
def WriteXlsxDataByCol(self, content, path, fileName, colName, rowNums):
_savePath = path + fileName +'.xlsx'
_rworkBook = xlrd.open_workbook(_savePath)
_wworkBook = copy.copy(_rworkBook)
_workSheet = _wworkBook.get_sheet(0)
_colNum = self.ColToNum(colName)
for row in rowNums:
_workSheet.write(row, _colNum, content)
_wworkBook.save(_savePath)
def ExportRead(self, path, fileName, colName):
_colNum = self.ColToNum(colName)
_filePath = path + fileName + ".xlsx"
_workBook = xlrd.open_workbook(_filePath, 'rb')
_workSheet = _workBook.sheet_by_index(0)
_cData = _workSheet.col_values(_colNum)
for _index in range(len(_cData)):
if _index >= self._col_offset:
_content = str(_cData[_index])
if _content and _content != "":
self.AddTranslateData(_content, fileName, colName, _index)
def Export(self):
for _index in range(len(self._ExportConfig)):
_row = self._ExportConfig[_index]
print("Read:"+_row[0])
for i in range(len(_row)):
if i != 0 and _row[i] != "":
self.ExportRead(self.excelFilePath, _row[0], _row[i])
self.WriteTranslateDataToLocal()
def applyChange(self):
pass
t = Test()
t.Show()
t.init()
t.Export()