Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.76/21: Рейтинг темы: голосов - 21, средняя оценка - 4.76
0 / 0 / 0
Регистрация: 11.09.2012
Сообщений: 6

C++Builder вставка формулы в Excel

28.01.2013, 11:06. Показов 4425. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток.
Подключаюсь к excel через OLE

в vba можно сделать запись:
Visual Basic
1
Cells(11, 8).Formula = "= ROUND((C11/(SUM(C11:C29)/100)),2)"
и она при этом отработает нормально.
Делаю тоже самое в билдере, то бишь:

Sh - текущая страница
C++
1
2
3
Variant cur = Sh.OlePropertyGet(L"Cells", Row, Column);
WideString a = "= ROUND((C11/(SUM(C11:C29)/100)),2)";
cur.OlePropertySet(L"Formula", a.c_bstr());
Получаю ошибку 800A03EC, которая, как сообщил мне гугил, возникает при большинстве ошибок excel
При этом, если
C++
1
WideString a = "= ОКРУГЛ((C11/(СУММ(C11:C29)/100));2)";
То все работает, но мне нужно именно унифицированный вывод формулы, не зависящий от локальных настроек языка и сепараторов

В порядке бреда пробовал делать так:
C++
1
WideString a = "\"= ROUND((C11/(SUM(C11:C29)/100)),2)\"";
Программа как и должна пишет в ячейки текст, а не формулу.

Помогите пожалуйста разобраться, всю голову себе поломал. На просторах великого и могучего интернета ничего найти не получилось, будто все либо пользуются локальными функциями и сепараторами и не парятся, либо знают какой-то сектрет, поделиться которым не спешат
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.01.2013, 11:06
Ответы с готовыми решениями:

Вставка в Excel числа размером в 20 символов через OlePropertySet Builder'a
Доброго времени суток. Такой вопрос. Работая с Excel напрямую, справлялся с задачей вставки в ячейки чисел размером в 20 символов....

Excel+Delphi - вставка формулы
Здравствуйте, подскажите как в Delphi посчитать сумму начиная с определенной ячейки(D12) до неопределенной ? exapp.Range.Formula :=...

вставка формулы
в екселе создаю три колонки содержащие параметры цвета в R/G/B. есть формула как перевести формат цвета из RGB в HSV. как загнать формулу в...

6
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
28.01.2013, 11:27
Может ошибка возникает потому что он хочет получить именно ОКРУГЛ, а не ROUND? То есть может надо принудительно выставлять ему настройки языка?
0
 Аватар для gumi250
435 / 402 / 57
Регистрация: 06.02.2012
Сообщений: 1,384
28.01.2013, 11:35
А если без всякого билдера вбить эту формулу ручками в ексел, ошибка будет?

Добавлено через 1 минуту
А вот так
C++
1
WideString a = "= ROUND((C11/(SUM(C11:C29)/100));2)";
0
0 / 0 / 0
Регистрация: 11.09.2012
Сообщений: 6
28.01.2013, 11:49  [ТС]
SatanaXIII
Этот метод не катит, потому что:
1. Если пользовать прогу будет, например, венгр, у него может попросту не быть русских настроек excel
2. Да и не правильно это как-то, должен быть более простой способ. Microsoft врятли пишут функции на каждом языке, скорее всего пишут на английском функцию и для каждого языка к функции прицепили специальное имя. Соответсвенно лучше обращатсья именно к первоисточнику. Ну, если следовать логике.

gumi250
При таком варианте excel в ячейке пишет #ИМЯ?

Добавлено через 8 минут
А если без всякого билдера вбить эту формулу ручками в ексел, ошибка будет?
Если без билдера и vba вставлять в ячейку, то возникает "ошибка в формуле"
0
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
28.01.2013, 12:11
Цитата Сообщение от ****az Посмотреть сообщение
Этот метод не катит, потому что:
1. Если пользовать прогу будет, например, венгр, у него может попросту не быть русских настроек excel
2. Да и не правильно это как-то, должен быть более простой способ. Microsoft врятли пишут функции на каждом языке, скорее всего пишут на английском функцию и для каждого языка к функции прицепили специальное имя. Соответсвенно лучше обращатсья именно к первоисточнику. Ну, если следовать логике.
Ну просто вот такой костыль. Да может к примеру при установке венгерского языка там где-нибудь просто подменяется ROUND на что-то, то есть по аналогии с #define-ом. А сам ROUND есть всегда. И для его использования надо программно выбирать английский. Но это так, пальцем в небо. Это надо спрашивать у людей знающих как устроен Excel.

Цитата Сообщение от ****az Посмотреть сообщение
excel в ячейке пишет #ИМЯ?
А это может в Excel-есвской ячейке тип данных поменять?
0
0 / 0 / 0
Регистрация: 11.09.2012
Сообщений: 6
28.01.2013, 13:45  [ТС]
А это может в Excel-есвской ячейке тип данных поменять?
К сожалению не поможет. Он говорит, что немонимает имя функции, которую я ему подпихиваю

Добавлено через 1 час 22 минуты
Вышел из ситуации таким образом.
На Delphi, как выяснилось, такой проблемы не возникает и формула вставляется корректно.
Написал модуль небольшой и юзаю его из билдера
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
unit TExportFormulaToExcel;
interface
procedure ExportFormula(xl:Variant; Row,Col:Integer; Formula:UnicodeString);
procedure ExportRange(xl:Variant; Range: UnicodeString; data: Variant);
implementation
uses ComObj;
//Экспорт формулы в ячейку
procedure ExportFormula(xl:Variant; Row,Col:Integer; Formula:UnicodeString);
Begin
  xl.Cells[Row,Col].Formula := Formula;
End;
 
//Экспорт вариантного массива в диапазон ячеек.
procedure ExportRange(xl:Variant; Range: UnicodeString; data: Variant);
Begin
  xl.Range[Range].Value := data;
End;
 
end.
Не стал писать проверки и делать функции, возвращающие true/false не стал по тому, что у меня они в билдере все обрабатываются.
0
2 / 2 / 1
Регистрация: 08.02.2020
Сообщений: 215
14.02.2020, 09:18
Дико извиняюсь, что поднимаю такую старую тему, но более новой не нашел

Возникла та же проблема - вставку формулы Эксель понимает только по-русски. За прошедшие годы не появилось способа это пофиксить?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.02.2020, 09:18
Помогаю со студенческими работами здесь

Вставка формулы
Прошу не ругать сильно, но что то не могу сообразить как сделать, имеется таблица, в последнем столбце количество строк изменчиво, как...

Автоматическая вставка формулы
Люди, здравствуйте. Если ли способ автоматом вставлять уже имеющуюся формулу в только что созданные для таблицы строки? Формула одна...

Вставка формулы в Word
Как в Word вставить формулу (Microsoft Equation 3.0)? Есть много справок, как это сделать на Delphi и VBasic. А на C++ ни как не могу...

Вставка формулы на форму
Подскажите пожалуйста как поместить математическую формулу на форму?

Вставка формулы из макроса
Добрый день, казалось бы все должно быть просто, но стопарнулся. Пишу макрос в первый раз и в принципе не знаю синтаксиса. Ругается на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru