Вывод формул в MS Excel
От: DiBa Россия  
Дата: 08.01.02 09:31
Оценка:
Столкнулся с такой проблемой. Пишу на C++ Builder программу, которая выводит отчет в MS Excel 97, в частности, некоторые ячейки заполняются формулами, содержащими функцию SUM. Незадача в том, что в руссифицированной версии Excel эта функция (да и остальные тоже) называется по-другому — СУММ. Так вот вопрос: как написать программу универсально, чтобы вне зависимости от того, какая версия Excel установлена (я имею в виду, русская или английская), формула выводилась корректно? Кто-то, может быть, скажет, что это невозможно или нужно просто предусмотреть вывод разных названий для разных версий. Но если написать этот же код на Visual Basic и указать, что функция называется "SUM", то такая программа прекрасно выводит в английский Excel "SUM", а в русский — "СУММ".
Re: Вывод формул в MS Excel
От: retalik www.airbandits.com/
Дата: 09.01.02 12:51
Оценка:
Здравствуйте DiBa, Вы писали:

DB>Столкнулся с такой проблемой. Пишу на C++ Builder программу, которая выводит отчет в MS Excel 97, в частности, некоторые ячейки заполняются формулами, содержащими функцию SUM. Незадача в том, что в руссифицированной версии Excel эта функция (да и остальные тоже) называется по-другому — СУММ. Так вот вопрос: как написать программу универсально, чтобы вне зависимости от того, какая версия Excel установлена (я имею в виду, русская или английская), формула выводилась корректно? Кто-то, может быть, скажет, что это невозможно или нужно просто предусмотреть вывод разных названий для разных версий. Но если написать этот же код на Visual Basic и указать, что функция называется "SUM", то такая программа прекрасно выводит в английский Excel "SUM", а в русский — "СУММ".


Ты прекрасно можешь писать "SUM" для формул. Это поймет и русский Ёксель, и все остальные.
Успехов,
Виталий.
Re[2]: Вывод формул в MS Excel
От: DiBa Россия  
Дата: 10.01.02 08:42
Оценка:
Здравствуйте retalik, Вы писали:

R>Здравствуйте DiBa, Вы писали:


DB>>Столкнулся с такой проблемой. Пишу на C++ Builder программу, которая выводит отчет в MS Excel 97, в частности, некоторые ячейки заполняются формулами, содержащими функцию SUM. Незадача в том, что в руссифицированной версии Excel эта функция (да и остальные тоже) называется по-другому — СУММ. Так вот вопрос: как написать программу универсально, чтобы вне зависимости от того, какая версия Excel установлена (я имею в виду, русская или английская), формула выводилась корректно? Кто-то, может быть, скажет, что это невозможно или нужно просто предусмотреть вывод разных названий для разных версий. Но если написать этот же код на Visual Basic и указать, что функция называется "SUM", то такая программа прекрасно выводит в английский Excel "SUM", а в русский — "СУММ".


R>Ты прекрасно можешь писать "SUM" для формул. Это поймет и русский Ёксель, и все остальные.


Ты сам-то пробовал? Если в русском Ёкселе написать "SUM" вместо "СУММ", то в результате отобразится загадочная надпись "#ИМЯ?". Как раз вопрос был про то, как заставить Excel изменять стандартное английское имя фукнции на локализованное, потому что при автоматизации из программы на C++ этого не происходит, а вот на Visual Basic почему-то происходит.
Re[3]: Вывод формул в MS Excel
От: retalik www.airbandits.com/
Дата: 10.01.02 10:40
Оценка:
Здравствуйте DiBa, Вы писали:

DB>Здравствуйте retalik, Вы писали:


R>>Ты прекрасно можешь писать "SUM" для формул. Это поймет и русский Ёксель, и все остальные.


DB>Ты сам-то пробовал? Если в русском Ёкселе написать "SUM" вместо "СУММ", то в результате отобразится загадочная надпись "#ИМЯ?". Как раз вопрос был про то, как заставить Excel изменять стандартное английское имя фукнции на локализованное, потому что при автоматизации из программы на C++ этого не происходит, а вот на Visual Basic почему-то происходит.


Пробовал, и не раз. У меня подозрение, что ты с Unicode-строками что-то перепутал.

Вот тебе работающая через #import программа ('SUM' ставлю через .Value и символ '=', но можно и через .Formula):
#import "mso9.dll" no_namespace rename("DocumentProperties", "DocumentPropertiesXL")   

#import "vbe6ext.olb" no_namespace   

#import "excel9.olb" rename("DialogBox", "DialogBoxXL") rename("RGB", "RBGXL") rename("DocumentProperties", "DocumentPropertiesXL") no_dual_interfaces

#pragma warning (disable:4192)

void main()
{
    CoInitialize(NULL); 
    using namespace Excel;
    _ApplicationPtr pXL;
    try 
    {
        pXL.CreateInstance(L"Excel.Application");
        pXL->Visible = VARIANT_TRUE;
        WorkbooksPtr pBooks = pXL->Workbooks;
        _WorkbookPtr pBook  = pBooks->Add((long)xlWorksheet);
        _WorksheetPtr pSheet = pXL->ActiveSheet;
        pSheet->Range["A1:A10"]->Value = 100L;
        pSheet->Range["A11"]->Value = "=SUM(A1:A10)";
    }
    catch(_com_error &e)
    {
        MessageBox(0, e.Source()+" "+e.Description()+" "+e.ErrorMessage(), 
            "Error!", MB_OK);
    }
    CoUninitialize(); 
}
Успехов,
Виталий.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.