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 格式