aardio 文档
aardio 范例: XLSX 数据读取 · 不需要 Office
import win.ui;
import fsys.dlg;
/*DSG{{*/
var winform=win.form(text="XLSX 数据读取 · 不需要 Office";right=819;bottom=559)
winform.add(
button={cls="button";text="选择 Excel 文档…";left=16;top=16;right=186;bottom=48;anchors={left=1;top=1};z=1};
status={cls="static";text="读取保存值与文本,不重算公式或还原显示格式";left=202;top=22;right=803;bottom=46;anchors={left=1;top=1;right=1};z=2};
output={cls="edit";left=16;top=64;right=802;bottom=542;edge=1;multiline=1;readonly=1;vscroll=1;hscroll=1;anchors={left=1;top=1;right=1;bottom=1};z=3}
)
/*}}*/
var readFile=function(path){
winform.button.disabled=true;
winform.status.text="正在读取…";
// DOM 留在工作线程;界面仅接收普通数据,不会锁住原文件。
var data,err=thread.invokeAndWait(function(path){
import fsys.openXml.xlsx;
return fsys.openXml.xlsx.extractText(path,{
maxSheets=5;maxRows=200;maxColumns=30;maxTextBytes=1048576;
});
},io.fullpath(path));
if(data){
var lines=[];
for i,s in data.sheets{
table.push(lines,"["+s.sheet.index+"] "+s.sheet.name+"("+s.rowCount+" 行 × "+s.columnCount+" 列)");
table.push(lines,s.text);table.push(lines,"");
}
for i,w in data.warnings table.push(lines,"[提示] "+w.message);
winform.output.text=string.crlf(string.join(lines,'\r\n'),'\r\n');
var status="已读取 "+#data.sheets+" / "+data.sheetCount+" 张表;原始保存值,源文件未修改";
if(data.truncated) status="已按限额截取;"+status;
winform.status.text=status;
}
else {winform.output.text=err;winform.status.text="读取失败";}
winform.button.disabled=false;
return data,err;
}
winform.button.oncommand=function(){
var path=fsys.dlg.open("Excel OpenXML 文档|*.xlsx;*.xlsm;*.xltx;*.xltm;*.xlam|","选择文档",,winform);
if(path) readFile(path);
}
winform.show();
win.loopMessage();
Markdown 格式