import openpyxl from openpyxl.styles import Font, PatternFill # 打开Excel文件 workbook = openpyxl.load_workbook('your_file.xlsx') # 选择工作表 worksheet = workbook['your_sheet'] # 获取表格比例列数据 data = [] for row in worksheet.iter_rows(min_row=2, values_only=True): value = row[1] / row[2] # 第2列除以第3列得到比例 data.append(value) # 设置目标比例 target_ratio = 0.8 # 遍历比例数据,并标记高于目标比例的单元格 for i, value in enumerate(data): cell = worksheet.cell(row=i+2, column=4) # 在第4列写入标记 if value > target_ratio: # 设置黄色字体和红色单元格背景 font = Font(color='FFFF00') # 黄色字体 fill = PatternFill('solid', fgColor='FF0000') # 红色单元格背景 cell.font = font cell.fill = fill # 保存Excel文件 workbook.save('your_file.xlsx') 代碼報錯TypeError: unsupported operand type(s) for /: 'str' and 'str'
时间: 2024-03-28 10:41:54 浏览: 163
这个错误提示表示你在代码中使用了字符串类型的变量进行了除法运算,而字符串类型不能用于数学计算。你需要确保在进行除法运算之前,将字符串类型的变量转换为数值类型(比如整数或者浮点数)。你可以使用 `float()` 函数将字符串转换为浮点数,或者使用 `int()` 函数将字符串转换为整数。例如,你可以修改代码中的这一行:
```
value = row[1] / row[2]
```
为:
```
value = float(row[1]) / float(row[2])
```
这样就能够将字符串类型的变量转换为浮点数类型,从而避免这个错误。
相关问题
import numpy as np import pandas as pd import openpyxl from openpyxl.styles import numbers df_csv = pd.read_csv(r'Permance_a.csv', index_col=0, encoding='utf-8') df_csv.to_excel(r'Permance_a.xlsx') # 源表格和目标表格的文件名 source_file = u'Permance_a.xlsx' target_file = u'Permance2.xlsx' # 要复制的单元格位置 source_start_row = 2 # 开始行 source_start_col = 5 # 开始列 source_end_row = 11 # 结束行 source_end_col = 8 # 结束列 # 要覆盖的单元格位置 target_start_row = 7 # 开始行 target_start_col = 3 # 开始列 target_end_row = 16 # 结束行 target_end_col = 6 # 结束列 # 打开两个工作簿 wb1 = openpyxl.load_workbook(source_file) ws1 = wb1.active wb2 = openpyxl.load_workbook(target_file) ws2 = wb2.active # 将源表格的数据覆盖到目标表格中 for i in range(source_start_row, source_end_row + 1): for j in range(source_start_col, source_end_col + 1): cell1 = ws1.cell(row=i, column=j) cell2 = ws2.cell(row=i + target_start_row - source_start_row, column=j + target_start_col - source_start_col) cell2.value = cell1.value # 保存目标表格 wb2.save(target_file) 生成目标文件的单元格显示:此单元格中的数字为文本格式,或者其前面有撇号,修改以上代码解决该问题
可以在将数据覆盖到目标表格之前,先将目标表格中相关单元格的格式设置为数字格式,可以使用openpyxl.styles中的numbers模块来实现。
修改后的代码如下:
```
import numpy as np
import pandas as pd
import openpyxl
from openpyxl.styles import numbers
df_csv = pd.read_csv(r'Permance_a.csv', index_col=0, encoding='utf-8')
df_csv.to_excel(r'Permance_a.xlsx')
# 源表格和目标表格的文件名
source_file = u'Permance_a.xlsx'
target_file = u'Permance2.xlsx'
# 要复制的单元格位置
source_start_row = 2 # 开始行
source_start_col = 5 # 开始列
source_end_row = 11 # 结束行
source_end_col = 8 # 结束列
# 要覆盖的单元格位置
target_start_row = 7 # 开始行
target_start_col = 3 # 开始列
target_end_row = 16 # 结束行
target_end_col = 6 # 结束列
# 打开两个工作簿
wb1 = openpyxl.load_workbook(source_file)
ws1 = wb1.active
wb2 = openpyxl.load_workbook(target_file)
ws2 = wb2.active
# 将目标表格中相关单元格的格式设置为数字格式
for i in range(target_start_row, target_end_row + 1):
for j in range(target_start_col, target_end_col + 1):
cell = ws2.cell(row=i, column=j)
cell.number_format = numbers.FORMAT_NUMBER
# 将源表格的数据覆盖到目标表格中
for i in range(source_start_row, source_end_row + 1):
for j in range(source_start_col, source_end_col + 1):
cell1 = ws1.cell(row=i, column=j)
cell2 = ws2.cell(row=i + target_start_row - source_start_row, column=j + target_start_col - source_start_col)
cell2.value = cell1.value
# 保存目标表格
wb2.save(target_file)
```
这样就可以保证生成的目标文件中的单元格都是数字格式了。
#!/bin/env python import numpy as np import pandas as pd import openpyxl from openpyxl.styles import numbers df_csv = pd.read_csv(r'Permance_a.csv',index_col=0,encoding='utf-8') df_csv.to_excel(r'Permance_a.xlsx') # 源表格和目标表格的文件名 source_file = u'Permance_a.xlsx' target_file = u'Permance2.xlsx' # 要复制的单元格位置 source_start_row = 2 # 开始行 source_start_col = 5 # 开始列 source_end_row = 11 # 结束行 source_end_col = 8 # 结束列 # 要覆盖的单元格位置 target_start_row = 7 # 开始行 target_start_col = 3 # 开始列 target_end_row = 16 # 结束行 target_end_col = 6 # 结束列 # 打开两个工作簿 wb1 = openpyxl.load_workbook(source_file) ws1 = wb1.active wb2 = openpyxl.load_workbook(target_file) ws2 = wb2.active # 将源表格的数据覆盖到目标表格中 for i in range(source_start_row, source_end_row + 1): for j in range(source_start_col, source_end_col + 1): cell1 = ws1.cell(row=i, column=j) cell2 = ws2.cell(row=i + target_start_row - source_start_row, column=j + target_start_col - source_start_col) cell2.value = cell1.value # 保存目标表格 wb2.save(target_file) 将以上代码生成的目标表格中单元格右上角绿色标删除,并输出代码
以下是删除单元格右上角绿色标的代码:
```
from openpyxl.comments import Comment
# 打开目标表格
wb = openpyxl.load_workbook(target_file)
ws = wb.active
# 遍历要删除标记的单元格
for i in range(target_start_row, target_end_row + 1):
for j in range(target_start_col, target_end_col + 1):
cell = ws.cell(row=i, column=j)
if cell.comment:
# 删除该单元格的批注
cell.comment = None
# 保存目标表格
wb.save(target_file)
```
执行完上述代码后,目标表格中的单元格右上角绿色标记将被删除。
阅读全文