python openpyxl module operates excel form

In work, it is inevitable that you will encounter scenarios where you need to operate on excel files. If you do some repetitive operations manually, it will be particularly troublesome. Although sometimes it can be solved with formulas in excel, some scenarios cannot be solved by formulas.

The following is a problem encountered by a friend at work, find me to see if it can be solved with python. I wrote a program for him, which easily solved his problem and saved him a day of work.

Before writing the program, you need to install the openpyxl module. For specific installation, you can use the following command:

pip3 install openpyxl

The specific code is as follows: 

from openpyxl import load_workbook
import openpyxl

workbook = load_workbook("source.xlsx")

sheet = workbook["Sheet1"]

# 用来拷贝几个案例
def process1(sourceRow, targetRow, targetSheet, number):
    for n in range(number):
        
        # 公共信息的填写
        for i in range(1,11):
            targetSheet.cell(targetRow, i).value = sheet.cell(sourceRow,i).value
        
        # 填写学校内案例编号
        targetSheet.cell(targetRow, 11).value = n+1

        baseCol = 12
        # 两位专家的填写
        targetSheet.cell(targetRow, baseCol).value = sheet.cell(sourceRow, 14).value
        targetSheet.cell(targetRow, baseCol+7).value = sheet.cell(sourceRow, 75).value

        # 评价结论的填写
        for i in range(6):
            targetSheet.cell(targetRow, i+1+baseCol).value = sheet.cell(sourceRow,i+15+6*n).value
            targetSheet.cell(targetRow, i+1+baseCol+7).value = sheet.cell(sourceRow,i+76+6*n).value

        # 判断专家的案例顺序是否匹配
        if targetSheet.cell(targetRow, 1+baseCol+1).value == targetSheet.cell(targetRow, 1+baseCol+7+1).value:
            targetSheet.cell(targetRow, 1+baseCol+7+6).value = "匹配"
        else:
            targetSheet.cell(targetRow, 1+baseCol+7+6).value = "不匹配"

        

        targetRow += 1

    return targetRow

newWb = openpyxl.Workbook()

newSheet = newWb.worksheets[0]

targetRow = 1

# 填写表头
for col in range(1, 11):
    newSheet.cell(targetRow, col).value = sheet.cell(2,col).value

# 填写表头其他信息
newSheet.cell(targetRow, 11).value = "学校内案例编号"
newSheet.cell(targetRow, 12).value = "专家1"
newSheet.cell(targetRow, 13).value = "案例评审表"
newSheet.cell(targetRow, 14).value = "案例名称"
newSheet.cell(targetRow, 15).value = "案例主题"
newSheet.cell(targetRow, 16).value = "若主题选择其他,主题为"
newSheet.cell(targetRow, 17).value = "案例等第"
newSheet.cell(targetRow, 18).value = "案例评价意见"

newSheet.cell(targetRow, 19).value = "专家2"
newSheet.cell(targetRow, 20).value = "案例评审表"
newSheet.cell(targetRow, 21).value = "案例名称"
newSheet.cell(targetRow, 22).value = "案例主题"
newSheet.cell(targetRow, 23).value = "若主题选择其他,主题为"
newSheet.cell(targetRow, 24).value = "案例等第"
newSheet.cell(targetRow, 25).value = "案例评价意见"

targetRow += 1

# 对所有的行进行处理
for row in range(3, sheet.max_row+1):
    targetRow = process1(row, targetRow, newSheet, sheet.cell(row, 4).value)

newWb.save('result.xlsx')

print("######运行成功,请查看result文件#######")

Life is short, use python~~~

Guess you like

Origin blog.csdn.net/daida2008/article/details/124972729