openpyxl 是一个用来处理 excel 文件的 python 代码库, 安装什么略过不提, 只说一个简单操作的例子

  1. 例子

有这么一个表

| 高压/低压(实验组) | 高压/低压(对照组) | | ———- | ———- | | 15699 | 11070 | | 12483 | 11971 | | 10378 | 10060 | | 150100 | 11478 | | 150100 | 10974 | | 10076 | 11265 | | 13090 | 13077 | | 174105 | 12172 | | 10985 | 12984 | | 140100 | 12880 | | | 12080 | | | 12273 | | | 12070 | | | 10780 | | | 11070 | | | 11573 | | | 11061 | | | 12780 | | | 11070 | | | 10879 | | | 11478 | | | 11871 |

需要把高压低压分开两列来整, 手动写要累死狗, 上万的数据, 于是祭出Python大法

  1. 烂码
import re

import openpyxl

file = "工作簿2.xlsx"
wb = openpyxl.load_workbook(file)
ws = wb.get_sheet_by_name("Sheet1")

rows = ws.max_row
cols = ws.max_column

p = re.compile("[0-9]+/[0-9]+")

for row in range(1, rows + 1):
    i = 0
    for col in range(1, cols + 1):
        v = str(ws.cell(row=row, column=col).value)
        if re.search(p, v):
            lst = v.split("/")
            ws.cell(row=row, column=col + i + cols).value = int(lst[0])
            i += 1
            ws.cell(row=row, column=col + i + cols).value = int(lst[1])
        else:
            i += 1

ws = wb.get_sheet_by_name("Sheet2")

for row in range(1, rows + 1):
    i = 0
    for col in range(1, cols + 1):
        v = str(ws.cell(row=row, column=col).value)
        if re.search(p, v):
            lst = v.split("/")
            ws.cell(row=row, column=col + i + cols).value = int(lst[0])
            i += 1
            ws.cell(row=row, column=col + i + cols).value = int(lst[1])
        elif re.search(re.compile("[0-9+/.+]"), v):
            lst = v.split("/")
            # print(lst)
            ws.cell(row=row, column=col + i + cols).value = int(lst[0])
            i += 1
            ws.cell(row=row, column=col + i + cols).value = lst[1]
        elif v == "未记录":
            ws.cell(row=row, column=col + i + cols).value = "未记录"
            i += 1
            ws.cell(row=row, column=col + i + cols).value = "未记录"
        else:
            i += 1

wb.save("test.xlsx")

享受生活即可

结果长这样

高压/低压(实验组) 高压/低压(对照组) 高压(实验) 低压(实验) 高压(对照) 低压(对照)
15699 11070 156 99 110 70
12483 11971 124 83 119 71
10378 10060 103 78 100 60
150100 11478 150 100 114 78
150100 10974 150 100 109 74
10076 11265 100 76 112 65
13090 13077 130 90 130 77
174105 12172 174 105 121 72
10985 12984 109 85 129 84
140100 12880 140 100 128 80
12080 120 80
12273 122 73
12070 120 70
10780 107 80
11070 110 70
11573 115 73
11061 110 61
12780 127 80
11070 110 70