powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / C# и Excel
16 сообщений из 16, страница 1 из 1
C# и Excel
    #38029237
aleksey_sql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток уважаемые эксперты. Вопрос в следующем. Есть сложная Excel формула (которая задается из приложения) с выражениями ЕСЛИ, СУММА и т.д.
В приложении я "хватаю" значения некоторых столбцов (работаю через COM интерфейс), и делаю с этими значениями некоторые действия. Так вот, мне нужно некоторые из значений прогонять через эту формулу прям на C#. Не могу понять как это сделать. Пробовал через _Evaluate - не получается.
...
Рейтинг: 0 / 0
C# и Excel
    #38029284
Фотография pation
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleksey_sqlДоброго времени суток уважаемые эксперты. Вопрос в следующем. Есть сложная Excel формула (которая задается из приложения) с выражениями ЕСЛИ, СУММА и т.д.
В приложении я "хватаю" значения некоторых столбцов (работаю через COM интерфейс), и делаю с этими значениями некоторые действия. Так вот, мне нужно некоторые из значений прогонять через эту формулу прям на C#. Не могу понять как это сделать. Пробовал через _Evaluate - не получается.

нет ничего проще, поставь в другой ячейке формулу и получи из неё вычисленное значение
...
Рейтинг: 0 / 0
C# и Excel
    #38029298
aleksey_sql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
pationaleksey_sqlДоброго времени суток уважаемые эксперты. Вопрос в следующем. Есть сложная Excel формула (которая задается из приложения) с выражениями ЕСЛИ, СУММА и т.д.
В приложении я "хватаю" значения некоторых столбцов (работаю через COM интерфейс), и делаю с этими значениями некоторые действия. Так вот, мне нужно некоторые из значений прогонять через эту формулу прям на C#. Не могу понять как это сделать. Пробовал через _Evaluate - не получается.

нет ничего проще, поставь в другой ячейке формулу и получи из неё вычисленное значение

Ваш вариант не подходит. В таблице порядка 100-300 тясяч записей, и если к каждой ячейке обращаться через Range, то процесс сильно затормозится по времени. Скажу сразу - мне не подходит применять формулу ко всему столбцу сразу, т.к. формула изменяется в зависимости от набора других ячеек. Так что предложите ещё что-нибудь "простое", желательно с примером :) спасибо!
...
Рейтинг: 0 / 0
C# и Excel
    #38029669
aleksey_sql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
никто не поможет?
...
Рейтинг: 0 / 0
C# и Excel
    #38029679
Barkan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleksey_sqlДоброго времени суток уважаемые эксперты. Вопрос в следующем. Есть сложная Excel формула (которая задается из приложения) с выражениями ЕСЛИ, СУММА и т.д.
В приложении я "хватаю" значения некоторых столбцов (работаю через COM интерфейс), и делаю с этими значениями некоторые действия. Так вот, мне нужно некоторые из значений прогонять через эту формулу прям на C#. Не могу понять как это сделать. Пробовал через _Evaluate - не получается.
Сложная формула задаётся из приложения ...?
Что мешает в приложении и производить расчёт?
А исходные данные для расчёта можно брать из xls и без COM.
Например я использую NPOI - читаю / пишу xls напрямую, без Excel.
...
Рейтинг: 0 / 0
C# и Excel
    #38029745
aleksey_sql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Barkan,

Да. Именно из приложения. В приложении считать не получится, т.к. придется тогда писать парсер этих формул и далее - интерпретатор. Мне просто хочется как-то вызывать какую то ф-цию, которая просто вычисляет значение формулы в формате Экселя.
...
Рейтинг: 0 / 0
C# и Excel
    #38029884
Фотография pation
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleksey_sqlpationпропущено...


нет ничего проще, поставь в другой ячейке формулу и получи из неё вычисленное значение

Ваш вариант не подходит. В таблице порядка 100-300 тясяч записей, и если к каждой ячейке обращаться через Range, то процесс сильно затормозится по времени. Скажу сразу - мне не подходит применять формулу ко всему столбцу сразу, т.к. формула изменяется в зависимости от набора других ячеек. Так что предложите ещё что-нибудь "простое", желательно с примером :) спасибо!

