Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 14, 2019 19:32:18

Rafik
Зарегистрирован: 2018-09-04
Сообщения: 231
Репутация: +  27  -
Профиль   Отправить e-mail  

Обработка данных Excel

Если есть желание, то можно замутить БД, например, на легоньком и простеньком sqlite. Для чтения из xls файлов (не xlsx) вполне достаточно простенькой библиотеки xlrd. В этом случае можно будет импортировать в БД без использования какого-либо офисного пакета под любой ОС: хошь под линем, хошь под вендой. Есть и другие варианты импорта. Тут на вкус и цвет все они разные. Мне больше нравится чтение через xlrd, т.к. чем-то напоминает уже знакомые выражения из макросов.
Если данных немного и, в дальнейшем, не придвидится расширение, то вполне можно обойтись силами самого excell, его встроенные формулы могут многое.

Офлайн

#2 Окт. 14, 2019 21:08:35

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Обработка данных Excel

ToMaTkuH
Файлы Екселя весят не более 50кб, там таблицы максимум 40*100 ячеек
Это очень очень маленькие таблицы.

Я бы тогда рекомендовал все импортировать(xlrd) и построить нужные структуры данных на питоне. А сохранение в пикл использовать при необходимости. Это хорошее упражнение для освоения пионовских структур данных. При таком подходе вы лишаете сея возможности использовать sql но это может и избыточно.

Следующий шаг такой, опишите тут одну из рутинных задачек, вам подскажут как с ней справляться.



Офлайн

#3 Окт. 15, 2019 04:56:02

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

Обработка данных Excel

Rafik
силами самого excell
Excel пишется с одной буквой l. Это слово такое
excel
[ɪkˈsel]
_v. 1> превосходить (in, at); to excel smb. at smth. превосходить кого-л. в чём-л.
2> выдаваться, выделяться; to excel as an orator быть выдающимся оратором



Отредактировано py.user.next (Окт. 15, 2019 04:56:15)

Офлайн

#4 Окт. 16, 2019 12:05:49

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

Обработка данных Excel

doza_and
ToMaTkuH
Файлы Екселя весят не более 50кб, там таблицы максимум 40*100 ячеек
Это очень очень маленькие таблицы.

Я бы тогда рекомендовал все импортировать(xlrd) и построить нужные структуры данных на питоне. А сохранение в пикл использовать при необходимости. Это хорошее упражнение для освоения пионовских структур данных. При таком подходе вы лишаете сея возможности использовать sql но это может и избыточно.

Следующий шаг такой, опишите тут одну из рутинных задачек, вам подскажут как с ней справляться.

Спасибо, Вам, большое за помощь, я прикрепил файл экселя, с расчетом который сделал своими руками.
Названия ячеек(столбцов) статичны, они из программы выгружаются всегда с одинаковыми названиями.
1.По моему соображению, моя программа должна находить месяц по заданному ключу допустим столбец называется “Реализация Март 2018” ключ к нему Март 2018 и создавать кортеж с цифрами реализации.
Проделывать тоже самое с ячейками “Реализация Апрель 2018”, “Реализация Май 2018”.
2. На основе трех уже созданных кортежей, создавать, новый в котором будет сумма предыдущих(кортежей) трех.
3. Записывать новый котреж в колонку Реализация Март - Май 2018.
4. Также стоит помнить, что данные на самом деле выгружаются за полный год и в зависимости от ситуации иногда нужно выгружать 2 года, а иногда и 5 лет. И считать среднюю/максимальную реализацию учитывая все выгруженные года.
Если кто сможет помочь советом я буду очень благодарен, решать за меня задачу не нужно, вполне хватит, подсказать чем лучше воспользоватся для решение.
Возможности пользоваться 1С нет, так как наша команда использует свой собственный софт, в котором нет возможности считать подобное, есть только возможность выгружать данные.
Задача, которую я описал выше, является ключевой, если я смогу сделать ее, остальное выполняется по тому же принципу. Это я к тому что я бы еще добавил сравнение остатков и реализации и многое другое.

P.S. Ребят, я понимаю, что возможно я взялся за очень сложное задание, если кто-то считает, что я лезу куда не должен, я вас понимаю, и на 50% думаю также. Но с недавних пор мне нравится, “пытаться” кодить вечерами. Это мое новое хобби. И как вы наверно сами понимаете лучше всего учится чему-то решая реальные задачи.
Я ни в коем разе никому не хамлю, но если вы считаете что отвечать в данном топике это пустая трата времени, это ваше право. Просто игнорируйте.

