Ax2012中选择excel并读取

效果图:

在这里插入图片描述

代码示例:

class ExcelDataImport extends RunBase
{
    int                                 row,totalRow,totalCol;
    DialogRunbase                       dialog;
    DialogGroup                         dialogGrp;
    FilePath                            file;
    DialogField                         dialogFilename;
    SysExcelApplication                 application;
    SysExcelWorkbooks                   workbooks;
    SysExcelWorkbook                    workbook;
    SysExcelWorksheets                  worksheets;
    SysExcelWorksheet                   worksheet;
    SysExcelCells                       cells;
    CartonInfoDetailTmp             cartonInfoDetailTmp; // 数据缓存表
    SysExcelRange                       sysExcelRowsRange, // 获取Excel中总行数
                                        sysExcelColumnsRange, // 获取Excel中总列数
                                        sysExcelRange; 
   TestTable                    cartonsInMemory;
    SalesLine                           salesLine;

    #Excel
    #define.Star('*')
    #define.ExcelDataRange("A1:IV65536")
}

protected Object dialog()
{

    dialog = super();

    dialog.alwaysOnTop(true);
    dialog.windowType(FormWindowType::Standard);
    dialogGrp = dialog.addGroup("");
    dialogFilename = dialog.addField(extendedTypeStr(FilenameOpen));
    dialog.filenameLookupFilter(["@SYS28576",#XLSX]);

    return dialog;
}
Public void disposeData()
{
 
}
public boolean getFromDialog()
{
    boolean ret;

    ret = super();

    file    = dialogFilename.value();

    return ret;
}
public boolean init()
{
    boolean ret;

    ret = super();

    row                             =    2; //第一行为标题,开始从第二行读取数据
    application                     =    SysExcelApplication::construct();
    workbooks                       =    application.workbooks();

    return ret;
}
private void initilizeExcel()
{
    try
    {
        workbooks.open(file);
    }
    catch (Exception::Error)
    {
        throw error('File cannot be opened.');
    }
    // 用来标记列数是否为空,用来判断sheet是否为空
    totalCol = -1;

    workbook            =   workbooks.item(1);
    worksheets          =   workbook.worksheets();
    worksheet           =   worksheets.itemFromNum(1);
    cells               =   worksheet.cells();
    sysExcelRange       = worksheet.cells().range(#ExcelDataRange);
    try
    {
        sysExcelRowsRange = sysExcelRange.find(#Star, null, #xlFormulas, #xlWhole, #xlByRows, #xlPrevious);
        sysExcelColumnsRange = sysExcelRange.find(#Star, null, #xlFormulas, #xlWhole, #xlByColumns, #xlPrevious);
    }

    catch(Exception::Error)
    {
        error("@SYS59926");
    }
    if(sysExcelRowsRange && sysExcelColumnsRange)
    {
        // 获取总列数
        totalCol = sysExcelColumnsRange.column();
        // 获取总行数
        totalRow = sysExcelRowsRange.row();
    }

    // sheet表中有列数但列数小于7的时候
    if(sysExcelColumnsRange != null && totalCol < 7)
    {
        throw error("");
    }
    // sheet表为空的时候
    if(sysExcelColumnsRange == null && totalCol == -1)
    {
        throw error("");
    }
}
Public void readExcel()
{
    this.initilizeExcel();


    while(row <= totalRow)
    {

        cartonInfoDetailTmp.clear();

        cartonInfoDetailTmp.insert();
        row++;
    }

    // 退出应用程序
    application.quit();

}
public void run()
{
    ttsbegin;
    // 读取Excel数据到临时表
    this.readExcel();
    // 根据标记字段处理数据
    this.disposeData();

    ttscommit;

    info("");
}
public boolean validate(Object calledFrom = null)
{
    boolean ret;

    ret = super(calledFrom);
    // 未选择文件时报错
    if(!file)
    {
        ret = checkFailed("");
    }
   // 检查文件是否存在
    if(!WinAPI::fileExists(file))
    {
        ret = checkFailed("");
    }
    return ret;
}
static void main(Args _args)
{
ExcelDataImport shippingInfoDetailDataImport = new ExcelDataImport ();
    shippingInfoDetailDataImport.init();
    if(shippingInfoDetailDataImport.prompt())
    {
        shippingInfoDetailDataImport.run();
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值