aardio 读取 Excel文件,并显示在 listview

news/2024/7/21 4:26:21 标签: aardio, excel, listview

编写 main.aardio 如下

import win.ui;
/*DSG{{*/
winform = win.form(text="excel1";right=801;bottom=500)
winform.add(
button1={cls="button";text="读取Excel文件";left=19;top=14;right=126;bottom=44;z=1};
button2={cls="button";text="导出Excel文件";left=168;top=17;right=291;bottom=45;z=3};
listview={cls="listview";left=2;top=62;right=801;bottom=498;edge=1;gridLines=1;hscroll=1;vscroll=1;z=2}
)
/*}}*/

import io;
import sys;
import fsys.dlg;
import win.ui.grid;
win.ui.grid(winform.listview);

import console;
import com.excel;

console.showLoading(" 正在启动 Excel ");
var excel,err = com.excel(); 
assert(excel,err);

excel.alerts = false; //关闭界面提示与屏幕更新
excel.Visible = false;

// 读取Excel文件
winform.button1.oncommand = function(id,event){
	winform.button1.disabled = true;
	var xls = fsys.dlg.open("*.xls|*.xlsx");
	if (!io.exist(xls)){
		winform.msgbox(xls+" not exists.");
		winform.button1.disabled = false;
		return ;
	}
	winform.listview.clear();
	try{
		// 读取.xls 或 .xlsx
		var book = excel.Open(xls);		
		var sheet = book.Sheets(1);
		
		var rows = sheet.UsedRange.Rows.count;
		console.log("rows=",rows)
		var cols = sheet.UsedRange.Columns.Count;
		console.log("cols=",cols)

		var fields = {};
		for	(j=1; cols; 1){
			v = sheet.Cells(1, j).value;
			if (type(v) == type.string) table.push(fields, v);
			elseif (type(v) == type.number){
				if (v == math.modf(v)) table.push(fields, string.format("%d",v));
				else table.push(fields, string.format("%.4f",v));
			}  // date 字段格式化
			elseif (type(v) == type.table) table.push(fields, string.left(tostring(v),10));
			elseif (type(v) == type.null) table.push(fields, ''); 
			else table.push(fields, type(v)); 
		}
		//console.dump(fields);
		winform.listview.setColumns(fields);
		for (i=2; rows; 1){
			if (i >100) break;
			values = {};
			for (j=1; cols; 1){
				v = sheet.Cells(i, j).value;
				if (type(v) == type.string) table.push(values, v);
				elseif (type(v) == type.number){
					if (v == math.modf(v)) table.push(values, string.format("%d",v));
					else table.push(values, string.format("%.4f",v));
				}  // date 字段格式化
				elseif (type(v) == type.table) table.push(values, string.left(tostring(v),10));
				elseif (type(v) == type.null) table.push(values, '');
				else table.push(values, type(v));
			}
			//console.dump(values);
			winform.listview.addItem(values);
		}	
	
		book.close();
	}
	catch(e){
		winform.msgbox(e)
	}	
	winform.button1.disabled = false;	
}

// 鼠标左键点击事件
winform.listview.onClick = function(item,subItem,nmListView){
    //var index = winform.listview.selIndex; //选择的行
}
// 鼠标双击修改事件
winform.listview.onEditChanged = function(text,iItem,iSubItem){
    winform.msgbox(string.join({iItem,iSubItem,text},",")); //修改成功
}
// 鼠标右键事件
winform.listview.onRightClick = function(item,subItem,nmListView){
    var v = winform.listview.getItemText(item,subItem); //取值
    winform.msgbox(string.join({item,subItem,v},",")); //显示行、列、值信息
}

// 导出Excel文件
winform.button2.oncommand = function(id,event){
	
}

winform.show();
return win.loopMessage();
excel.Quit();

参考:aardio开发语言Excel数据表读取修改保存实例练习


http://www.niftyadmin.cn/n/5061598.html

相关文章

循环问答机,存储txt

问题 写个问答 存储txt input输入:提问。 回答 循环下去用两个回车代表下个循环,记录数量 打上时间戳按照以下步骤进行操作: 运行代码后,程序会提示您输入问题。 您输入问题后,程序会提示您输入答案。 输入完答案后&…

使用SDKMAN在Linux系统上安装JDK

本文使用的Linux发行版为Rocky Linux 9.2,可以当做CentOS的平替产品。 SDKMAN是一个sdk包管理工具,通过自带的命令可以快速切换软件环境, 官网地址:https://sdkman.io/。 1、安装sdkman: # curl -s "https://ge…

架构的未来:微前端与微服务的融合

文章目录 微服务架构简介微前端架构简介微前端与微服务的融合1. 共享服务2. 基于事件的通信3. 统一的身份和认证4. 交付管道的集成 示例:使用微服务和微前端的电子商务平台微服务架构微前端架构融合微服务和微前端 结论 🎉欢迎来到架构设计专栏~架构的未…

[论文笔记]UNILM

引言 今天带来论文Unified Language Model Pre-training for Natural Language Understanding and Generation的笔记,论文标题是 统一预训练语言模型用于自然语言理解和生成。 本篇工作提出了一个新的统一预训练语言模型(Unifield pre-trained Language Model,UniLM),可以同…

通过Nginx重新认识HTTP错误码

文章目录 概要一、HTTP错误码1.1、1xx1.2、2xx1.3、3xx1.4、4xx1.5、5xx 二、Nginx对常见错误处理三、参考资料 概要 在web开发过程中,通过HTTP错误码快速定位问题是一个非常重要的技能,同时Nginx是非常常用的一个实现HTTP协议的服务,因此本…

C++容器之unordered_map、unordered_set的底层剖析

文中源码以上传至Gitee 目录 序列式容器和关联式容器unordered_set和unordered_map 哈希表概念 哈希函数与哈希冲突常用的哈希函数直接定址法除留余数法 哈希冲突处理方案开放定址法链地址法开放定地址法和链地址法对比 开放定址法实现链地址法实现unordered_map和unordered_s…

[华为杯] my_lcg

一周参加培训,看见群里这个附件,后来问了大姥,此题确实有问题。在整理后终于明白怎么加事。 原题通过一个3参2变量的LCG对flag进行加密(每次两字符),但给出的是完整32位,并给出其中一个seed值&…

hadoop生态现状、介绍、部署

一、引出hadoop 1、hadoop的高薪现状 各招聘平台都有许多hadoop高薪职位,可以看看职位所需求的技能 ----> hadoop是什么,为什么会这么高薪?引出大数据,大数据时代,大数据与云计算 2、大数据时代的介绍 大数据的故事…