import openpyxl
(相关资料图)
import re
dataBook = openpyxl.load_workbook("[file name]")
name_list = dataBook.sheetnames
# 将特定block数据存储为list
def getlist(sheetname, colmin, colmax, rowmin, rowmax):
listname = []
for i in range(rowmin, rowmax): # 获取特定列数据
for j in range(colmin, colmax): # 获取特定行数据
a = sheetname.cell(row=i, column=j).value
listname.append(a)
return listname
# 在Excel中写入column
def writeExcelColumn(sheetname, listname, colNum):
for i in range(len(listname)):
sheetname.cell(i+1, colNum, listname[i])
# 仅保留list中的数值
def numOnlyFilter(listname):
m = [] # a list for the entire leakage data
for i in range(len(listname)):
m.append(listname[i])
if m[i] != None:
m[i] = re.sub(r"([^.\d\-\n\s]+)", "", str(listname[i]))
return m
# 将目标 column 以 \n 分为3列
def divideCols(Colname, ColIdx, col1, col2, col3):
dlist = []
for cell in list(worksheet.columns)[ColIdx]:
a = cell.value
dlist.append(a)
print(dlist)
for i in range(1, worksheet.max_row+1):
if "\n" in str(dlist[i-1]):
worksheet[col1 + str(i)] = worksheet[Colname + str(i)].value.split('\n')[0]
worksheet[col2 + str(i)] = worksheet[Colname + str(i)].value.split('\n')[1]
worksheet[col3 + str(i)] = worksheet[Colname + str(i)].value.split('\n')[2]
else:
worksheet[col1 + str(i)] = worksheet[Colname + str(i)].value
worksheet[col2 + str(i)] = worksheet[Colname + str(i)].value
worksheet[col3 + str(i)] = worksheet[Colname + str(i)].value
# -----------------------------------------------MOSFET_SOA--------------------------------------------------------------
worksheet = dataBook[name_list[0]]
m_list = worksheet.merged_cells # 合并单元格的位置信息,可迭代对象(单个是一个'openpyxl.worksheet.cell_range.CellRange'对象),print后就是excel坐标信息
cr = []
# breakpoint()
for m_area in m_list:
# 合并单元格的起始行坐标、终止行坐标
r1, r2, c1, c2 = m_area.min_row, m_area.max_row, m_area.min_col, m_area.max_col
# 纵向合并单元格的位置信息提取出
if r2 - r1 > 0:
cr.append((r1, r2, c1, c2))
# print('Merged cells: %s' % str(m_area))
# print(cr)
# 把合并单元格的信息提取出再拆分
for r in cr:
if r[2] > 12:
worksheet.unmerge_cells(start_row=r[0], end_row=r[1],
start_column=r[2], end_column=r[3])
for row in range(r[0], r[1]):
worksheet.cell(row=row+1, column=r[3], value=worksheet.cell(r[0], r[3]).value)
Gox = getlist(worksheet, 13, 14, 1, worksheet.max_row+1)
NBTI = getlist(worksheet, 14, 15, 1, worksheet.max_row+1)
leakage = getlist(worksheet, 15, 16, 1, worksheet.max_row+1)
m1 = numOnlyFilter(Gox)
m2 = numOnlyFilter(NBTI)
m3 = numOnlyFilter(leakage)
writeExcelColumn(worksheet, m1, 13)
writeExcelColumn(worksheet, m2, 14)
writeExcelColumn(worksheet, m3, 15)
temp = getlist(worksheet, 13, 16, 1, worksheet.max_row+1) # 用来判断是否分列的temp list
if "\n" in temp[2]:
worksheet.insert_cols(idx=14, amount=3)
worksheet.insert_cols(idx=18, amount=3)
worksheet.insert_cols(idx=22, amount=3)
divideCols('U', 20, 'V', 'W', 'X')
divideCols('Q', 16, 'R', 'S', 'T')
divideCols('M', 12, 'N', 'O', 'P')
worksheet.delete_cols(idx=21, amount=1)
worksheet.delete_cols(17, 1)
worksheet.delete_cols(13, 1)
print("Max column no. now = ", worksheet.max_column)
# limit flatten for length
lengthList = getlist(worksheet, 6, 7, 1, worksheet.max_row+1)
L = [] # a list for the post Length data
for i in range(len(lengthList)):
L.append(lengthList[i])
if L[i] != None:
L[i] = re.sub(r"[^.\d\<]+", " ", str(lengthList[i]))
if "<" in L[i]:
L[i] = re.sub(r"[^.\d]+", " ", str(lengthList[i]))
a = re.search(r"[.\d]+$", L[i])
b = float(a.group()) - 0.001
L[i] = re.sub(r"[.\d]+$", str(b), L[i])
writeExcelColumn(worksheet, L, 6)
# ------------------------------------------------Vt_PVT----------------------------------------------------------------
worksheet1 = dataBook[dataBook.sheetnames[3]]
aList = []
for cell in list(worksheet1.rows)[0]: # 获取特定行数据
print(cell.value, end=" ")
a = cell.value
aList.append(a)
# print()
# print(aList)
# 检测并删除第一行中每格第一位含有的 “_” 字符
newrow1 = ""
n = 0 # 被删除的字符位置
n1 = 0
string = ""
bList = [] # 用来存放替换后的第一行数据
cList = [] # 记录被替换单元格位置
for k in range(0, len(aList)):
for i in range(0, len(aList[k])):
string = aList[k]
if string[0] == "_":
n1 = k
cList.append(n1)
if i != n:
newrow1 = newrow1 + string[i]
newrow1 = newrow1 + " "
def Convert(string1): # convert string to a list
li = list(string1.split(" "))
return li
bList = Convert(newrow1)
# print(bList)
for i in range(0, len(aList)): # 合并为新的list
if i in cList:
aList[i] = bList[i]
# print(aList)
for i in range(worksheet1.max_column):
worksheet1.cell(1, i+1, aList[i])
dataBook.save('[file name]')