Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 30, 2022 14:19:51

Provi
Зарегистрирован: 2021-04-09
Сообщения: 32
Репутация: +  0  -
Профиль   Отправить e-mail  

openpyxl перенести диапазоны объединения ячеек из одного файла в другой с небольшим сдвигом

Добрый день.

Помогите с участием библиотеки openpyxl перенести диапазоны объединения ячеек из одного файла Excel в другой с небольшим сдвигом по горизонтали.
Данные об объединенных ячейках получил, а вот провести операции над ним не могу, ни + ни -, а т.к. файлы разные по количеству строк соответственно и перенести диапазоны в новый файл не могу.

Офлайн

#2 Авг. 30, 2022 14:39:33

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9844
Репутация: +  853  -
Профиль   Отправить e-mail  

openpyxl перенести диапазоны объединения ячеек из одного файла в другой с небольшим сдвигом

Приведи входной файл.
Приведи выходной файл, который получается из входного файла после преобразований над ним.
Приведи описание процесса преобразования входного файла в выходной файл.



Офлайн

#3 Авг. 30, 2022 15:06:00

Provi
Зарегистрирован: 2021-04-09
Сообщения: 32
Репутация: +  0  -
Профиль   Отправить e-mail  

openpyxl перенести диапазоны объединения ячеек из одного файла в другой с небольшим сдвигом

Входной файл в вложении, не смог понять как несколько прикрепить.
Выходной1: https://disk.yandex.ru/i/utsDMx9aDapuhA
Выходной2: https://disk.yandex.ru/i/6qkvHoE4exgN6Q

        for key, value in IndexRow.items(): 
start_key_slice = int(value[0])
stop_key_slice = int(value[1])
df = imp[start_key_slice:stop_key_slice]
key_df = pd.DataFrame(df)
path_out = output_folder + key + ".xlsx"
Потом открываю и устанавливаю ширину ячеек, типы шрифтов и т.д.
Массив с адресами получаю:
page.merged_cell_ranges

Прикреплённый файлы:
attachment Вход.xlsx (72,6 KБ)

Офлайн

#4 Авг. 30, 2022 16:54:19

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9844
Репутация: +  853  -
Профиль   Отправить e-mail  

openpyxl перенести диапазоны объединения ячеек из одного файла в другой с небольшим сдвигом

Provi
не смог понять как несколько прикрепить
Пакуешь в архив .zip и присоединяешь.

Вот этот входной файл Вход.xlsx , что с ним надо сделать? Разделить на два файла просто или что? Словами опиши, не надо код сбрасывать.



Офлайн

#5 Авг. 30, 2022 17:03:53

Provi
Зарегистрирован: 2021-04-09
Сообщения: 32
Репутация: +  0  -
Профиль   Отправить e-mail  

openpyxl перенести диапазоны объединения ячеек из одного файла в другой с небольшим сдвигом

Да, верно входной файл разделить на 2, или сколько в нем будет документов.
Файл я разделил, сохранил.
Вопрос в ячейками которые объединены.
Логика какая у меня была:
1. вытаскиваю данные об объединенных ячейках,
2. отфильтровываю, только те диапазоны, которые находятся в нужном мне срезе.
3. Минусую от номера ячейки начало диапазона, и получаю ячейки для которых 0 является начало диапазона.
4. Применяю объединение в новом файле.
Но возможно есть более простой способ.
Но я уперся в то, что merged_cell_ranges выдает свой массив, который я могу только распечатать или вывести на экран, но не могу проводить с ним манипуляции.

Офлайн

#6 Авг. 30, 2022 18:05:37

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9844
Репутация: +  853  -
Профиль   Отправить e-mail  

openpyxl перенести диапазоны объединения ячеек из одного файла в другой с небольшим сдвигом

Сначала нужно входной файл разделить на множество файлов, которые в одном формате сделаны.
Дальше каждый из этих получившихся файлов надо отдельно преобразовать.

Дальше эти разделённые файлы по отдельности как преобразуются? Теперь они становятся входными файлами и вся процедура повторяется уже для них.

Приведи пример входного файла.
Приведи выходной файл, который получается из этого входного файла после преобразований над ним.
Приведи словесное описание процесса преобразования этого входного файла в этот выходной файл.

