AX 2009 报表替换Excel显示

报表替换Excel显示

报表还是不够灵活,不够好用。特别是当项目内容过多,显示的数值过长时候都会用##替代,而打印不出来。

而且定宽,定高,不方便调整。我们开发的辛苦,客户用的也不舒服。

双方都不爽,最后弄了个Excel,算是解决了这个问题。

先要弄个Excel模板文件,然后把数据内容逐个填充到单元格即可,客户爱拖爱调,那就是他的事了。

续上篇,调用接收参数报表类

public   class  ReportRun extends ObjectRun
{
    
int                          g_Year;
    PurchYearCollectTable       g_PurchYCTable;
    Array                       g_Arr;
    SysExcelApplication         excel;
    SysExcelWorkbooks           books;
    SysExcelWorkbook            book;
    SysExcelWorksheets          sheets;
    SysExcelWorksheet           sheet;
    SysExcelCells               cells;
    SysExcelCell                cell;
    SysExcelRange               columns;
    SysExcelRange               column;
    COM                         range,row;
    FileName                    fileName;
    
int                          rowNum;
    real                        pricesCount;

    
private   void  excelHead()
    {
      container       m_Title;
      ;
      cell 
=  cells.item( 1 , 5 );

      m_Title 
=   this .read(cell);

      cell.value(strfmt(conpeek (m_Title,
1 ),g_Year));
    }

    
private   void  excelTable()
    {
      PurchYearCollect                m_PurchYearC;
    
int                                  i,arrLeng,rowN,rowR;
    ;

    rowN 
=   4 ;

    arrLeng 
=  g_Arr.lastIndex()  +   1 ;

    
for (i  =   1 ;i < arrLeng;i ++ )
    {
        m_PurchYearC 
=  g_Arr.value(i);

        
if (rowN  >   5 )
        {
            range 
=  sheet.range(strfmt( " A%1:N%1 " ,rowN - 1 )).comObject();
            row 
=  range.EntireRow();
            row.copy();
            row.insert();
        }

        cell 
=  cells.item(rowN, 1 );
        cell.value(m_PurchYearC.getItemName());

        cell 
=  cells.item(rowN, 2 );
        cell.value(m_PurchYearC.getPrice(
1 ));

        cell 
=  cells.item(rowN, 3 );
        cell.value(m_PurchYearC.getPrice(
2 ));

        cell 
=  cells.item(rowN, 4 );
        cell.value(m_PurchYearC.getPrice(
3 ));

        cell 
=  cells.item(rowN, 5 );
        cell.value(m_PurchYearC.getPrice(
4 ));

        cell 
=  cells.item(rowN, 6 );
        cell.value(m_PurchYearC.getPrice(
5 ));

        cell 
=  cells.item(rowN, 7 );
        cell.value(m_PurchYearC.getPrice(
6 ));

        cell 
=  cells.item(rowN, 8 );
        cell.value(m_PurchYearC.getPrice(
7 ));

        cell 
=  cells.item(rowN, 9 );
        cell.value(m_PurchYearC.getPrice(
8 ));

        cell 
=  cells.item(rowN, 10 );
        cell.value(m_PurchYearC.getPrice(
9 ));

        cell 
=  cells.item(rowN, 11 );
        cell.value(m_PurchYearC.getPrice(
10 ));

        cell 
=  cells.item(rowN, 12 );
        cell.value(m_PurchYearC.getPrice(
11 ));

        cell 
=  cells.item(rowN, 13 );
        cell.value(m_PurchYearC.getPrice(
12 ));

        rowN
++ ;
    }

    rowN 
+=   3 ;
    rowR 
=  rowN  +   1 ;

    
for (i  =   1 ;i < arrLeng;i ++ )
    {
        m_PurchYearC 
=  g_Arr.value(i);

        
if (rowN  >  rowR)
        {
            range 
=  sheet.range(strfmt( " A%1:M%1 " ,rowN - 1 )).comObject();
            row 
=  range.EntireRow();
            row.copy();
            row.insert();
        }

        cell 
=  cells.item(rowN, 1 );
        cell.value(m_PurchYearC.getItemName());

        cell 
=  cells.item(rowN, 2 );
        cell.value(m_PurchYearC.getRate(
1 ));

        cell 
=  cells.item(rowN, 3 );
        cell.value(m_PurchYearC.getRate(
2 ));

        cell 
=  cells.item(rowN, 4 );
        cell.value(m_PurchYearC.getRate(
3 ));

        cell 
=  cells.item(rowN, 5 );
        cell.value(m_PurchYearC.getRate(
4 ));

        cell 
=  cells.item(rowN, 6 );
        cell.value(m_PurchYearC.getRate(
5 ));

        cell 
=  cells.item(rowN, 7 );
        cell.value(m_PurchYearC.getRate(
6 ));

        cell 
=  cells.item(rowN, 8 );
        cell.value(m_PurchYearC.getRate(
7 ));

        cell 
=  cells.item(rowN, 9 );
        cell.value(m_PurchYearC.getRate(
8 ));

        cell 
=  cells.item(rowN, 10 );
        cell.value(m_PurchYearC.getRate(
9 ));

        cell 
=  cells.item(rowN, 11 );
        cell.value(m_PurchYearC.getRate(
10 ));

        cell 
=  cells.item(rowN, 12 );
        cell.value(m_PurchYearC.getRate(
11 ));

        cell 
=  cells.item(rowN, 13 );
        cell.value(m_PurchYearC.getRate(
12 ));

        rowN
++ ;
    }

    excel.visible(
true );
    }

