Я обычно делаю:
LIBDIR=$(dirname "$(readlink -f "$(type -P $0 || echo $0)")")
source $LIBDIR/lib.sh
Aspose.Cells (ранее Aspose.Excel.Web) - хороший способ получить функциональность, которую вы ищете.
Если вы не спрашиваете больше в разделе «Как дела? это было сделано?" чем «Мне нужно это сделать». Затем я посмотрю на другие полученные ответы.
По строкам «Мне нужно это сделать»
У Microsoft есть Службы Excel , которые делают именно то, что вы хотите.
Операции с таблицами на сервере. Он доступен через интерфейс веб-служб, так что вы можете подключаться и управлять вычислениями из Java, PHP, .NET и т. Д.
Службы Excel являются частью Sharepoint 2007.
Resolver One - это приложение для работы с электронными таблицами, созданное на IronPython.
Существует объяснение общей механики вычислений [pythonology.org], которые оно использует для пользовательских вычислений.
Соответствующее изображение, показывающее общий алгоритм Resolver One.
Следует отметить, что пользователи могут писать код Python для интерпретации как в ячейках, так и в специальном месте «вне листа».
Посмотрите на еще один вопрос здесь, в SO , откуда я повторно использовал свой ответ.
Я не могу сказать вам, как это сделать. Но я бы порекомендовал вам взглянуть на код PHPExcel . PHPExcel - это библиотека, которая позволяет вам создавать файлы Excel в PHP.
Рабочий процесс PHPExcel упрощается следующим образом:
В вашем случае вам придется заменить 3. на что-то вроде« Создать веб-интерфейс ».
Поэтому я бы рекомендовал вам взглянуть на код этого проекта с открытым исходным кодом и посмотрите, какова общая структура. Это должно помочь вам решить вашу проблему.
Чтобы провести фактическое вычисление, взгляните на теорию графов. По сути, вы хотите представить каждую ячейку как узел на графике, а каждую зависимость как направленное ребро. Затем выполните топологическую сортировку , чтобы вычислить значение каждой ячейки в правильном порядке.
Я должен указать, что электронные таблицы Google уже делают подобные вещи.
Однажды я использовал двоичное дерево для хранения результатов анализа строки с помощью BODMAS . Каждый узел был операцией между двумя другими узлами, которая могла быть числом, переменной или другой операцией.
Итак, y = x * x + 2
превратилось в:
+
* 2
x x
К сожалению, это было в школе на Паскале и является хранится на диске 5 1/4 дюйма, поэтому он вам не нужен :)
SpreadsheetGear для .NET позволит вам загружать книги Excel, вставлять значения, вычислять и затем получать результаты.
Вы можете увидеть несколько простых примеров вычислений ASP.NET здесь , другие образцы ASP.NET здесь и загрузите бесплатную пробную версию здесь .
Отказ от ответственности: я владею SpreadsheetGear LLC