zoukankan      html  css  js  c++  java
  • cxgrid导出数据的格式设置(转载)

    在处理cxgrid数据导出到Excel时,遇到了不少问题,其中最主要的问题是导出数据的格式设置。而导出数据的格式问题根据发生的顺序又可以细分为两节:首先是如何将cxgrid中的数据导出成Excel对应的数据类型,即使字符串导成文本、浮点数及整数导成数值;其次是如何解决数值型导出到Excel变成带货币符号的货币型而非数值型问题。

    虽然cxgrid的帮助文档中对于cxgrid数据导出到Excel的函数有了较详细的描述(可参考前文《cxgrid数据导出到Excel方法》),但对于细节的内容并无太大帮助,至于中文的相关内容的搜索结果更是指望不上了,只好跑到官方网站上查找类似问题。等看e文看得昏昏沉沉、头晕眼花之后,才勉强清楚应该如何设置。

    1.将cxgrid中的数据导出成Excel对应的数据类型的设置:

    1.1设计时:
    1.1.1.设置字段值类型(Column.DataBinding.ValueType)
    1.1.2.设置编辑器类型(Column.Properties)
    1.2运行时:
    运行时的设置与设计时的设置类似,只是设置的属性变为Column.PropertiesClass和Column.DataBinding.ValueTypeClass。

    范例代码如下:
    //增加数据列
    procedure addCXColumn(view:TcxGridDBBandedTableView;fldName,cptText:String;
                          valWidth:Integer;align:TAlignment;
                          vtc:TcxValueTypeClass;
                          propertiesClazz:TcxCustomEditPropertiesClass;
                          canShow:boolean=true);
    begin
      with view.CreateColumn do
      begin
        Caption := cptText;
        Width := valWidth;
        Visible := canShow;
        HeaderAlignmentHorz := align;
        PropertiesClass := propertiesClazz;
        Position.BandIndex := view.Bands.Count-1;
        DataBinding.FieldName := fldName;
        DataBinding.ValueTypeClass := vtc;
      end;
    end;
    //将自定义数据类型转换为cxgrid字段的数据类型
    function transformToValueType(ftype:String):TcxValueTypeClass;
    begin
      if ftype=IC_FLD_TYPE_VARCHAR then
      begin
        result := TcxStringValueType;
        exit;
      end;
      if ftype=IC_FLD_TYPE_NUMBER then
      begin
        result := TcxFloatValueType;
        exit;
      end;
      if ftype=IC_FLD_TYPE_INT then
      begin
        result := TcxIntegerValueType;
        exit;
      end;
      if ftype=IC_FLD_TYPE_DATE then
      begin
        result := TcxDateTimeValueType;
        exit;
      end;
      result := TcxStringValueType;
    end;

    //将自定义数据类型转换为cxgrid的属性类型
    function transformToPropertiesClass(ftype:String):TcxCustomEditPropertiesClass;
    begin
      if (ftype=IC_FLD_TYPE_VARCHAR) or (ftype=IC_FLD_TYPE_DATE) then
      begin
        result := TcxTextEdit.GetPropertiesClass;
        exit;
      end;
      result := TcxSpinEdit.GetPropertiesClass;
    end;

    1.3导出函数的参数设置

    ExportGrid4ToExcel函数的AUseNativeFormat参数必须设置为true。

    1.4其他
    后来测试了下,发现字段值属性ValueType(ValueTypeClass)的设置似乎不影响导出的数据类型,不设置不会影响导出效果,而编辑器类型Properties(PropertiesClass)的设置才是影响导出效果的关键。这与帮助文档中的内容有出入,不知是何缘故。

    2.解决数值型导出到Excel变成带货币符号的货币型而非数值型问题

    按上述内容设置后导出到Excel,cxgrid的数值型内容在Excel中变成货币型,而且导出内容前会出现具体地区对应的货币符号(如人民币符号,¥)。百思不得其解,最后在官方网站搜索时找到了不少类似问题,他们的客服人员都提到这么一点——TBCDField会被默认为货币类型,而且客服人员基本都会让用户升级控件或者修改具体的代码(不同版本所需要修改的地方都不相同)。把程序运行起来并跟踪进去,发现数值型字段在导出时果然被判断为货币型。只好对源代码进行修改,步骤如下:
    step1.修改cxXLSExport.TcxXLSExportProvider.SetCellValue
        varDouble:
          SetCellDataDouble(ACol, ARow, AValue);
        varCurrency:
          SetCellDataCurrency(ACol, ARow, AValue);
    改为:
        varDouble,varCurrency:
          SetCellDataDouble(ACol, ARow, AValue);
    step2.重新编译cxExportVCLD7.dpk

    改完重新编译工程,果然生效!!!

  • 相关阅读:
    PL/SQL中判断字段为空
    ArrayList知识详解
    那些碰到过的异常
    Java中的==和equals( )方法
    String,StringBuilder和StringBuffer
    树莓派3b+_32位linux系统arm架构安装JDK
    [杂]右键拷贝文件路径
    [023]模板成员函数为什么不能是虚函数
    [杂]几个好玩的网址
    [022]c++虚函数、多态性与虚表
  • 原文地址:https://www.cnblogs.com/martian6125/p/9631093.html
Copyright © 2011-2022 走看看