Использование Openpyxl для создания нескольких пользовательских таблиц - PullRequest
0 голосов
/ 03 марта 2020

Я пытаюсь создать серию электронных таблиц для моего офиса на основе критериев из более крупной электронной таблицы, которая у нас есть. Это очень легко сделать вручную, но, поскольку я новичок в программировании, я подумал, что это может быть забавным упражнением, чтобы посмотреть, смогу ли я сделать это с python с использованием модуля Openpyxl.

Basi c проблема: у меня есть список стран, в которые путешествуют люди, и у меня есть строки с именами людей и другими данными, включая название страны, в которую путешествует каждый человек. Страна, в которую собирается каждый человек, находится в первом столбце. Для каждой страны я хочу создать отдельную рабочую книгу , которая собирает ряд данных для каждого человека, направляющегося в эту страну. Для других целей в моем офисе каждый список должен быть сохранен как отдельный файл .xlsx, а не просто как новый лист в одной книге.

Я очень новичок в программировании, но вот как я пытаюсь это сделать:

import openpyxl
from openpyxl import load_workbook
from openpyxl import Workbook
def create_roster(Country_name):
    roster_book = Workbook()
    ws2 = roster_book.active
    for row in cell_rows:
        if row[0] == Country_name:
            ws2.append(row)
    roster_book.save('C:\\....\\{}.xlsx'.format(Country_name))


countries = ('Au','Brazil','Costa R','Cuba','France','Germ','Ghana','Greece','Hungary','Italy','Japan','Korea','Peru','Romania','S.A.','Switz','Thai')
wb = load_workbook('C:\\....\\Big_list.xlsx', data_only=True)
ws = wb.active
cell_rows = []
for row in ws.values:
    cell_rows.append(tuple(row))

for country in countries:
    create_roster(country)

Когда я запускаю этот код, появляется сообщение об ошибке, которого я никогда не получал раньше появляется сообщение «Исключение не обработано: получено недопустимое входное значение типа , ожидаемая строка или элемент."

Поиск этого сообщения об ошибке пока не был для меня плодотворным.

Что более необычно, так это то, что мне не показывают номер строки, из которой обычно возникает ошибка (я использую Visual Studio 2019), и вместо этого модуль IDE отображает текст «Кадр не в модуле. Текущий кадр стека не был найден в загруженном модуле. Источник не может быть показан для этого местоположения.»

Еще один бит соответствующей информации об этой ошибке находится в папке, где я пытаюсь чтобы создать все эти файлы .xlsx, первый в моем списке, Au.xlsx, появляется в папке, в которую я пытаюсь сохранить их все. Но когда я пытаюсь открыть этот файл с помощью Excel, он не читается.

Я не могу сказать, что не так с тем, как я пытаюсь это сделать. Это неправильный способ go при попытке создать несколько пользовательских файлов .xlsx? Любое понимание или совет здесь будет высоко ценится.

1 Ответ

0 голосов
/ 03 марта 2020
df = pd.read_excel("Filename.xlsx")



#make a list of all unique country names
    # or you can just read that specific cloumn and remove duplicate and pass it into a list 
    list = [All unique country names]


for i in list:
    # apply str func to I/P for String Comparsion
    i = str(i)
    leng = len(i)

    try:
        #make slice of dataframe containing only country = i
        df1= df[df.iloc[:, column_number_of_countries_column].str[:leng]== i]
    except:
        # pass if country does not exists
        continue

    #save df slice to excel sheet with name as Country
    df1.to_excel(i+".xlsx", index= False)
    print(" Sheet {} saved successfully!".format(i))
    print("File Saved!")
...