|
C# и Excel
|
|||
---|---|---|---|
#18+
Доброго времени суток уважаемые эксперты. Вопрос в следующем. Есть сложная Excel формула (которая задается из приложения) с выражениями ЕСЛИ, СУММА и т.д. В приложении я "хватаю" значения некоторых столбцов (работаю через COM интерфейс), и делаю с этими значениями некоторые действия. Так вот, мне нужно некоторые из значений прогонять через эту формулу прям на C#. Не могу понять как это сделать. Пробовал через _Evaluate - не получается. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.11.2012, 19:19 |
|
C# и Excel
|
|||
---|---|---|---|
#18+
aleksey_sqlДоброго времени суток уважаемые эксперты. Вопрос в следующем. Есть сложная Excel формула (которая задается из приложения) с выражениями ЕСЛИ, СУММА и т.д. В приложении я "хватаю" значения некоторых столбцов (работаю через COM интерфейс), и делаю с этими значениями некоторые действия. Так вот, мне нужно некоторые из значений прогонять через эту формулу прям на C#. Не могу понять как это сделать. Пробовал через _Evaluate - не получается. нет ничего проще, поставь в другой ячейке формулу и получи из неё вычисленное значение ... |
|||
:
Нравится:
Не нравится:
|
|||
07.11.2012, 20:24 |
|
C# и Excel
|
|||
---|---|---|---|
#18+
pationaleksey_sqlДоброго времени суток уважаемые эксперты. Вопрос в следующем. Есть сложная Excel формула (которая задается из приложения) с выражениями ЕСЛИ, СУММА и т.д. В приложении я "хватаю" значения некоторых столбцов (работаю через COM интерфейс), и делаю с этими значениями некоторые действия. Так вот, мне нужно некоторые из значений прогонять через эту формулу прям на C#. Не могу понять как это сделать. Пробовал через _Evaluate - не получается. нет ничего проще, поставь в другой ячейке формулу и получи из неё вычисленное значение Ваш вариант не подходит. В таблице порядка 100-300 тясяч записей, и если к каждой ячейке обращаться через Range, то процесс сильно затормозится по времени. Скажу сразу - мне не подходит применять формулу ко всему столбцу сразу, т.к. формула изменяется в зависимости от набора других ячеек. Так что предложите ещё что-нибудь "простое", желательно с примером :) спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
07.11.2012, 20:35 |
|
C# и Excel
|
|||
---|---|---|---|
#18+
aleksey_sqlДоброго времени суток уважаемые эксперты. Вопрос в следующем. Есть сложная Excel формула (которая задается из приложения) с выражениями ЕСЛИ, СУММА и т.д. В приложении я "хватаю" значения некоторых столбцов (работаю через COM интерфейс), и делаю с этими значениями некоторые действия. Так вот, мне нужно некоторые из значений прогонять через эту формулу прям на C#. Не могу понять как это сделать. Пробовал через _Evaluate - не получается. Сложная формула задаётся из приложения ...? Что мешает в приложении и производить расчёт? А исходные данные для расчёта можно брать из xls и без COM. Например я использую NPOI - читаю / пишу xls напрямую, без Excel. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.11.2012, 09:37 |
|
C# и Excel
|
|||
---|---|---|---|
#18+
Barkan, Да. Именно из приложения. В приложении считать не получится, т.к. придется тогда писать парсер этих формул и далее - интерпретатор. Мне просто хочется как-то вызывать какую то ф-цию, которая просто вычисляет значение формулы в формате Экселя. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.11.2012, 10:20 |
|
C# и Excel
|
|||
---|---|---|---|
#18+
aleksey_sqlpationпропущено... нет ничего проще, поставь в другой ячейке формулу и получи из неё вычисленное значение Ваш вариант не подходит. В таблице порядка 100-300 тясяч записей, и если к каждой ячейке обращаться через Range, то процесс сильно затормозится по времени. Скажу сразу - мне не подходит применять формулу ко всему столбцу сразу, т.к. формула изменяется в зависимости от набора других ячеек. Так что предложите ещё что-нибудь "простое", желательно с примером :) спасибо! так заполняй сразу Range на все строки и читай сразу со всех ... |
|||
:
Нравится:
Не нравится:
|
|||
08.11.2012, 11:42 |
|
C# и Excel
|
|||
---|---|---|---|
#18+
pation, не на строки, а на столбцы. Скажу сразу - мне не подходит применять формулу ко всему столбцу сразу, т.к. формула изменяется в зависимости от набора других ячеек. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.11.2012, 11:45 |
|
C# и Excel
|
|||
---|---|---|---|
#18+
aleksey_sqlpation, не на строки, а на столбцы. Скажу сразу - мне не подходит применять формулу ко всему столбцу сразу, т.к. формула изменяется в зависимости от набора других ячеек. формулы эксцеля как раз расчитаны, что бы применяться сразу к целому ранжу, а не к отдельной ячейки, если у тебя не получается использовать штаные способности экцеля, то это твои проблеммы ... |
|||
:
Нравится:
Не нравится:
|
|||
08.11.2012, 11:54 |
|
C# и Excel
|
|||
---|---|---|---|
#18+
pation, поясняю на пальцах есть 3 столбца: столбец_1 столбец_2 столбец_3 яблочко 31 формула_1 вишенка 45 формула_2 груша 53 формула_1 слива 12 формула_2 так вот мне нужно для конкретных значений из столбца 1 применять формулу в столбце 3. строчек в таблице около 300 тысяч, поэтому проход по каждой строке и брать Range отпадает сразу. я взял в Range сразу всю область и загнал в массив, и уже этот массив прогоняю в цикле (что существенно быстрее, чем идти Range'ем по экселевской таблице). вопрос. как через COM получить результат экселевской формулы налету? вот тебе и проблема, дорогой pation ... |
|||
:
Нравится:
Не нравится:
|
|||
08.11.2012, 12:01 |
|
C# и Excel
|
|||
---|---|---|---|
#18+
aleksey_sql, Т.е. сперва приложение определяет что для яблока и груши надо сформировать формулу_1 и подсунуть её в столбец_3, а для вишни и сливы сформировать формулу_2 и записать в столбец_3? А потом приложение должно по очереди для каждой строки брать формулу из столбца_3 (в формате excel), брать данные из других столбцов, "парсить" формулу и вычислять её? Я правильно понял глубину Ваших мыслей? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.11.2012, 12:14 |
|
C# и Excel
|
|||
---|---|---|---|
#18+
aleksey_sqlpation, поясняю на пальцах есть 3 столбца: столбец_1 столбец_2 столбец_3 яблочко 31 формула_1 вишенка 45 формула_2 груша 53 формула_1 слива 12 формула_2 так вот мне нужно для конкретных значений из столбца 1 применять формулу в столбце 3. строчек в таблице около 300 тысяч, поэтому проход по каждой строке и брать Range отпадает сразу. я взял в Range сразу всю область и загнал в массив, и уже этот массив прогоняю в цикле (что существенно быстрее, чем идти Range'ем по экселевской таблице). вопрос. как через COM получить результат экселевской формулы налету? вот тебе и проблема, дорогой pation учитесь правильно работать с экцелем, на самом деле у вас всего 1 формула: Формула (формула_1, формула_2), но это не суть важно даже если 2 - это 2 записиси формулы в 2 соответствующих ранджа + 1 чтение результатов по скорости это чуть больше 2 записей 2 ячейки + 1 чтения значения и ячейки ищё раз повторю, учи экцель ... |
|||
:
Нравится:
Не нравится:
|
|||
08.11.2012, 12:26 |
|
C# и Excel
|
|||
---|---|---|---|
#18+
pationaleksey_sqlpation, поясняю на пальцах есть 3 столбца: столбец_1 столбец_2 столбец_3 яблочко 31 формула_1 вишенка 45 формула_2 груша 53 формула_1 слива 12 формула_2 так вот мне нужно для конкретных значений из столбца 1 применять формулу в столбце 3. строчек в таблице около 300 тысяч, поэтому проход по каждой строке и брать Range отпадает сразу. я взял в Range сразу всю область и загнал в массив, и уже этот массив прогоняю в цикле (что существенно быстрее, чем идти Range'ем по экселевской таблице). вопрос. как через COM получить результат экселевской формулы налету? вот тебе и проблема, дорогой pation учитесь правильно работать с экцелем, на самом деле у вас всего 1 формула: Формула (формула_1, формула_2), но это не суть важно даже если 2 - это 2 записиси формулы в 2 соответствующих ранджа + 1 чтение результатов по скорости это чуть больше 2 записей 2 ячейки + 1 чтения значения и ячейки ищё раз повторю, учи экцель ваше решение не подходит, т.к. формул будет больше чем 2, и они будут разбросаны по всему Range, и налету составлять зависимости не получится, т.к. скорость обработки сильно снизится. если б так можно было б сделать оптимально, то я б не создавал эту тему. а эксель и его возможности я прекрасно знаю. а ты - учи русский язык "Ищё". я ищу совет, а не обсосанные вырезки из интернета, которые я уже обчитался. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.11.2012, 13:06 |
|
C# и Excel
|
|||
---|---|---|---|
#18+
aleksey_sqlя ищу совет совет следующий: сократить число чтений/записи в ячейки, т.е. использовать Range больших размеров ... |
|||
:
Нравится:
Не нравится:
|
|||
08.11.2012, 13:28 |
|
C# и Excel
|
|||
---|---|---|---|
#18+
aleksey_sql, сводная таблица Ecxel прекрасно подходит для такой задачи p.s. хотя задача вообще поставлена непонятно (даже "на пальцах"). данные хранятся в Excel ? тогда будут проблемы, если кто-нибудь ручками чего-то подправит, и "сложная Excel формула (которая задается из приложения) " уже не факт что правильно будет работать. формула в Excel хранится как текст? чем дальше читаю, тем больше непоняток p.p.s. Чтобы предложить "ещё что-нибудь "простое", желательно с примером :) спасибо!" нужно в студию кусок таблицы. как есть и что надо получить ... |
|||
:
Нравится:
Не нравится:
|
|||
08.11.2012, 13:49 |
|
C# и Excel
|
|||
---|---|---|---|
#18+
Денис Б., Сформулирую проще. Мне нужно посчитать формулу вида =IF(значение > 1000; значение*1.1; значение*1.15) из программы C#. формула может быть более сложной, но формата эксель. Вместе "значение" будет подставлено число. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.11.2012, 14:27 |
|
|
start [/forum/topic.php?fid=20&msg=38029298&tid=1405690]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
37ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
others: | 317ms |
total: | 449ms |
0 / 0 |