import openpyxl
fwb=openpyxl.load_workbook('wb.xlsx')
sheet=fwb['Sheet1']
sheet['A9']
for i in range(9,sheet.max_row,1):
items=sheet.cell(row=i, column=1).value
number1=sheet.cell(row=i, column=3).value
number2=sheet.cell(row=i, column=4).value
print(items, number1, number2)
我的问题是我希望项目列表位于一列之下,就像预期的输出一样。因此,我理想地希望 items = sheet.chell(row = i,column = 1 AND 2)。有没有办法实现这个目标?非常感谢adv
答案 0 :(得分:0)
我将从代码中猜测工作表的结构,因为您没有指定哪些范围包含哪些数据。
这样的事可能适合你。 您可能需要使用+/- 1调整某些值,具体取决于标题等。
row_base1=len(sheet['A'])
nrows2=len(sheet['C'])-9
for i in range(1,nrows2):
row1=row_base1+i
row2=8+i
number1=sheet.cell(row=row2, column=3).value
number2=sheet.cell(row=row2, column=4).value
sheet.cell(row=row1, column=1).value=number1
sheet.cell(row=row1, column=2).value=number2
print(items, number1, number2)
nrows2
可能会提供比您实际需要的数字更大的数字,请参阅this。
在这种情况下,您将不得不在循环内添加一些检测方法。
答案 1 :(得分:0)
在openpyxl中,这非常简单:
ws1是您的源工作表 ws2是你的目标工作表
for row in ws1['A':'B']:
ws2.append((c.value for c in row))
for row in ws1['C':'D']:
ws2.append((c.value for c in row))
根据需要调整列
答案 2 :(得分:-1)
您可能会尝试使用pandas,如下所示。如果需要,可以将结果保存到excel文件中。首先运行#pip install xlrd。
import pandas as pd
book1 = pd.ExcelFile('book1.xlsx')
df = pd.read_excel(book1, 'Sheet1')
cols = ['Item', 'Value']
x = df.drop(df.columns[2:], axis=1)
y = df.drop(df.columns[:2], axis=1)
x.columns = cols
y.columns = cols
df2 = pd.concat([x, y], ignore_index=True)
df2.dropna(how='all', inplace=True)
print(df2)
也可以这样做
df2['Index'] = df2.loc[df2['Value'].isnull(), 'Item']
df2.Index.fillna(method='ffill', inplace=True)
df3 = df2.set_index(['Index', 'Item']).dropna()
print(df3)