miduo_client/data_execl/excelTool/main.py

309 lines
9.7 KiB
Python
Raw Normal View History

2020-07-06 10:09:45 +08:00
# -*- coding: UTF-8 -*-
2020-07-05 19:21:15 +08:00
from xlutils import copy
2020-06-18 20:39:29 +08:00
import xlwt
import xlrd
2020-07-06 10:09:45 +08:00
import openpyxl
2020-07-06 11:58:59 +08:00
import os, sys
2020-07-06 10:09:45 +08:00
import shutil
2020-06-18 20:39:29 +08:00
#
import sys
reload(sys)
sys.setdefaultencoding('utf8')
# test
class Test():
2020-07-05 19:21:15 +08:00
# excel line config
2020-06-18 20:39:29 +08:00
_ExportConfigXlsx = os.getcwd() + '/ExportConfig.xlsx'
_ExportConfig = {}
2020-07-05 19:21:15 +08:00
# orginal data
excelFilePath = os.getcwd() + '/../base_data/'
2020-06-18 20:39:29 +08:00
_col_offset = 6
2020-07-05 19:21:15 +08:00
# translate data
_TranslateData = {}
_TranslatePath = os.getcwd() + '/../Language_data/'
_TranslateName = "LanguageXlsx"
_TranslateTitle = ['original', 'change', 'tchinese', 'english', 'korean']
2020-06-18 20:39:29 +08:00
2020-07-06 10:09:45 +08:00
# out path
_TranslateOutPath = os.getcwd() + '/../'
2020-06-18 20:39:29 +08:00
2020-07-05 19:21:15 +08:00
def init(self):
2020-07-06 10:09:45 +08:00
print("*********************")
2020-07-05 19:21:15 +08:00
print("init")
2020-06-18 20:39:29 +08:00
self.LoadExportConfig()
2020-07-05 19:21:15 +08:00
self.LoadTranslateData()
print("init done...")
2020-07-06 10:09:45 +08:00
print("*********************")
2020-07-05 19:21:15 +08:00
####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
# English line to num line
2020-06-18 20:39:29 +08:00
def ColToNum(self, colStr):
i = 0
l = len(colStr)
num = 0
while i < l:
2020-06-23 18:36:24 +08:00
num += ((ord(colStr[l - i - 1]) - 64) * (26 ** i))
2020-06-18 20:39:29 +08:00
i = i + 1
2020-06-23 18:36:24 +08:00
return num - 1
2020-06-18 20:39:29 +08:00
2020-07-05 19:21:15 +08:00
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
2020-06-18 20:39:29 +08:00
2020-07-05 19:21:15 +08:00
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)
def CreateEmptyTranslateItem(self):
o = {}
for k in self._TranslateTitle:
o[k] = ""
o["pathData"] = {}
return o
# clear all path
def ClearTranslateDataPath(self):
2020-07-06 10:09:45 +08:00
print("clear path...")
2020-07-05 19:21:15 +08:00
for ol in self._TranslateData:
self._TranslateData[ol]["pathData"] = {}
# Add a new data
2020-07-06 10:09:45 +08:00
def AddTranslateData(self, content, fileName, colName, rowNum):
2020-07-05 19:21:15 +08:00
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'
2020-06-18 20:39:29 +08:00
_workBook = xlwt.Workbook(encoding='utf-8')
2020-07-05 19:21:15 +08:00
_workSheet = _workBook.add_sheet(self._TranslateName)
2020-06-18 20:39:29 +08:00
2020-07-05 19:21:15 +08:00
# title
2020-06-18 20:39:29 +08:00
_titleIndex = 0
2020-07-05 19:21:15 +08:00
for _content in self._TranslateTitle:
2020-06-18 20:39:29 +08:00
_workSheet.write(0, _titleIndex, _content)
_titleIndex += 1
2020-07-05 19:21:15 +08:00
# 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
2020-06-23 18:36:24 +08:00
# path
2020-07-05 19:21:15 +08:00
for p in self.PathDataToStr(self._TranslateData[ol]["pathData"]):
_workSheet.write(_rIndex, _cIndex, str(p))
_cIndex += 1
_rIndex += 1
2020-06-18 20:39:29 +08:00
_workBook.save(_savePath)
print("Write Done")
2020-07-05 19:21:15 +08:00
def WriteXlsxDataByCol(self, content, path, fileName, colName, rowNums):
_savePath = path + fileName +'.xlsx'
2020-07-06 10:56:55 +08:00
# _rBook = xlrd.open_workbook(_savePath)
_wBook = openpyxl.load_workbook(_savePath)#copy.copy(_rBook)
_workSheet = _wBook.worksheets[0]
2020-07-05 19:21:15 +08:00
_colNum = self.ColToNum(colName)
for row in rowNums:
2020-07-06 10:56:55 +08:00
_workSheet.cell(row + 1, _colNum + 1, content)
2020-07-06 10:09:45 +08:00
_wBook.save(_savePath)
2020-07-05 19:21:15 +08:00
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:
2020-07-06 10:09:45 +08:00
_content = str(_cData[_index]).decode('utf-8')
2020-07-05 19:21:15 +08:00
if _content and _content != "":
self.AddTranslateData(_content, fileName, colName, _index)
def Export(self):
2020-07-06 10:09:45 +08:00
print("*********************")
print("Start Export...")
self.ClearTranslateDataPath()
2020-07-05 19:21:15 +08:00
for _index in range(len(self._ExportConfig)):
_row = self._ExportConfig[_index]
2020-07-06 10:09:45 +08:00
print("*Read:"+_row[0])
2020-07-05 19:21:15 +08:00
for i in range(len(_row)):
if i != 0 and _row[i] != "":
self.ExportRead(self.excelFilePath, _row[0], _row[i])
2020-07-06 10:09:45 +08:00
self.WriteTranslateDataToLocal()
print("Export Done!")
print("*********************")
2020-07-05 19:21:15 +08:00
2020-07-06 10:09:45 +08:00
def ReplaceChanges(self):
# ReExport
self.Export()
# replace
print("*********************")
print("replace changes...")
_replace = 0
for key in self._TranslateData:
_tData = self._TranslateData[key]
_original = _tData['original']
_change = _tData['change']
_pathData = _tData['pathData']
if _change.strip() != "" and _pathData != {} and _original != _change:
print("*Replace "+ _change +" to "+ _original)
for fl in _pathData:
l = fl.split('|')
self.WriteXlsxDataByCol(_change, self.excelFilePath, l[0], l[1], _pathData[fl])
_replace += 1
# ReExport again
if _replace > 0:
self.Export()
else:
print("no available changes")
print("replace done!")
print("*********************")
def DoTranslate(self, language, path, fileName, colName):
_colNum = self.ColToNum(colName)
_filePath = path + fileName + ".xlsx"
_rBook = xlrd.open_workbook(_filePath)
_rSheet = _rBook.sheet_by_index(0)
2020-07-06 10:56:55 +08:00
_wBook = openpyxl.load_workbook(_filePath)#copy.copy(_rBook)
_wSheet = _wBook.worksheets[0]
2020-07-06 11:58:59 +08:00
print(fileName + " " + str(_colNum))
2020-07-06 10:09:45 +08:00
_cData = _rSheet.col_values(_colNum)
for _index in range(len(_cData)):
if _index >= self._col_offset:
_content = str(_cData[_index]).decode('utf-8')
if _content and _content != "":
if self._TranslateData.has_key(_content):
_translateContent = self._TranslateData[_content][language].decode('utf-8')
if _translateContent and _translateContent != "":
2020-07-06 10:56:55 +08:00
_wSheet.cell(_index + 1, _colNum + 1, _translateContent)
2020-07-06 10:09:45 +08:00
else:
print("no ["+ language +"] translate for :" + _content)
_wBook.save(_filePath)
2020-07-05 19:21:15 +08:00
2020-07-06 10:09:45 +08:00
def Translate(self, language):
_absPath = os.path.abspath(os.path.join(os.path.dirname("__file__"),os.path.pardir))
_path = _absPath + "/base_data_" + language
if os.path.exists(_path):
shutil.rmtree(_path)
shutil.copytree(_absPath + "/base_data", _path)
2020-07-05 19:21:15 +08:00
2020-07-06 10:09:45 +08:00
for _index in range(len(self._ExportConfig)):
_row = self._ExportConfig[_index]
for i in range(len(_row)):
if i != 0 and _row[i] != "":
self.DoTranslate(language, _path+"/", _row[0], _row[i])
2020-07-05 19:21:15 +08:00
2020-06-18 20:39:29 +08:00
t = Test()
2020-07-05 19:21:15 +08:00
t.init()
2020-07-06 11:58:59 +08:00
if sys.argv[1] == '-e':
t.Export()
elif sys.argv[1] == '-r':
t.ReplaceChanges()
elif sys.argv[1] == '-t':
t.Translate(sys.argv[2])
pass
2020-07-06 10:09:45 +08:00
# t.Export()
2020-07-06 10:56:55 +08:00
# t.ReplaceChanges()
# t.Translate("english")