效果图:
代码示例:
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();
}
}