【发布时间】:2017-12-22 03:33:41
【问题描述】:
我正在尝试将具有特定值的行复制到新工作表中。在查看下面列出的参考资料时,我能够确定如何使用 ws.append 进行复制,但是这在脚本中无法正常运行。我想做的是遍历 wb,如果它有一定的值,创建另一个工作表并将该行复制到该工作表。我将不胜感激这方面的任何帮助,因为我没有产生预期的结果。我唯一要做的就是添加一些 elif 条件以及 else ,但它没有遍历工作表并复制预期的结果。它正在复制其中一行而不是每个条件的预期行,并将其复制到与 ws 同名的新文件,而不是在条件中创建的新工作表。
from openpyxl import load_workbook
from openpyxl import Workbook
from openpyxl.utils import range_boundaries
from sys import argv
script, inpath, outpath = argv
min_col, min_row, max_col, max_row = range_boundaries("A:M")
wb = load_workbook(inpath)
print("File Loaded")
ws = wb.get_sheet_by_name("value")
check = 0 # == A
for row in ws.iter_rows():
if row[check].value == 'value':
try:
ws1 = wb.create_sheet("value", 1)
# Copy Row Values
# We deal with Tuple Index 0 Based, so min_col must have to be -1
ws1.append((cell.value for cell in row[min_col-1:max_col]))
except:
print("words")
elif row[check].value == 'value':
try:
ws2 = wb.create_sheet("value", 2)
# Copy Row Values
# We deal with Tuple Index 0 Based, so min_col must have to be -1
ws2.append((cell.value for cell in row[min_col-1:max_col]))
except:
print("moar words")
elif row[check].value == 'value':
try:
ws3 = wb.create_sheet("value", 3)
# Copy Row Values
# We deal with Tuple Index 0 Based, so min_col must have to be -1
ws3.append((cell.value for cell in row[min_col-1:max_col]))
except:
print("words")
else:
try:
ws4 = wb.create_sheet("value", 4)
# Copy Row Values
# We deal with Tuple Index 0 Based, so min_col must have to be -1
ws4.append((cell.value for cell in row[min_col-1:max_col]))
except:
print("words")
wb.save(outpath + '.xlsx')
如果我运行以下命令
for row in ws.iter_rows():
if row[check].value == 'Info':
try:
#ws1.cell(row=1, column=1).value = ws1.cell(row=1, column=1).value
ws1 = wb.create_sheet("Info", 1)
ws1 = wb.active
# Copy Row Values
# We deal with Tuple Index 0 Based, so min_col must have to be -1
ws1.append((cell.value for cell in row[min_col-1:max_col]))
except:
print("Words")
wb.save(outpath + '.xlsx')
它运行我需要的查询,在这种情况下,每一行都包含单词 Info,但它不会创建新工作表,也不会将值附加到新工作表。它保持与原始工作表名称相同的工作表名称。添加 elif 或 else 语句无法正常工作。当这一切一起运行时。它只是在原始 excel 文件中创建大量带有标题 Info 和行号的工作表。我已将 if 语句中的值更改为 info 以外的值,它仍然输出包含 Info 的行。
参考:Openpyxl: How to copy a row after checking if a cell contains specific value
【问题讨论】:
标签: python-3.x openpyxl