#python #excel
#python #excel
Вопрос:
Пожалуйста, помогите, я пытаюсь создать отдельные файлы на основе столбца company, я запустил filescript с помощью CMD,
Этот снимок экрана представляет собой образец моих данных, где каждый день мне приходится фильтровать и создавать новый файл Excel в соответствии с компанией и отправлять электронное письмо, я хочу автоматизировать это с помощью Python:
Я получаю ошибку при разделении в виде файла
C:UserssudarshanDesktop >py filesplit.py
Путь к файлу: C:UserssudarshanDesktopSample.xlsx
Выберите столбец: Компания
Ваши данные будут разделены на основе этих значений Medlife B2B Cargo, TWIN BIRDS, Allied Molded Enclosure Products, JMZ CARGO PVT LTD и создадут 4 файла или листа на основе следующего выбора. Если вы готовы продолжить, пожалуйста, введите «Y» и нажмите enter. Нажмите «N» для выхода. Готов продолжить (Y / N): y
Разделить на разные листы или файл (S / F): F
Ошибка начинается отсюда, и это сообщение об ошибке отображается после ввода «F» для приведенной выше строки.
Traceback (most recent call last):
File "C:UserssudarshanDesktopfilesplit.py", line 49, in <module>
sendtofile(cols)
File "C:UserssudarshanDesktopfilesplit.py", line 24, in sendtofile
df[df[colpick] == i].to_excel("{}/{}.xlsx".format(pth, i), sheet_name=i, index=False)
File "C:pythonlibsite-packagespandascoregeneric.py", line 2188, in to_excel
formatter.write(
File "C:pythonlibsite-packagespandasioformatsexcel.py", line 821, in write
writer.write_cells(
File "C:pythonlibsite-packagespandasioexcel_xlsxwriter.py", line 209, in write_cells
wks = self.book.add_worksheet(sheet_name)
File "C:pythonlibsite-packagesxlsxwriterworkbook.py", line 184, in add_worksheet
return self._add_sheet(name, worksheet_class=worksheet_class)
File "C:pythonlibsite-packagesxlsxwriterworkbook.py", line 735, in _add_sheet
name = self._check_sheetname(name, isinstance(worksheet, Chartsheet))
File "C:pythonlibsite-packagesxlsxwriterworkbook.py", line 784, in _check_sheetname
raise InvalidWorksheetName(
xlsxwriter.exceptions.InvalidWorksheetName: Excel worksheet name 'Allied Moulded Enclosure Products' must be <= 31 chars.
ниже приведен скрипт python для filesplit
#!/usr/bin/env python
# coding: utf-8
# In[ ]:
import pandas as pd
import os
from openpyxl import load_workbook
import xlsxwriter
from shutil import copyfile
file=input('File Path: ')
extension = os.path.splitext(file)[1]
filename = os.path.splitext(file)[0]
pth=os.path.dirname(file)
newfile=os.path.join(pth,filename '_2' extension)
df=pd.read_excel(file)
colpick=input('Select Column: ')
cols=list(set(df[colpick].values))
def sendtofile(cols):
for i in cols:
df[df[colpick] == i].to_excel("{}/{}.xlsx".format(pth, i), sheet_name=i, index=False)
print('nCompleted')
print('Thanks for using this program.')
return
def sendtosheet(cols):
copyfile(file, newfile)
for j in cols:
writer = pd.ExcelWriter(newfile, engine='openpyxl')
for myname in cols:
mydf = df.loc[df[colpick] == myname]
mydf.to_excel(writer, sheet_name=myname, index=False)
writer.save()
print('nCompleted')
print('Thanks for using this program.')
return
print('You data will split based on these values {} and create {} files or sheets based on next selection. If you are ready to proceed please type "Y" and hit enter. Hit "N" to exit.'.format(', '.join(cols),len(cols)))
while True:
x=input('Ready to Proceed (Y/N): ').lower()
if x == 'y':
while True:
s = input('Split into different Sheets or File (S/F): ').lower()
if s == 'f':
sendtofile(cols)
break
elif s == 's':
sendtosheet(cols)
break
else: continue
break
elif x=='n':
print('nThanks for using this program.')
break
else: continue
# In[ ]:
Ссылка на файлы
https://github.com/sudarshan0091/filesplit
Пожалуйста, обратите внимание, что этот скрипт не мой, получил его с github, он принадлежит youtube trainer.
Комментарии:
1. Используйте более короткое имя листа. Вы превысили лимит символов.
2. И в сообщении об ошибке сказано ИМЕННО это. Разве вы этого не видели?
3. Да, Тим, я заметил, что сейчас я сначала не мог этого понять, на самом деле я новичок в этом мире программирования и просто гуглю, чтобы облегчить мою жизнь для повседневной работы в Excel. Спасибо за ваш ответ.
Ответ №1:
Максимально допустимое имя рабочего листа в Excel составляет 31 символ. Имя листа, которое вы пытаетесь использовать, длиннее этого. Отсюда и сообщение об ошибке.
Комментарии:
1. Спасибо за ответ, пожалуйста, помогите, как мне изменить код, чтобы файл можно было разделить без изменения имени листа (я имел в виду, что имя листа может быть с именем по умолчанию, и можно изменить только имя файла). возможно ли это?