Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / BDS, Excel OLE проблема с форматированием числа в ячейке / 16 сообщений из 16, страница 1 из 1
29.01.2007, 01:14
    #34288447
Paul A. Pleshkov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
BDS, Excel OLE проблема с форматированием числа в ячейке
Доброе время суток 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
29.01.2007, 06:21
    #34288533
SnowMan2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
BDS, Excel OLE проблема с форматированием числа в ячейке
Я бы написал так:

Код: 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
29.01.2007, 09:16
    #34288654
Paul A. Pleshkov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
BDS, Excel OLE проблема с форматированием числа в ячейке
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
29.01.2007, 17:02
    #34290506
Hryuckinnen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
BDS, Excel OLE проблема с форматированием числа в ячейке
И не возьмёт. Сначала надо ячейку выделить (Range ["СтрокаСтолбец"].Select), а потом говорить Selection.NumberFormat = чего-нибудь.
...
Рейтинг: 0 / 0
29.01.2007, 17:15
    #34290558
Paul A. Pleshkov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
BDS, Excel OLE проблема с форматированием числа в ячейке
HryuckinnenИ не возьмёт. Сначала надо ячейку выделить (Range ["СтрокаСтолбец"].Select), а потом говорить Selection.NumberFormat = чего-нибудь.
Насколько я понимаю, вышеприведенный код это и делает.
Но Excel в упор не понимает.
...
Рейтинг: 0 / 0
29.01.2007, 18:11
    #34290775
Hryuckinnen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
BDS, Excel OLE проблема с форматированием числа в ячейке
Вышеприведенный код

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
29.01.2007, 18:16
    #34290788
Paul A. Pleshkov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
BDS, Excel OLE проблема с форматированием числа в ячейке
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
29.01.2007, 18:20
    #34290803
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
BDS, Excel OLE проблема с форматированием числа в ячейке
1) Ненужно использовать метод Select и глобальный объект Selection
2) Сначала нужно поменять формат ячейки, потом писать в нее данные.
...
Рейтинг: 0 / 0
29.01.2007, 18:28
    #34290826
Paul A. Pleshkov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
BDS, Excel OLE проблема с форматированием числа в ячейке
White Owl1) Ненужно использовать метод Select и глобальный объект Selection
2) Сначала нужно поменять формат ячейки, потом писать в нее данные.
Делаю сейчас так:
Код: plaintext
1.
2.
Sh.OlePropertyGet("Range",temp1);
Sh.OlePropertySet("NumberFormat",temp.c_str());
Потом добавляю данные. Таже самая картина.
...
Рейтинг: 0 / 0
29.01.2007, 18:41
    #34290871
Hryuckinnen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
BDS, Excel OLE проблема с форматированием числа в ячейке
Хмм, да, дело не в 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
29.01.2007, 18:44
    #34290878
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
BDS, Excel OLE проблема с форматированием числа в ячейке
Paul A. PleshkovДелаю сейчас так:
Код: plaintext
1.
2.
Sh.OlePropertyGet("Range",temp1);
Sh.OlePropertySet("NumberFormat",temp.c_str());
Потом добавляю данные. Таже самая картина.Sh это объект представляющий лист? Листу поменять формат нельзя.
...
Рейтинг: 0 / 0
29.01.2007, 19:38
    #34290996
Paul A. Pleshkov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
BDS, Excel OLE проблема с форматированием числа в ячейке
Огромное спасибо всем!
Заработало.
Теперь осталось разобраться как изменить высоту строки, если там много данных, но это уже мелочи, хотя, если кто подскажет - буду рад.
...
Рейтинг: 0 / 0
29.01.2007, 19:48
    #34291014
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
BDS, Excel OLE проблема с форматированием числа в ячейке
Paul A. PleshkovТеперь осталось разобраться как изменить высоту строки, если там много данных, но это уже мелочи, хотя, если кто подскажет - буду рад.Примерно так:
Код: plaintext
 Sh.OlePropertyGet("Rows",  5 ).OlePropertySet("RowHeight",  20 );
...
Рейтинг: 0 / 0
29.01.2007, 19:52
    #34291027
Paul A. Pleshkov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
BDS, Excel OLE проблема с форматированием числа в ячейке
White Owl Paul A. PleshkovТеперь осталось разобраться как изменить высоту строки, если там много данных, но это уже мелочи, хотя, если кто подскажет - буду рад.Примерно так:
Код: plaintext
 Sh.OlePropertyGet("Rows",  5 ).OlePropertySet("RowHeight",  20 );

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

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


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