powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / BDS, Excel OLE проблема с форматированием числа в ячейке
16 сообщений из 16, страница 1 из 1
BDS, Excel OLE проблема с форматированием числа в ячейке
    #34288447
Paul A. Pleshkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброе время суток All!
--
Наткнулся на такую проблему, в C++ делаю экспорт данных в Excel.
Все проходит нормально, но не могу применить форматирование числа, надо "числовой, с разделителями разрядов, 2 знака после запятой"
Код: plaintext
1.
2.
  AnsiString temp="#,##0.00";
  Sh.OlePropertyGet("Cells", Row, Column).OlePropertySet("NumberFormat", temp.c_str());
В итоге, форматирование не применяется.
Что посоветуете сделать? Ибо бухи скоро с потрохами съедят.
--
Best regards, Paul
...
Рейтинг: 0 / 0
BDS, Excel OLE проблема с форматированием числа в ячейке
    #34288533
SnowMan2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я бы написал так:

Код: plaintext
1.
2.
3.
AnsiString temp="#,##0.00";
Variant Range = Sh("Range", Диапозон);
Variant Select = Range.OleFunction("Select");
Select.OlePropertySet("NumberFormat", temp.c_str());
...
Рейтинг: 0 / 0
BDS, Excel OLE проблема с форматированием числа в ячейке
    #34288654
Paul A. Pleshkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SnowMan2Я бы написал так:

Код: plaintext
1.
2.
3.
AnsiString temp="#,##0.00";
Variant Range = Sh("Range", Диапозон);
Variant Select = Range.OleFunction("Select");
Select.OlePropertySet("NumberFormat", temp.c_str());

Не берет. Такое ощущение, что по барабану ему :(
...
Рейтинг: 0 / 0
BDS, Excel OLE проблема с форматированием числа в ячейке
    #34290506
Hryuckinnen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И не возьмёт. Сначала надо ячейку выделить (Range ["СтрокаСтолбец"].Select), а потом говорить Selection.NumberFormat = чего-нибудь.
...
Рейтинг: 0 / 0
BDS, Excel OLE проблема с форматированием числа в ячейке
    #34290558
Paul A. Pleshkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
HryuckinnenИ не возьмёт. Сначала надо ячейку выделить (Range ["СтрокаСтолбец"].Select), а потом говорить Selection.NumberFormat = чего-нибудь.
Насколько я понимаю, вышеприведенный код это и делает.
Но Excel в упор не понимает.
...
Рейтинг: 0 / 0
BDS, Excel OLE проблема с форматированием числа в ячейке
    #34290775
Hryuckinnen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вышеприведенный код

AnsiString temp="#,##0.00";
Variant Range = Sh("Range", Диапозон);
Variant Select = Range.OleFunction("Select");
Select.OlePropertySet("NumberFormat", temp.c_str());

по существу делает следующее:
Select = Range ["Диапазон"].Select
Select.NumberFormat = temp

Это основывается на допущении, что Range.Select - это есть функция, которая возвращает выбранный объект. А это не так. Выполни в Визуал Бейсике инструкцию
MsgBox Range("A1").Select
и увидишь, что происходит (она возвращает true, видимо, это означает, успешно выполнился Select или нет).

Надо делать так:

Range ["Диапазон"].Select
Selection.NumberFormat = temp
...
Рейтинг: 0 / 0
BDS, Excel OLE проблема с форматированием числа в ячейке
    #34290788
Paul A. Pleshkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
HryuckinnenВышеприведенный код

AnsiString temp="#,##0.00";
Variant Range = Sh("Range", Диапозон);
Variant Select = Range.OleFunction("Select");
Select.OlePropertySet("NumberFormat", temp.c_str());

по существу делает следующее:
Select = Range ["Диапазон"].Select
Select.NumberFormat = temp

Это основывается на допущении, что Range.Select - это есть функция, которая возвращает выбранный объект. А это не так. Выполни в Визуал Бейсике инструкцию
MsgBox Range("A1").Select
и увидишь, что происходит (она возвращает true, видимо, это означает, успешно выполнился Select или нет).

К сожалению пишется это все не на Visual Basic, а на C++
Hryuckinnen
Надо делать так:

Range ["Диапазон"].Select
Selection.NumberFormat = temp
Простите, я видимо чего то не понимаю, как это будет выглядеть на C++?
...
Рейтинг: 0 / 0
BDS, Excel OLE проблема с форматированием числа в ячейке
    #34290803
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1) Ненужно использовать метод Select и глобальный объект Selection
2) Сначала нужно поменять формат ячейки, потом писать в нее данные.
...
Рейтинг: 0 / 0
BDS, Excel OLE проблема с форматированием числа в ячейке
    #34290826
Paul A. Pleshkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
White Owl1) Ненужно использовать метод Select и глобальный объект Selection
2) Сначала нужно поменять формат ячейки, потом писать в нее данные.
Делаю сейчас так:
Код: plaintext
1.
2.
Sh.OlePropertyGet("Range",temp1);
Sh.OlePropertySet("NumberFormat",temp.c_str());
Потом добавляю данные. Таже самая картина.
...
Рейтинг: 0 / 0
BDS, Excel OLE проблема с форматированием числа в ячейке
    #34290871
Hryuckinnen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хмм, да, дело не в Selection...
Два рабочих варианта:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
void __fastcall TForm1::Button1Click(TObject *Sender)
{
        Variant Excel = CreateOleObject ("Excel.Application");
        Excel.OlePropertySet("Visible", true);
        Variant Workbooks = Excel.OlePropertyGet("Workbooks");
        Variant Wb = Workbooks.OleFunction("Add");
        Variant Range = Excel.OlePropertyGet("Range", "A1");
        Range.OleProcedure("Select");
        Variant Selection = Excel.OlePropertyGet("Selection");
        Selection.OlePropertySet("NumberFormat", "# ##0,00");
}

и

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
void __fastcall TForm1::Button2Click(TObject *Sender)
{
        Variant Excel = CreateOleObject ("Excel.Application");
        Excel.OlePropertySet("Visible", true);
        Variant Workbooks = Excel.OlePropertyGet("Workbooks");
        Variant Wb = Workbooks.OleFunction("Add");
        Variant Sh = Wb.OlePropertyGet ("ActiveSheet"); 
        Sh.OlePropertyGet("Cells",  1 ,  1 ).OlePropertySet("NumberFormat", "# ##0,00");
}

А вот маску "#,##0.00" Ексел почему-то не понимает...
...
Рейтинг: 0 / 0
BDS, Excel OLE проблема с форматированием числа в ячейке
    #34290878
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Paul A. PleshkovДелаю сейчас так:
Код: plaintext
1.
2.
Sh.OlePropertyGet("Range",temp1);
Sh.OlePropertySet("NumberFormat",temp.c_str());
Потом добавляю данные. Таже самая картина.Sh это объект представляющий лист? Листу поменять формат нельзя.
...
Рейтинг: 0 / 0
BDS, Excel OLE проблема с форматированием числа в ячейке
    #34290996
Paul A. Pleshkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Огромное спасибо всем!
Заработало.
Теперь осталось разобраться как изменить высоту строки, если там много данных, но это уже мелочи, хотя, если кто подскажет - буду рад.
...
Рейтинг: 0 / 0
BDS, Excel OLE проблема с форматированием числа в ячейке
    #34291014
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Paul A. PleshkovТеперь осталось разобраться как изменить высоту строки, если там много данных, но это уже мелочи, хотя, если кто подскажет - буду рад.Примерно так:
Код: plaintext
 Sh.OlePropertyGet("Rows",  5 ).OlePropertySet("RowHeight",  20 );
...
Рейтинг: 0 / 0
BDS, Excel OLE проблема с форматированием числа в ячейке
    #34291027
Paul A. Pleshkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
White Owl Paul A. PleshkovТеперь осталось разобраться как изменить высоту строки, если там много данных, но это уже мелочи, хотя, если кто подскажет - буду рад.Примерно так:
Код: plaintext
 Sh.OlePropertyGet("Rows",  5 ).OlePropertySet("RowHeight",  20 );

Спасибо. Проверю завтра.
...
Рейтинг: 0 / 0
BDS, Excel OLE проблема с форматированием числа в ячейке
    #34291045
Hryuckinnen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Другой вариант (команда Формат->Строка->Автоподбор высоты):
Код: plaintext
1.
        Sh.OlePropertyGet("Rows",  5 ).OleProcedure("AutoFit");
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
BDS, Excel OLE проблема с форматированием числа в ячейке
    #39929511
Фотография Max-xaM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Paul A. Pleshkov,

расскажи как починил
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / BDS, Excel OLE проблема с форматированием числа в ячейке
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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