Provi
Логика какая у меня была:
Provi
Но я уперся в то, что merged_cell_ranges выдает свой массив
Ты, не поставив точно задачи до всех её деталей, стал её реализовывать в виде кода, думая, что написание кода сразу и побыстрей как-то поможет это правильно закончить, и в итоге ты запутался в том, что вообще не нужно. Это вот то же самое, что, не составив полного плана для строительства дома, начать строить задуманный дом из кирпичей, брёвен, цемента, песка, из всего, что вообще есть, примерно представляя, что нужно получить в итоге. Сначала составляется план весь, а потом уже строится дом в соответствии с этим планом, а не просто так типа “я сейчас строить начну, а там уже у меня после какого-то кирпича всё начнёт получаться”. И ты сейчас как бы спрашиваешь “слушай, у меня тут кирпичи в брёвнах не помещаются что-то, так как они квадратные, а брёвна круглые, подскажи, как их туда затолкать?”. Дом-то построить вполне реально, но только не вот так.



Отредактировано py.user.next (Авг. 30, 2022 20:12:25)

Офлайн

#7 Авг. 31, 2022 05:22:01

Provi
Зарегистрирован: 2021-04-09
Сообщения: 32
Репутация: +  0  -
Профиль   Отправить e-mail  

openpyxl перенести диапазоны объединения ячеек из одного файла в другой с небольшим сдвигом

1. Нахожу начало и конец данных которые будут выходным файлом.
2. Создаю, выходной файл.
3. Украшаю выходной файл: рисую клетки, устанавливаю ширину и т.д. Результат во вложении.
Часть “Украшений” это объединение ячеек.
Вопрос в том, что бы объединенные ячейки не каждую прописывать, а перенести массивом из исходного файла.
Логика переноса объединенных ячеек:
1. вытаскиваю данные об объединенных ячейках - merged_cell_ranges
2. отфильтровываю, только те диапазоны, которые находятся в нужном мне срезе (Например через iloc<конца и > начала)
3. Минусую от номера ячейки начало диапазона, и получаю ячейки для которых 0 является начало диапазона. (к данным от результата фильтра минусую начало диапазона)
4. Применяю объединение в новом файле ( через построчной передачи списка в merge_cells)

Прикреплённый файлы:
attachment Данные Вход и 2 выхода.zip (101,4 KБ)

Офлайн

#8 Авг. 31, 2022 05:24:49

Provi
Зарегистрирован: 2021-04-09
Сообщения: 32
Репутация: +  0  -
Профиль   Отправить e-mail  

openpyxl перенести диапазоны объединения ячеек из одного файла в другой с небольшим сдвигом

Или вопрос можно переформулировать: как список merged_cell_ranges, привести к обычном списку, над которым можно совершать операции сложения и вычитания.

Офлайн

#9 Авг. 31, 2022 08:09:13

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9844
Репутация: +  853  -
Профиль   Отправить e-mail  

openpyxl перенести диапазоны объединения ячеек из одного файла в другой с небольшим сдвигом

Provi
Вопрос в том, что бы объединенные ячейки не каждую прописывать, а перенести массивом из исходного файла.
Я так понимаю, тебе нужно просто разделить исходный файл на несколько файлов по этим отдельным счетам, которые в исходном файле идут друг за другом, сохранив объединённые ячейки так, как они были объединены в исходном файле.

Для этого достаточно:

1. Взять исходный файл и скопировать его во временный файл.
2. Установить текущий номер счёта в ноль.
3. Пока временный файл не пуст, выполнять:
3.1. Увеличить текущий номер счёта на единицу.
3.2. Взять временный файл и скопировать его в файл заготовку.
3.3. В файле заготовке найти конец первого счёта от начала.
3.4. Удалить из файла заготовки всё после конца первого счёта от начала.
3.5. Переименовать файл заготовку в файл счёта с текущим номером счёта в имени.
3.6. Удалить из временного файла первый счёт от начала.
3.7. Перейти к пункту 3.
4. Удалить временный файл.
5. Вывести на экран информацию о последнем номере счёта.

На входе у тебя один общий файл со всеми счетами.
На выходе у тебя входной файл и множество выходных файлов с номерами счетов в именах, где в одном файле один счёт под своим номером счёта.
На экране у тебя информация о проделанной работе.



Отредактировано py.user.next (Авг. 31, 2022 08:12:16)

Офлайн

#10 Авг. 31, 2022 08:38:16

Provi
Зарегистрирован: 2021-04-09
Сообщения: 32
Репутация: +  0  -
Профиль   Отправить e-mail  

openpyxl перенести диапазоны объединения ячеек из одного файла в другой с небольшим сдвигом

Спасибо. Пошел думать.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version