openpyxl将行追加到列表,然后将列表复制到新表

时间:2020-05-21 15:29:17

标签: python openpyxl

我需要在迭代中复制行值,然后将值复制到新创建的工作表中-一切正常,没有问题,但是我需要添加其他代码-请参见注释的代码

import os, openpyxl

os.chdir('d:\\python')
xlFile = 'Data01.xlsx'

wb = openpyxl.load_workbook(xlFile)

sheet = wb['Sheet1']

salesperson = []
saleslist = []

for i in range(sheet.max_row):
    i += 1
    cellVal = sheet.cell(i, 65).value
    #rowVal = row value
    if not cellVal.startswith(' '):
         if cellVal not in salesperson:
             salesperson.append(cellVal)
             #saleslist.append(rowVal)

for cellVal in salesperson:
    wb.create_sheet(cellVal)
    saleSheet = wb[cellVal]
    #copy saleslist items to the newly created sheet

wb.save('file2.xlsx')

Turn Unique Values into sheetnames Save their respective row vales to the new sheets

1 个答案:

答案 0 :(得分:0)

啊,所以可以做到这一点的一种方法是:

  1. 遍历行
  2. 检查B列中的单元格值
  3. 如果没有该名称的工作表->创建工作表并添加数据
  4. 否则将其添加到正确的工作表to max_row + 1

现在我们可以将其翻译为代码:

from openpyxl import load_workbook
from openpyxl.utils import get_column_letter

wb = load_workbook('example.xlsx')
ws = wb.active
temp_ws = None

for row_number, row_cells in enumerate(wb.iter_rows(min_row=2), 1):
    # Iterate over rows skiping the header one
    name = ws[f'B{row_number}'].value  # Find the item in the row
    if name not in wb.sheetnames:
        # Check if item doesn't have a sheet and create one
        temp_ws = wb.create_sheet(name)

    else:
        # If item has a sheet add a new row to that sheet
        temp_ws = wb[name]

    if temp_ws.max_row != 1:
        # If max row is one (empty sheet) write to it
        new_row = temp_ws.max_row+1

    else:
        # select a new empty row
        new_row = temp_ws.max_row

    for culomn, cell in enumerate(row_cells, 1):
        # Add data to new row
        ws_temp.cell(row=new_row, column=culomn, value=cell.value)

wb.save('example')

请注意,如果之前已经修改过工作表,这将不起作用,因为max_row可能不是第一行,而是None的第一行。如果需要,您可以对此进行调整。

相关问题