Excel技巧教程:数据集导出excel时进行重组

发布: 2009-2-16 11:47  作者: 网络转载  查看: 564次 共有0条评论

技巧教程:数据集导出excel时进行重组

  前阵子,一个同学让我分析两份数据以及一段Dephi编写的代码,他自己已初步实现了从数据集到Excel的导出,但没有实现换行以及出现了除第一列外其余列均缺少一行记录的问题。因此希望我帮忙完成将同时将一个生产单上的多个产品编码的配置情况导入到同一个excel中的算法。其初始数据(在数据集中)大体如下:

订单编号     名称          属性编码  属性值
0000001     A基础信息     功能     单功能
0000001     A基础信息     外观      WG
0000001     B结构技术要求   内部颜色  白色
0000001     B结构技术要求   外部颜色  红色
0000001     C其他技术要求   分级     A类
0000001     D参数信息      X       100
0000001     D参数         Y       200

  最终效果数据(在Excel中显示):

A基础信息     B结构技术要求   C其他技术要求
功能:单功能    内部颜色:白色  分级:A类
外观:WG      外部颜色:红色

  D参数信息

X:100
Y:200

  根据初始图以及最终效果显示,Excel以每3列换行,并实现不同名称的属性码及属性值的获取。源码如下:

 tRow :=3;----由于有Excel表头信息,因此实际从第三行起实现,存放的是名称
 iRow :=tRow+1;---设置初始的属性信息的起始行
 Max :=iRow;---获取处于同行名称中属性信息量最大值
  iCol :=1; -----列
cdsViewCPDConfigInfl.First;---将记录集移至第一行,其中记录集是按照名称进行排序的
strcpd :=cdsViewCPDConfigInfl.fieldbyname('名称').asstring;---获取当前记录集中名称值并存放在变量中,以便后期的比较归类
     cdsViewCPDConfigInfl.Eof do
begin
      //在组名称相同的情况下写该组下的行数据
      if cdsViewCPDConfigInfl.fieldbyname(名称).asstring = strcpd then
       begin
        eclapp2.WorkSheets[i].cells[tRow, iCol].value := cdsViewCPDConfigInfl.fieldbyname(名称).asstring ;//写组名
        eclapp2.WorkSheets[i].cells[iRow, iCol].value := cdsViewCPDConfigInfl.fieldbyname(属性编码).asstring +
          ':' + cdsViewCPDConfigInfl.fieldbyname(属性值).asstring;
        INC(iRow);
       end
      else //分组换列
       begin
        if iRow>Max then
        Max :=iRow+1;     ---获取最大的行值
        if iCol>3 then     ----判断列值,当列为4,进行换行
        begin
          tRow :=Max;       ----换行时,首先获取最新组名的起始行
          iCol :=0;          ----同时将列置为0
        end;
        iRow :=tRow+1;  ----设置新组名属性信息的起始行
        eclapp2.WorkSheets[i].cells[tRow, iCol+1].value := cdsViewCPDConfigInfl.fieldbyname('GROUPNAME').asstring ;//写组名称
        eclapp2.WorkSheets[i].cells[iRow, iCol+1].value := cdsViewCPDConfigInfl.fieldbyname('ATTR_NUMBER').asstring +
          ':' + cdsViewCPDConfigInfl.fieldbyname('ATTR_VALUE').asstring; //写属性名跟属性值
        INC(iRow);     ----行数叠加
 INC(iCol);            -----列数叠加
       end ;
   cdsViewCPDConfigInfl.Next;
  end; 

  注:在换列时,起初由于单纯的以为只需要进行列数叠加,使得除第一列以外的所有列均少了一行属性信息。INC(iRow)是必须的;在列达到3换行时,所以将icol设置为0,是考虑到不换行时iCol为加一。

  在此附上Dephi以及VB编写的主要源码,见附件。我想关于下面的代码,也许有待于改善,请提出意见或建议

相关阅读
大家对 Excel技巧教程:数据集导出excel时进行重组 的评论
最新PPT教程
最新评论
PPT问答