так заполняй сразу Range на все строки и читай сразу со всех
...
Рейтинг: 0 / 0
C# и Excel
    #38029888
aleksey_sql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
pation,

не на строки, а на столбцы.
Скажу сразу - мне не подходит применять формулу ко всему столбцу сразу, т.к. формула изменяется в зависимости от набора других ячеек.
...
Рейтинг: 0 / 0
C# и Excel
    #38029916
Фотография pation
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleksey_sqlpation,

не на строки, а на столбцы.
Скажу сразу - мне не подходит применять формулу ко всему столбцу сразу, т.к. формула изменяется в зависимости от набора других ячеек.

формулы эксцеля как раз расчитаны, что бы применяться сразу к целому ранжу, а не к отдельной ячейки,
если у тебя не получается использовать штаные способности экцеля, то это твои проблеммы
...
Рейтинг: 0 / 0
C# и Excel
    #38029937
aleksey_sql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
pation,

поясняю на пальцах

есть 3 столбца:

столбец_1 столбец_2 столбец_3

яблочко 31 формула_1
вишенка 45 формула_2
груша 53 формула_1
слива 12 формула_2

так вот мне нужно для конкретных значений из столбца 1 применять формулу в столбце 3.
строчек в таблице около 300 тысяч, поэтому проход по каждой строке и брать Range отпадает сразу.
я взял в Range сразу всю область и загнал в массив, и уже этот массив прогоняю в цикле (что существенно быстрее, чем идти Range'ем по экселевской таблице). вопрос. как через COM получить результат экселевской формулы налету?
вот тебе и проблема, дорогой pation
...
Рейтинг: 0 / 0
C# и Excel
    #38029976
Barkan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleksey_sql,

Т.е. сперва приложение определяет что для яблока и груши надо сформировать формулу_1 и подсунуть её
в столбец_3, а для вишни и сливы сформировать формулу_2 и записать в столбец_3?
А потом приложение должно по очереди для каждой строки брать формулу из столбца_3 (в формате excel),
брать данные из других столбцов, "парсить" формулу и вычислять её?
Я правильно понял глубину Ваших мыслей?
...
Рейтинг: 0 / 0
C# и Excel
    #38030009
Фотография pation
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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 чтения значения и ячейки

ищё раз повторю, учи экцель
...
Рейтинг: 0 / 0
C# и Excel
    #38030098
aleksey_sql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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, и налету составлять зависимости не получится, т.к. скорость обработки сильно снизится. если б так можно было б сделать оптимально, то я б не создавал эту тему. а эксель и его возможности я прекрасно знаю. а ты - учи русский язык "Ищё". я ищу совет, а не обсосанные вырезки из интернета, которые я уже обчитался.
...
Рейтинг: 0 / 0
C# и Excel
    #38030149
Фотография pation
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleksey_sqlя ищу совет
совет следующий: сократить число чтений/записи в ячейки, т.е. использовать Range больших размеров
...
Рейтинг: 0 / 0
C# и Excel
    #38030200
Денис Б.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleksey_sql,
сводная таблица Ecxel прекрасно подходит для такой задачи

p.s. хотя задача вообще поставлена непонятно (даже "на пальцах").
данные хранятся в Excel ? тогда будут проблемы, если кто-нибудь ручками чего-то подправит, и "сложная Excel формула (которая задается из приложения) " уже не факт что правильно будет работать.
формула в Excel хранится как текст?
чем дальше читаю, тем больше непоняток

p.p.s. Чтобы предложить "ещё что-нибудь "простое", желательно с примером :) спасибо!" нужно в студию кусок таблицы. как есть и что надо получить
...
Рейтинг: 0 / 0
C# и Excel
    #38030293
aleksey_sql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Денис Б.,

Сформулирую проще. Мне нужно посчитать формулу вида =IF(значение > 1000; значение*1.1; значение*1.15) из программы C#. формула может быть более сложной, но формата эксель. Вместе "значение" будет подставлено число.
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / C# и Excel
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]