Синтаксис xlwings для n-строк и определенных столбцов с выводом на новый лист

Я пытался найти хороший ресурс для синтаксиса, необходимого для xlwings, но безуспешно. Я пытаюсь создать программу, которая будет повторять n строк данных и выводить определенную информацию на новый лист. Вот фрагмент алгоритма. Если вы можете указать мне хорошую ссылку или просто протянуть руку, я был бы признателен.

data = number of rows in worksheet #either input the number manually or automate 

for row n to data: #start at row 1 and loop through each line of data

    axles = get row n, column M data #retrieve data in column M 
    if axles<2: #Test the data from column M for validity 
        continue #return to the for loop and start on next line

    distance = get row n, column Q data #retrieve data in column Q 
    if distance < 100 or distance > 300: #test the data from column Q for validity
        continue #return to the for loop and start on next line

    weight = get row n, column P data #retrieve data in column P 
    print weight into row n, column A on sheet 2 #display output on a new sheet

person Crystal    schedule 11.02.2015    source источник


Ответы (2)


xlwings — довольно классный интерфейс для превосходства — объект Range будет выполнять тяжелую работу для вашего приложения. В зависимости от того, собраны ли ваши столбцы вместе, вы можете использовать методы table или vertical для чтения всех вместе или по столбцам. Вот два эквивалентных подхода для простого набора данных в Excel:

axles   distance    weight
1       150         1.5
2       200         2
1       250         2.5
2       300         3
4       350         3.5

Код питона:

from xlwings import Workbook, Range

wb=Workbook(r'C:\\Full\\Path\\to\\Book1.xlsx')

# Method 1:
# if your table is all together read it in at once:
# read all data in as table
allrows=Range('Sheet1','A2').table.value 
for rownum, row in enumerate(allrows):
    axles=row[0]
    if axles<2:
        continue
    distance=row[1]
    if distance< 100 or distance>300:
        continue
    weight = row[2]
    # +2 to correct for python indexing and header row
    Range('Sheet2',(rownum+2,1)).value=weight 

# Method 2:
# if your columns are separated read them individually:
# read all data in as columns
axles=Range('Sheet1','A2').vertical.value 
distance=Range('Sheet1','B2').vertical.value
weight=Range('Sheet1','C2').vertical.value
# in case the columns have different lengths, look at the shortest one
for rownum in range(min(len(axles),len(distance),len(weight))):
    if axles[rownum]<2:
        continue
    if distance[rownum]< 100 or distance[rownum]>300:
        continue
    # +2 to correct for python indexing and header row
    Range('Sheet2',(rownum+2,1)).value=weight[rownum] 

В любом случае вторая и четвертая точки данных будут записаны на Лист 2 в тех же строках, что и на Листе 1.

person chepyle    schedule 04.04.2015

xlwings — это пакет для Python языка программирования. Для изучения Python вы можете начать с официального сайта, например: https://www.python.org/about/gettingstarted/

person Felix Zumstein    schedule 12.02.2015