Форматирование данных и экспорт в Excel
Имею таблицу данных, в ней есть числовые поля с плавающей точкой, которым я задал формат отображения с разделителем разрядов (например, для выручки формат есть ",0.00"). Точнее нужным полям dataset-а задан формат как для их отображения например в обычном grid-е, а при открытии куба эти форматы копируются как есть в соответствующие поля куба (может для полей куба формат должен задаваться по-другому?). Так вот, в самой таблице все отлично, но когда начинаешь сохранять ее в Excel, то информация переносится почти как текст вместе с этим псевдопробелом, и до тех пор, пока в Excel-е не сделать замену этого псевдопробела на пустое место, с сохраненной инфой невозможно работать как с числами. Можно ли это как-то победить?
Та же самая история когда открываешь по двойному клику детализацию ячейки, а может это и еще хуже, поскольку при этом появляется дополнительная форма, а в нее вообще можно влезть хоть какими-то обработчиками?
Вот вроде мелочь, а неприятно и народу страшно не нравится.
Та же самая история когда открываешь по двойному клику детализацию ячейки, а может это и еще хуже, поскольку при этом появляется дополнительная форма, а в нее вообще можно влезть хоть какими-то обработчиками?
Вот вроде мелочь, а неприятно и народу страшно не нравится.
Комментарии
Не могли бы Вы уточнить:
1. Версия FastCube
2. Речь идет о экспорте или о копировании через буфер обмена?
3. О значении каких полей идет речь: показатель или измерение?
С уважением, Олег
1. FastCube версия 1.5
2. Пробовал и копировать через буфер, и экспортом, а в форме детализации через стандартную кнопку экспорта - эффект одинаковый
3. Речь ведется о показателях, т. е. наполнении таблицы
Более того, как я потом убедился, этот эффект проявляется даже если не задавать форматы, т.е. экспортируется также как есть на экране, убрать этот псевдопробел удалось только поставив в DefaultFormat.FormatFloat параметр Kind в значение fkText, причем сделать это в момент формирования куба
Советую обновиться до последней текущей версии (1.6.6).
Что касается форматов:
-При экспорте в Excel основной таблицы, для числовых значений показателей не используется формат, указанный в показателе: для преобразования в строку применяется стандартная функция S := FloatToStr( R ).
Проверьте пожалуйста!
-При экспорте в Excel основной таблицы, для значений измерений используется формат, указанный в соответствующем поле.
-При экспорте в Excel таблицы детализации, используется формат, указанный в соответствующем поле.
Исправлю.
-При копировании через буфер обмена, используется формат, указанный в соответствующем поле или показателе.
Исправлю.
DefaultFormat используется при создании полей куба для инициализации их форматов. Не стоит устанавливать для FormatFloat параметр Kind в значение fkText, лучше FormatStr установить в '%2.2f'. После активации куба Вы можете для любого поля или показателя индивидуально поменять формат отображения.
Так-же имейте ввиду, что формат полей сохраняется в при сохранении куба, а формат показателей при сохранении схемы.
Как вариант, Вы можете обрабатывать событие OnExportTo, возникающее при вызове экспорта основной таблице, и в нем устанавливать нужный формат показателя, делать экспорт (придется вызывать его самостоятельно), а затем восстанавливать формат обратно.
С уважением, Олег.
1. Нашел я внутри компонента такую функцию TfcDetailGrid.ExportTo и воткнул в нее выдавать сообщения что было запихано в List, а также во вложенной функции TD параметра AText, переустановил компоненту, предварительно удалив все файлы типа obj, dcu и т.д. - ни одного сообщения я не получил, при этом файл сформировался. Более того, у меня не получается эту процедуру отлаживать, точку остановки удается поставить только на строчку создания объекта List и почти все внутренние действия потом проскакиваются. Хотел в нее встроить удаление этого псевдопробела, но получил вот такой интересный эффект. (извиняюсь если очень сложно описал ситуацию)
2. А вот тут просьба объяснить как работает событие OnDataDblClick у основной таблицы. Я нашел в классе таблицы функцию DefaultDataDblClick и переписал ее в обработчик этого события, собираясь дальше кое-что в нем поменять, но в результате даже при наличии обработчика вызывается стандартная DefaultDataDblClick, а в этот обработчик даже не заходит. Может для перехвата события надо установать еще какое-то свойство?
На всякий случай сообщаю, что работаю в C++Builder 6, если это важно
Чтобы работал обработчик события OnDataDblClick, Вам надо отключить опцию mdgoDrillThroughOnDblClick в гриде.
В обработчике Вы можете создать собственную форму для отображения детализации.
Получить список детализации можно у слайса:
function GetDetailInfoVis(XAxisIndex, YAxisIndex: Integer; AWithCaption: boolean = True; AUseCaption: boolean = True): TfcDetailInfo;
AUseCaption - как раз и указывает, использовать в детализации формат или показывать значения как есть.
TfcDetailInfo = class
public
property Items[AFieldIndex, AIndex: Integer]: Variant read GetItems write SetItems; default;
property Alignments[AFieldIndex: Integer]: TAlignment read GetAlignments write SetAlignments;
property FieldCount: Integer read FFieldCount;
property Count: Integer read FCount;
end;
По вопросу, почему у Вас не получается работа с исходными кодами куба в C++Builder 6, я вряд-ли смогу помочь.
В принципе никаких сложностей возникнуть не должно.
С уважением, Олег.