    Container read(SysExcelCell sysExcelCell)
    {
    container       line;
    
int              intvalue;
    real            realvalue;
    ;
    
switch  (sysExcelCell.value().variantType())
    {
        
case  COMVariantType::VT_EMPTY:
            line 
+=   0 ;
            
break ;

        
case  COMVariantType::VT_I1:
            line 
+=  sysExcelCell.value(). char ();
            
break ;

        
case  COMVariantType::VT_I2:
            line 
+=  sysExcelCell.value(). short ();
            
break ;

        
case  COMVariantType::VT_I4:
            intValue 
=  sysExcelCell.value(). int ();
            
if  (intValue  ==   0 )
            {
                intValue 
=  sysExcelCell.value(). long ();
            }
            line 
+=  intValue;
            
break ;

        
case  COMVariantType::VT_UI1:
            line 
+=  sysExcelCell.value(). byte ();
            
break ;

        
case  COMVariantType::VT_UI2:
            line 
+=  sysExcelCell.value().uShort();
            
break ;

        
case  COMVariantType::VT_UI4:
            intValue 
=  sysExceLCell.value().uInt();
            
if  (intValue  ==   0 )
            {
                intValue 
=  sysExcelCell.value().uLong();
            }
            line 
+=  intValue;
            
break ;

        
case  COMVariantType::VT_R4 :
            realValue 
=  sysExcelCell.value(). float ();
            line 
+=  realValue;
            
break ;

        
case  COMVariantType::VT_R8 :
            realValue 
=  sysExcelCell.value(). double ();
            line 
+=  realValue;
            
break ;

        
case  COMVariantType::VT_DECIMAL :
            realValue 
=  sysExcelCell.value(). decimal ();
            line 
+=  realValue;
            
break ;

        
case  COMVariantType::VT_BSTR :
            line 
+=  SysExcelCell.value().bstr();
            
break ;
        
default :
            
throw  error(strfmt( " @SYS26908 " , sysExcelCell.value().variantType()));
    }

    
return   line;
    }

    
private   void  excelImport()
    {
    FilenameOpen                m_file;
    VendParameters              m_parameter;
    ;

    select firstonly m_parameter;
    m_file 
=  m_parameter.PurchYearPrintModel;

    excel 
=  SysExcelApplication::construct();

    books 
=  excel.workbooks();

    
if ( ! books.open(m_file))
        
return ;

    
if ( ! books.count())
    {
        info(
" no content! " );
        
return ;
    }

    book 
=  books.item( 1 );
    sheets 
=  book.worksheets();
    sheet 
=  sheets.itemFromNum( 1 );
    cells 
=  sheet.cells();

    }

    
private   void  PriceRedution()
    {
    PurchLineView           m_PurchLineView;
    utcDateTime                 m_BeginTime,m_EndTime,m_BeginYear;
    Date                        m_BeginDate,m_EndDate;
    
int                          i,r;
    real                        downPrice,total,lastPrice;
    str                         m_ItemName;
    MainTypeTable           m_MainType;
    PurchYearCollect        m_PurchYear;
    PurchLine                   m_PurchLine,t_PurchLine;
    real                        tmpPrice,tmpQty;
    ;

    g_Arr 
=   new  Array(Types::Class);

    r 
=   1 ;

    m_BeginYear 
=  DateTimeUtil::newDateTime(mkdate( 1 , 1 ,g_Year), 0 );

    
while  select m_MainType
    {
        m_PurchYear 
=   new  PurchYearCollect();

        m_PurchYear.setItemName(m_MainType.Name);

        m_BeginDate 
=  mkdate( 1 , 1 ,g_Year);
        m_EndDate 
=  mkdate( 31 , 1 ,g_Year);

        
for (i  =   1 ;i < 13 ;i ++ )
        {
            m_BeginTime 
=  DateTimeUtil::newDateTime(m_BeginDate, 0 );
            m_EndTime 
=  DateTimeUtil::newDateTime(m_EndDate, 3600 * 24 - 1 );

            total 
=   0 ;
            downPrice 
=   0 ;

            
// while select sum(PurchQty) from m_PurchLineView
            
// group by m_PurchLineView.MainTypeId
            
// where m_PurchLineView.createdDateTime1 > m_BeginTime && m_PurchLineView.createdDateTime1 < m_EndTime
            
// && m_PurchLineView.MainTypeId == m_MainType.MainTypeId
            
// {
                 while  select m_PurchLineView
                
where  m_PurchLineView.createdDateTime  >  m_BeginTime  &&  m_PurchLineView.createdDateTime  <  m_EndTime
                
&&  m_PurchLineView.MainTypeId  ==  m_MainType.MainTypeId
                {
                    lastPrice 
=   0 ;

                    
while  select firstonly t_PurchLine order by t_PurchLine.createdDateTime desc  where  t_PurchLine.ItemId  ==  m_PurchLineView.ItemId
                    
&&  t_PurchLine.createdDateTime  <  m_BeginYear
                    {
                        lastPrice 
=  t_PurchLine.PurchPrice;
                    }

                    
if ( ! t_PurchLine)
                    {
                        
while  select firstonly t_PurchLine order by t_PurchLine.createdDateTime asc
                        
where  t_PurchLine.ItemId  ==  m_PurchLineView.ItemId
                        {
                            lastPrice 
=  t_PurchLine.PurchPrice;
                        }
                    }

                    tmpPrice 
=  m_PurchLineView.PurchPrice;
                    tmpQty 
=  m_PurchLineView.PurchQty;

                    downPrice 
+=  (tmpPrice  -  lastPrice)  *  tmpQty;
                    total 
+=  tmpPrice  *  tmpQty;
                }
            
// }

            m_BeginDate 
=  nextmth(m_BeginDate);
            m_EndDate 
=  endmth(nextmth(m_EndDate));

            m_PurchYear.setPrice(i,downPrice);
            m_PurchYear.setTotal(i,total);
        }

        g_Arr.value(r,m_PurchYear);

        
++ r;
     }
    }

    
public  boolean fetch()
    {
    ;
    
this .excelImport();
    
this .excelHead();
    
this .excelTable();

    
throw   "" ;   // 出处抛出空异常,报表最后就不显示

    
return   false ;
    }

    
public   void  init()
    {
     PurYearClass        m_PurYear;
    ;

    super();

    m_PurYear 
=  element.args().caller();

    g_Year 
=  m_PurYear.getYear();

    Title.text(strfmt(
" @SYS1303 " ,g_Year));

      
this .PriceRedution();   // 技术月降价汇总的方法
    }
}

 

 

转载于:https://www.cnblogs.com/Kurodo/archive/2011/08/15/2139750.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值