王大可2000 发表于 2023-4-25 08:28:48

openpyxl之提取列并做预处理

要求:提取Excel文件 一,二,三中的A列与C列,遍历两列的值如有负值处理为正值,并计算处理后的两列值的平均值,作为第三列.(列名为 mean),最后保存为新的excel
{:9_221:} {:9_221:} {:9_221:}

isdkz 发表于 2023-4-25 09:41:39

为了完成此任务,您需要先安装`openpyxl`模块,如果尚未安装,请使用以下命令安装:

pip install openpyxl


然后,您可以使用以下代码来完成任务:

import openpyxl
from openpyxl import Workbook

# 加载工作簿
workbook1 = openpyxl.load_workbook("一.xlsx")
workbook2 = openpyxl.load_workbook("二.xlsx")
workbook3 = openpyxl.load_workbook("三.xlsx")

workbooks =

# 创建一个新的Excel文件来存储结果
result_workbook = Workbook()
result_sheet = result_workbook.active
result_sheet.title = "处理结果"

# 写入列名
result_sheet.cell(row=1, column=1, value="A")
result_sheet.cell(row=1, column=2, value="C")
result_sheet.cell(row=1, column=3, value="mean")

row_counter = 2

for wb in workbooks:
    sheet = wb.active
    max_row = sheet.max_row

    for row in range(2, max_row + 1):
      # 提取A列与C列的值
      a_value = sheet.cell(row=row, column=1).value
      c_value = sheet.cell(row=row, column=3).value

      # 处理负值
      if a_value < 0:
            a_value = abs(a_value)
      if c_value < 0:
            c_value = abs(c_value)

      # 计算平均值
      mean_value = (a_value + c_value) / 2

      # 将结果写入新的Excel文件
      result_sheet.cell(row=row_counter, column=1, value=a_value)
      result_sheet.cell(row=row_counter, column=2, value=c_value)
      result_sheet.cell(row=row_counter, column=3, value=mean_value)

      row_counter += 1

# 保存结果为新的Excel文件
result_workbook.save("结果.xlsx")


这段代码会读取文件一,二,三的A列与C列,处理负值并计算平均值,然后将结果写入一个名为“结果.xlsx”的新Excel文件。您需要将文件名替换为实际的文件名。

王大可2000 发表于 2023-4-25 10:02:33

isdkz 发表于 2023-4-25 09:41
为了完成此任务,您需要先安装`openpyxl`模块,如果尚未安装,请使用以下命令安装:




各自处理一,二,三文件数据,出现
File "C:\code\结果.py", line 21, in <module>
    sheet = wb.active
AttributeError: 'Worksheet' object has no attribute 'active'
是为什么,应如何解决呢

isdkz 发表于 2023-4-25 10:49:46

王大可2000 发表于 2023-4-25 10:02
各自处理一,二,三文件数据,出现
File "C:\code\结果.py", line 21, in
    sheet = wb.active


你的表格文件是什么格式的?你的完整代码又是什么?

王大可2000 发表于 2023-4-25 10:52:54

isdkz 发表于 2023-4-25 10:49
你的表格文件是什么格式的?你的完整代码又是什么?

import openpyxl
from openpyxl import Workbook

# 加载工作簿
workbook = openpyxl.load_workbook("安溪.xlsx")


# 创建一个新的Excel文件来存储结果
result_workbook = Workbook()
result_sheet = result_workbook.active
result_sheet.title = "处理结果"

# 写入列名
result_sheet.cell(row=1, column=1, value="PRE")
result_sheet.cell(row=1, column=2, value="SSH")
result_sheet.cell(row=1, column=3, value="mean")

row_counter = 2

for wb in workbook:
    sheet = wb.active
    max_row = sheet.max_row

    for row in range(2, max_row + 1):
      # 提取S列与T列的值
      a_value = sheet.cell(row=row, column=19).value
      c_value = sheet.cell(row=row, column=20).value

      # 处理负值
      if a_value < 0:
            a_value = abs(a_value)
      if c_value < 0:
            c_value = abs(c_value)

      # 计算平均值
      mean_value = (a_value + c_value) / 2

      # 将结果写入新的Excel文件
      result_sheet.cell(row=row_counter, column=1, value=a_value)
      result_sheet.cell(row=row_counter, column=2, value=c_value)
      result_sheet.cell(row=row_counter, column=3, value=mean_value)

      row_counter += 1

# 保存结果为新的Excel文件
result_workbook.save("安溪结果.xlsx")

isdkz 发表于 2023-4-25 10:54:04

王大可2000 发表于 2023-4-25 10:52
import openpyxl
from openpyxl import Workbook



你不是说有三个excel文件吗?你的代码就只有一个?

王大可2000 发表于 2023-4-25 10:59:24

isdkz 发表于 2023-4-25 10:54
你不是说有三个excel文件吗?你的代码就只有一个?

三个文件分开处理,要求一样

isdkz 发表于 2023-4-25 11:03:04

王大可2000 发表于 2023-4-25 10:59
三个文件分开处理,要求一样

了解,这是处理单个Excel文件的代码。您可以根据需要修改文件名和输出文件名。

import openpyxl
from openpyxl import Workbook

# 加载工作簿
workbook = openpyxl.load_workbook("文件名.xlsx")

# 获取活动工作表
sheet = workbook.active

# 创建一个新的Excel文件来存储结果
result_workbook = Workbook()
result_sheet = result_workbook.active
result_sheet.title = "处理结果"

# 写入列名
result_sheet.cell(row=1, column=1, value="A")
result_sheet.cell(row=1, column=2, value="C")
result_sheet.cell(row=1, column=3, value="mean")

max_row = sheet.max_row

for row in range(2, max_row + 1):
    # 提取A列与C列的值
    a_value = sheet.cell(row=row, column=1).value
    c_value = sheet.cell(row=row, column=3).value

    # 处理负值
    if a_value < 0:
      a_value = abs(a_value)
    if c_value < 0:
      c_value = abs(c_value)

    # 计算平均值
    mean_value = (a_value + c_value) / 2

    # 将结果写入新的Excel文件
    result_sheet.cell(row=row, column=1, value=a_value)
    result_sheet.cell(row=row, column=2, value=c_value)
    result_sheet.cell(row=row, column=3, value=mean_value)

# 保存结果为新的Excel文件
result_workbook.save("处理结果.xlsx")


这段代码会读取一个Excel文件的A列与C列,处理负值并计算平均值,然后将结果写入一个名为“处理结果.xlsx”的新Excel文件。您需要将“文件名.xlsx”替换为实际的文件名,以及将“处理结果.xlsx”替换为您想要的输出文件名。如果您需要处理其他两个文件,只需将此代码复制并修改输入和输出文件名即可。
页: [1]
查看完整版本: openpyxl之提取列并做预处理