link8662 link8663 link8664 link8665 link8666 link8667 link8668 link8669 link8670 link8671 link8672 link8673 link8674 link8675 link8676 link8677 link8678 link8679 link8680 link8681 link8682 link8683 link8684 link8685 link8686 link8687 link8688 link8689 link8690 link8691 link8692 link8693 link8694 link8695 link8696 link8697 link8698 link8699 link8700 link8701 link8702 link8703 link8704 link8705 link8706 link8707 link8708 link8709 link8710 link8711 link8712 link8713 link8714 link8715 link8716 link8717 link8718 link8719 link8720 link8721 link8722 link8723 link8724 link8725 link8726 link8727 link8728 link8729 link8730 link8731 link8732 link8733 link8734 link8735 link8736 link8737 link8738 link8739 link8740 link8741 link8742 link8743 link8744 link8745 link8746 link8747 link8748 link8749 link8750 link8751 link8752 link8753 link8754 link8755 link8756 link8757 link8758 link8759 link8760 link8761 link8762 link8763 link8764 link8765 link8766 link8767 link8768 link8769 link8770 link8771 link8772 link8773 link8774 link8775 link8776 link8777 link8778 link8779 link8780 link8781 link8782 link8783 link8784 link8785 link8786 link8787 link8788 link8789 link8790 link8791 link8792 link8793 link8794 link8795 link8796 link8797 link8798 link8799 link8800 link8801 link8802 link8803
C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Почему не форматируется ячейка в Excel
laifik
Отправлено: 17.09.2003, 15:27


Дежурный стрелочник

Группа: Участник
Сообщений: 70



Уже надоевший всем Excel. Вроде бы уже все работает, а такой пустяк, как форматирование ячейки не хочет. Пишу

// Устанавливаем формат числа для ячейки
Sh.OlePropertyGet("Cells", 1, 9).OlePropertySet("NumberFormat", "0.00");

Нормально компелируется, но призапуске события на передачу данных в Excel пишет сообщение "Ошибка". Если заменяю точку на запятую (как это смотрится в Excel) "0,00", то ошибки не выдает, запускает Excel, выводит данные, но данные выводятся с несколькими знаками после запятой. В чем тут дело? wink.gif
Borgir
Отправлено: 18.09.2003, 05:50


Дежурный стрелочник

Группа: Участник
Сообщений: 48



Попробуй так:

AnsiString temp="0,00";
Sh.OlePropertyGet("Cells", 1, 9).OlePropertySet("NumberFormat", temp.c_str());
laifik
Отправлено: 18.09.2003, 10:45


Дежурный стрелочник

Группа: Участник
Сообщений: 70



А так работает. Спасибо большое, сама почему-то не додумалась. smile.gif
Георгий
Отправлено: 18.09.2003, 22:28


Почетный железнодорожник

Группа: Модератор
Сообщений: 874



Объясните мне, почему
CODE
Sh.OlePropertyGet("Cells", 1, 9).OlePropertySet("NumberFormat", "0,00");

не работает, а
CODE
AnsiString temp="0,00";
Sh.OlePropertyGet("Cells", 1, 9).OlePropertySet("NumberFormat", temp.c_str());
работает.
Borgir
Отправлено: 19.09.2003, 06:04


Дежурный стрелочник

Группа: Участник
Сообщений: 48



Наверно потому, что все такого рода параметры для ОЛЕ процедур надо передавать как CHAR а не как STRING. А почему так сделали? Это наверно вопрос к разработчикам. А может это просто для упрощения связи с Визуал Бэйсиком.
Георгий
Отправлено: 19.09.2003, 08:51


Почетный железнодорожник

Группа: Модератор
Сообщений: 874



А неявное преобразование типа разве не подставит то, что надо?

Отредактировано Георгий — 19/09/2003, 09:53
Borgir
Отправлено: 19.09.2003, 10:07


Дежурный стрелочник

Группа: Участник
Сообщений: 48



Видимо в данном месте Билдер опускает руки и сдается smile.gif
Да и вообще я во многих случаях убедился, что лучше использовать явное преобразование типов, а то можно получить совсем не то, что ожидаешь.

Вернуться в Вопросы программирования в C++Builder