Найти - Пользователи
Полная версия: openpyxl перенести диапазоны объединения ячеек из одного файла в другой с небольшим сдвигом
Начало » Python для новичков » openpyxl перенести диапазоны объединения ячеек из одного файла в другой с небольшим сдвигом
1 2 3
Provi
Добрый день.

Помогите с участием библиотеки openpyxl перенести диапазоны объединения ячеек из одного файла Excel в другой с небольшим сдвигом по горизонтали.
Данные об объединенных ячейках получил, а вот провести операции над ним не могу, ни + ни -, а т.к. файлы разные по количеству строк соответственно и перенести диапазоны в новый файл не могу.
py.user.next
Приведи входной файл.
Приведи выходной файл, который получается из входного файла после преобразований над ним.
Приведи описание процесса преобразования входного файла в выходной файл.
Provi
Входной файл в вложении, не смог понять как несколько прикрепить.
Выходной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
py.user.next
Provi
не смог понять как несколько прикрепить
Пакуешь в архив .zip и присоединяешь.

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

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

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

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

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

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

На входе у тебя один общий файл со всеми счетами.
На выходе у тебя входной файл и множество выходных файлов с номерами счетов в именах, где в одном файле один счёт под своим номером счёта.
На экране у тебя информация о проделанной работе.
Provi
Спасибо. Пошел думать.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB