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