Найти - Пользователи
Полная версия: Обработка данных Excel
Начало » Python для новичков » Обработка данных Excel
1 2 3
Rafik
Если есть желание, то можно замутить БД, например, на легоньком и простеньком sqlite. Для чтения из xls файлов (не xlsx) вполне достаточно простенькой библиотеки xlrd. В этом случае можно будет импортировать в БД без использования какого-либо офисного пакета под любой ОС: хошь под линем, хошь под вендой. Есть и другие варианты импорта. Тут на вкус и цвет все они разные. Мне больше нравится чтение через xlrd, т.к. чем-то напоминает уже знакомые выражения из макросов.
Если данных немного и, в дальнейшем, не придвидится расширение, то вполне можно обойтись силами самого excell, его встроенные формулы могут многое.
doza_and
ToMaTkuH
Файлы Екселя весят не более 50кб, там таблицы максимум 40*100 ячеек
Это очень очень маленькие таблицы.

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

Следующий шаг такой, опишите тут одну из рутинных задачек, вам подскажут как с ней справляться.
py.user.next
Rafik
силами самого excell
Excel пишется с одной буквой l. Это слово такое
excel
[ɪkˈsel]
_v. 1> превосходить (in, at); to excel smb. at smth. превосходить кого-л. в чём-л.
2> выдаваться, выделяться; to excel as an orator быть выдающимся оратором
ToMaTkuH
doza_and
ToMaTkuH
Файлы Екселя весят не более 50кб, там таблицы максимум 40*100 ячеек
Это очень очень маленькие таблицы.

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

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

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

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

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

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

Отредактировано Rafik (Окт. 16, 2019 18:34:08)
Спасибо, начал изучать.
doza_and
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. Как обычно короче, чуток надо в начале почитать.
ToMaTkuH
Спасибо, за развернутый ответ, сейчас читаю про xlrd, как будут первые успехи обязательно отпишусь.
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