Прикреплённый файлы:
attachment Salesdynamics00000001.xlsx (12,7 KБ)

Офлайн

#5 Окт. 16, 2019 14:54:21

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2701
Репутация: +  182  -
Профиль   Отправить e-mail  

Обработка данных Excel

> так как наша команда использует свой собственный софт, в котором нет возможности считать подобное, есть только возможность выгружать данные.

ИХМО я бы на твоём месте напряг автора этого софта, иначе вечно придётся какими-то промежуточными решениями пользоваться.



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Онлайн

#6 Окт. 16, 2019 16:40:56

Rafik
Зарегистрирован: 2018-09-04
Сообщения: 231
Репутация: +  27  -
Профиль   Отправить e-mail  

Обработка данных Excel

Я бы использовал библиотеку openpyxl, которая создана для работы именно с xlsx файлами.
Есть неплохая документация с туториалом и примерами. Имеется возможность вставлять формулы в документ. Можно через calculate_dimension() получить имена начальной и конечной ячеек, занимаемых таблицей. Для преобразования индекса колонки в букву и наоборот есть соответствующие функции в openpyxl.utils
Мне думается, что скриптом сгенерить и записать формулы в документ не составит особого труда.

Отредактировано Rafik (Окт. 16, 2019 18:34:08)

Офлайн

#7 Окт. 18, 2019 19:58:40

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

Обработка данных Excel

Rodegast
> так как наша команда использует свой собственный софт, в котором нет возможности считать подобное, есть только возможность выгружать данные.

ИХМО я бы на твоём месте напряг автора этого софта, иначе вечно придётся какими-то промежуточными решениями пользоваться.
Этот вариант был отброшен как сложно выполнимый, т.к. задачи у отдела программистов на год в перед.

Офлайн

#8 Окт. 18, 2019 19:59:37

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

Обработка данных Excel

Rafik
Я бы использовал библиотеку openpyxl, которая создана для работы именно с xlsx файлами.
Есть неплохая документация с туториалом и примерами. Имеется возможность вставлять формулы в документ. Можно через calculate_dimension() получить имена начальной и конечной ячеек, занимаемых таблицей. Для преобразования индекса колонки в букву и наоборот есть соответствующие функции в openpyxl.utils
Мне думается, что скриптом сгенерить и записать формулы в документ не составит особого труда.

Отредактировано Rafik (Окт. 16, 2019 18:34:08)
Спасибо, начал изучать.

Офлайн

#9 Окт. 18, 2019 21:22:39

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Обработка данных Excel

ToMaTkuH
Если кто сможет помочь советом я буду очень благодарен
 import xlrd
import re
import numpy as np
import pickle
import os
db="out.pkl" #:)
nm="Salesdynamics00000001.xlsx"
book = xlrd.open_workbook(nm)
sheet = book.sheet_by_index(0)
# импорт данных
if os.path.exists(db)
    with open(db,"rb") as f:
        res = pickle.load(f)
else:
    res={}
for i in range(sheet.ncols):
    val = sheet.cell(4,i).value # жестко заданы позиции потому что непонятно что и как выгружается
    found = re.match("Реализация +(.+)",val)
    if found:
        key = found.group(1) # просили в словарь засунуть но это не очень хорошая идея поскольку словарь неупорядоченное множество, текущая версия сохраняет порядок добавления элементов, но это лучше не использовать
        res[key] = np.array(sheet.col_values(i)[5:])
with open(db,"wb") as f:
    pickle.dump(res,f)

Те импортируем все в одну базу и пускай там лежит в питоновских терминах.

ToMaTkuH
На основе трех уже созданных кортежей, создавать, новый в котором будет сумма предыдущих(кортежей) трех.
три это плохо, суммируем все.
 # обработчики полезно делать отдельно
with open(db,"rb") as f:
    res = pickle.load(f)
alldata = np.array([v for k,v in res.items()])
print(np.cumsum(alldata,axis=1)) 
Выводить в эксел считаю бесполезным. Программа должна не плодить данные а позволять принимать конкретные управленческие решения. Например сказать что и когда надо заказывать и т.п. А пока сохранение истории изменений выглядит не имеющим смысла.

Тут видно что для старта нужно знать основы языка, модули os, xlrd, re, numpy, pickle. Как обычно короче, чуток надо в начале почитать.



Отредактировано doza_and (Окт. 18, 2019 21:25:41)

Офлайн

#10 Окт. 19, 2019 20:58:10

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

Обработка данных Excel

Спасибо, за развернутый ответ, сейчас читаю про xlrd, как будут первые успехи обязательно отпишусь.

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version