Как использовать формулы Excel в C#

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

= CHISQ.DIST.RT(100,4)

где 100 — хи-квадрат, а 4 — степень свободы.

Я хочу использовать эту функцию в C# для расчета; Я попытался добавить ссылку на «Microsoft.Office.Interop», но не смог найти способ ее использовать!

Я наткнулся на некоторые темы о том, как использовать C# для создания формулировок в Excel и получения результатов в Excel, но, к сожалению, это не то, что мне нужно; Мне нужно сделать расчет на С# и получить результаты на С#.


person Hamed    schedule 13.05.2013    source источник
comment
Вы создали и преуспели в работе с помощью библиотеки Interop?   -  person Antarr Byrd    schedule 13.05.2013
comment
Есть ли причина, по которой нужно использовать Excel? Вы должны быть в состоянии легко перенести это на С#. codeproject.com/Articles/432194/   -  person Joe Korolewicz    schedule 13.05.2013
comment
Я проверил этот код раньше. Я имею дело с данными ChIP-seq, где хи-квадрат равен, скажем, 300! которому соответствующее значение p составляет около 2,00E-30! Этот код дает NaN или Infinity для этих чисел; но Excel просто дает очень точные результаты, поэтому я предпочитаю использовать Excel.   -  person Hamed    schedule 14.05.2013


Ответы (2)


Если вам нужен только расчет, аналогичный расчету в Excel, вам следует рассмотреть предложенный комментарий @korolewi.

Если вам действительно нужно использовать движок Excel, вы можете сделать

  1. То, что предложил предыдущий плакат, но для этого потребуется установить экземпляр Excel на веб-сервере, и он будет запускать Excel каждый раз при выполнении кода и т. д. Это плохая практика и не поддерживается Microsoft
  2. Используйте сторонний инструмент, например Cells от Aspose.com. При этом вы можете установить формулу, вычислить ее и получить значение из вукбука, фактически не открывая Excel на сервере.
person wilsjd    schedule 13.05.2013
comment
Я согласен, если вам нужно оценить формулы Excel, но не обязательно с самим Excel (и особенно, если это делается на неинтерактивной машине, такой как сервер, хотя вы не упоминаете, так ли это), третий- партийный инструмент - это путь. Насколько я могу судить, Aspose.Cells не поддерживает функцию CHISQ.DIST.RT. SpreadsheetGear 2012 для .NET поддерживает CHISQ.DIST.RT вместе со всеми другими функциями, представленными в Excel 2010. Отказ от ответственности: я работаю в SpreadsheetGear инженером технической поддержки. - person Tim Andersen; 14.05.2013
comment
Я ценю предложение SpreadsheetGear. Но нет ли метода с использованием формул без использования сторонних приложений? - person Hamed; 14.05.2013
comment
Я бы вряд ли рассматривал возможность использования внешней библиотеки в качестве стороннего приложения, так что да. Ссылка в комментарии к вашему исходному вопросу указывает, как это сделать. codeproject.com/Articles/432194/ содержит библиотеки DLL, которые вы можете использовать для этого. - person wilsjd; 14.05.2013

Чтобы работать с «виртуальным» Excel в вашем C#-коде с помощью Microsoft.Office.Interop.Excel, вам необходимо создать объект рабочей книги, создать (по крайней мере) один объект рабочего листа в этой книге, а затем вы можете использовать функции Excel. Интероп-бокса.

person Michael    schedule 13.05.2013
comment
В вопросе ясно сказано, что мне нужно выполнять вычисления на C# и получать результаты на C#, а делать это с помощью Excel не то, что им нужно. Создание рабочей книги Excel, когда вопрос касается НЕ использования Excel, очевидно, не является ответом. - person Ken White; 13.05.2013
comment
@KenWhite Это определенно не ответ, но это, по крайней мере, отвечает на вопрос о том, сколько интенсивной тяжелой работы вам нужно выполнить, просто вызовите функцию рабочего листа. Результат: Это нежелательный подход. - person Brad; 13.05.2013
comment
Если это не ответ, его не следует публиковать как один. Возможно, это был бы полезный комментарий, но ответы должны делать именно это - давать ответ на заданный вопрос. - person Ken White; 13.05.2013
comment
@KenWhite, как вы упомянули, я не хочу использовать книгу Excel. Простое использование рабочей книги Excel было бы для меня неэффективным, потому что мне нужно выполнять этот расчет примерно 1 000 000 раз при каждом запуске; поэтому я ДОЛЖЕН использовать как можно более эффективные методы. - person Hamed; 14.05.2013
comment
@KenWhite Возможно, это не ответ последней части, но на этом этапе он может помочь: я попытался добавить ссылку на Microsoft.Office.Interop, но не смог найти способ ее использовать! А также Как использовать формулы Excel в C# - не вычислять что-то в C# аналогично реализации в Excel. Хотя в последнем предложении ОП сказал, что мне нужно [...] вычислить на С# и получить результаты на С#, они добавили, что Excel просто дает очень точные результаты, поэтому я предпочитаю использовать Excel в комментарии. Таким образом, этот ответ может быть полезным и сильно отличается от ответа. :) - person Michael; 14.05.2013
comment
@ user947889 Вы не можете вызвать функцию Excel напрямую — вам нужно просмотреть лист. Поэтому вам нужно решить, что важнее — нативная реализация, способная справиться с нужным вам масштабом и точностью, или неэффективность создания рабочего листа для обработки вычислений. - person GalacticCowboy; 14.05.2013