Форум сайта python.su
27
Если есть желание, то можно замутить БД, например, на легоньком и простеньком sqlite. Для чтения из xls файлов (не xlsx) вполне достаточно простенькой библиотеки xlrd. В этом случае можно будет импортировать в БД без использования какого-либо офисного пакета под любой ОС: хошь под линем, хошь под вендой. Есть и другие варианты импорта. Тут на вкус и цвет все они разные. Мне больше нравится чтение через xlrd, т.к. чем-то напоминает уже знакомые выражения из макросов.
Если данных немного и, в дальнейшем, не придвидится расширение, то вполне можно обойтись силами самого excell, его встроенные формулы могут многое.
Офлайн
253
ToMaTkuHЭто очень очень маленькие таблицы.
Файлы Екселя весят не более 50кб, там таблицы максимум 40*100 ячеек
Офлайн
857
RafikExcel пишется с одной буквой l. Это слово такое
силами самого excell
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)
Офлайн
0
doza_and
ToMaTkuH
Файлы Екселя весят не более 50кб, там таблицы максимум 40*100 ячеек
Это очень очень маленькие таблицы.
Я бы тогда рекомендовал все импортировать(xlrd) и построить нужные структуры данных на питоне. А сохранение в пикл использовать при необходимости. Это хорошее упражнение для освоения пионовских структур данных. При таком подходе вы лишаете сея возможности использовать sql но это может и избыточно.
Следующий шаг такой, опишите тут одну из рутинных задачек, вам подскажут как с ней справляться.
Прикреплённый файлы:
Salesdynamics00000001.xlsx (12,7 KБ)
Офлайн
186
> так как наша команда использует свой собственный софт, в котором нет возможности считать подобное, есть только возможность выгружать данные.
ИХМО я бы на твоём месте напряг автора этого софта, иначе вечно придётся какими-то промежуточными решениями пользоваться.
Офлайн
27
Я бы использовал библиотеку openpyxl, которая создана для работы именно с xlsx файлами.
Есть неплохая документация с туториалом и примерами. Имеется возможность вставлять формулы в документ. Можно через calculate_dimension() получить имена начальной и конечной ячеек, занимаемых таблицей. Для преобразования индекса колонки в букву и наоборот есть соответствующие функции в openpyxl.utils
Мне думается, что скриптом сгенерить и записать формулы в документ не составит особого труда.
Отредактировано Rafik (Окт. 16, 2019 18:34:08)
Офлайн
0
RodegastЭтот вариант был отброшен как сложно выполнимый, т.к. задачи у отдела программистов на год в перед.
> так как наша команда использует свой собственный софт, в котором нет возможности считать подобное, есть только возможность выгружать данные.
ИХМО я бы на твоём месте напряг автора этого софта, иначе вечно придётся какими-то промежуточными решениями пользоваться.
Офлайн
0
RafikСпасибо, начал изучать.
Я бы использовал библиотеку openpyxl, которая создана для работы именно с xlsx файлами.
Есть неплохая документация с туториалом и примерами. Имеется возможность вставлять формулы в документ. Можно через calculate_dimension() получить имена начальной и конечной ячеек, занимаемых таблицей. Для преобразования индекса колонки в букву и наоборот есть соответствующие функции в openpyxl.utils
Мне думается, что скриптом сгенерить и записать формулы в документ не составит особого труда.
Отредактировано Rafik (Окт. 16, 2019 18:34:08)
Офлайн
253
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))
Отредактировано doza_and (Окт. 18, 2019 21:25:41)
Офлайн
0
Спасибо, за развернутый ответ, сейчас читаю про xlrd, как будут первые успехи обязательно отпишусь.
Офлайн