• AX 2009 Excel操作方法


    Excel的操作

    此篇讲点AX下的excel操作,打开,写入,复制,插入,读取,显示。excel保存为模板,然后在AX通过SysExcelApplication   SysExcelWorkbooks    SysExcelWorkbook    SysExcelWorksheets    SysExcelWorksheet    SysExcelCells    SysExcelCell   等对象打开模板对单元格进行值的填充,最后以临时打开的方式显示给用户。

    用户是保存到哪里,还是直接关闭,都交给用户去决定。

    这次就不上图了,以代码为主。

    View Code
    public class ReportRun extends ObjectRun
    {
        
    //Excel操作的相关对象,层级结构,逐层深入

        SysExcelApplication         excel;
        SysExcelWorkbooks           books;
        SysExcelWorkbook            book;
        SysExcelWorksheets          sheets;
        SysExcelWorksheet           sheet;
        SysExcelCells               cells;
        SysExcelCell                cell;
        SysExcelRange               column;
        COM                         range;
    }

    先是整个excel,往下走是 工作表 books (就是excel的哪一页),确定 单页工作表 book 后,在来是 片 sheets ....(省略)就这样下去到单元格 cell。

    还是代码直观

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

        
    //excel文件地址
        select firstonly m_parameter;
        m_file 
    = m_parameter.PurchasePrintModel;

        
    //对象获取
        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();
    }

    读取单元格内容的方法

    View Code
    Container read(SysExcelCell sysExcelCell)
    {
        
    //excel内容读取方法

        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;
    }

    excel的写入

    View Code
    private void excelWrite()
    {
        container       m_agreement;
        ;
        rowNum 
    = 23;

        
    //片区范围,复制和插入
        range = sheet.range(strfmt("A%1:L%1",rowNum-1)).comObject();
        row 
    = range.EntireRow();
        row.copy();
        row.insert();

        
    //单元格值的写入
        cell = cells.item(rowNum,1);
        cell.value(
    "单元格内容");

        
    //金额的统计转换为中文大写
        cell = cells.item(rowNum,2);
        cell.value(
    "合计人民币金额(大写):" + global::numeralsToTxt_CN(pricesCount,false,true,10));

        
    //通过容器读取单元格内容
        cell = cells.item(rowNum+1,7);
        m_agreement 
    = this.read(cell);

        
    //读取容器内容写入单元格
        cell.value(strfmt(conpeek(m_agreement,1),PaymTerm::find(purchTable.Payment).Description));

        
    //显示excel
        excel.visible(true);
    }
    作者:Kurodo
    出处:http://Kurodo.cnblogs.com
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    求得分除以总分的百分比
    考试用时存入秒数,最后用方法转换一成这种格式 (00:00:00)
    微信生成二维码 只需一个网址即刻 还有jquery生成二维码
    微信公众号整套逻辑的支付和退款
    thinkphp 无限极 评论
    新版谷歌浏览器怎么查找和改变编码格式 IT开发人员谷歌的编码格式
    【bzoj2199】[Usaco2011 Jan] 奶牛议会
    BZOJ1997 [Hnoi2010]Planar (2-sat)
    uvalive 3211 Now or later
    codeforce 660D Number of Parallelograms
  • 原文地址:https://www.cnblogs.com/Kurodo/p/2124175.html
Copyright © 2020-2023  润新知