aardio - 【库】libxl库,一个dll操作excel

news2024/11/17 21:22:11

经常用到excel操作,也有几个现成的库能实现我需要的功能,但用起来总是感觉不顺手。

于是便抽了两天时间,在aaz.libxl库的基础上,按照我的使用习惯进行了修改。

以后再也不用为操作excel发愁啦。

下载地址:http://chengxu.online  →aardio资源下载→libxl.rar

解压缩将文件放于:\lib\godking\libxl

1、大名鼎鼎的libxl,封装为aardio库,便于使用。

2、为了节约劳动力,在aaz.libxl库的基础上进行修改,在此对作者表示感谢。

3、dll版本为4.0.4.0。

4、例程代码效果如下:

一、自定义数字格式

2162a082b53342a792c098c16eda5845.png

import godking.libxl;

var book = godking.libxl.new("d:\custom.xls","各种数字格式")
var sheet = book.sheet();
var format = {};
var numformat = {
    "0.0";
    "0.00";
    "0.000";
    "0.0000 元";
    "#,###.00 $";
    "#,###.00 $[Black][<1000];#,###.00 $[Red][>=1000]";
    "合计 ##,###.00 元"
}
for(i=1;#numformat;1){
	format[i] = book.addFormat();
	format[i].numFormat = book.addNumFormat(numformat[i])
	// 以上两句可以合并为一句实现,如下:
	// format[i] = book.addFormat({ numFormat = book.addNumFormat(numformat[i]) });
}
sheet.setValue( 1, 1, 25.718, format[1] )
sheet.setValue( 2, 1, 25.718, format[2] )
sheet.setValue( 3, 1, 25.718, format[3] )
sheet.setValue( 4, 1, 25.718, format[4] )
sheet.setValue( 5, 1, 1800.5, format[5] )
sheet.setValue( 6, 1, 500   , format[6] )
sheet.setValue( 7, 1, 1600  , format[6] )

sheet.setValue( 8, 1, "=SUM(A1:A7)", format[7] )
sheet.setCol( 1,1,20 )

book.save()
book.release()

 二、写入各种类型的数据

967af24a00e74f6aa72a860586f4d5a8.png

import godking.libxl;

//新建文件
var book = godking.libxl.new("d:\example.xls");
var sheet = book.sheet();

//按照指定的单元格格式写入数据
sheet.setCellStr(1,	1,	"我是字符串1");
sheet.setCellNum(2,	1,	3.14);
sheet.setCellDate(3,1,	"2022-11-17");
sheet.setCellBool(4,1,	true);
sheet.setCellBlank(5,1);

//自动识别单元格格式写入数据,支持文本、数值、日期、逻辑、公式、空
sheet.setValue(1,2,	"我是字符串2");
sheet.setValue(2,2,	3.1415926);
sheet.setValue(3,2,	..time("2022-12-18"));
sheet.setValue(4,2,	false);
sheet.setValue(5,2);

//批量获取、设置单元格内容(批量复制内容,不带格式)
var t = sheet.getValues(1,1,5,2);  // 复制(1,1)到(5,2)范围内的所有内容
sheet.setValues(1,3,t); // 粘贴到 (1,3) 单元格,向右、下一直填充到(5,4)单元格

//测试清空单元格内容
sheet.setValue(1,3); //清空(1,3)单元格内容

//设置列宽
sheet.setCol(1,4,12); //设置第1列到第4列的列宽为12

//批量设置单元格内容
sheet.setTable(1,5,{
 		colCount = 2; // 避免第一行的null值影响获取列数
		{"姓名",null}
		{"年龄",18}
		{null,`=(F2+1)&"虚岁"`}
		{..time("2022-10-1"),"国庆节"}
		{"婚否",false}
	});

//保存文件
book.save()
book.release()

 三、设置单元格字体、格式

c2cd330ea40e48769ad09bfd039027fe.png

import godking.libxl;

var book = godking.libxl.new("d:\format.xls","格式演示")
var sheet = book.sheet();

var font = book.addFont()
font.config = {
	name = "宋体",
	size = 18,
	italic = false,
	strikeOut = false,
	color = 51,
	bold = false,
	script = false,
	underline = false,
}

var format = book.addFormat()
format.config = {
    alignH = 2;
    border = 12;
    borderColor = 2;
    font = font;
	fillPattern=1,
	patternForegroundColor=30,
	patternBackgroundColor=30,
}

sheet.setValue( 2, 1, "格式演示Format", format )
sheet.setCol( 1, 1, 25 ) 

book.save( )
book.release()

 四、填写收据

641b6db5d75e4626b0003e94f3e897ad.png

import godking.libxl;

var book = godking.libxl.new("d:\invoice.xls","发票例程" );
var sheet = book.sheet()

var boldFont = book.addFont({bold = true});

var titleFont = book.addFont({name = "黑体",size = 16});

var titleFormat = book.addFormat({font = titleFont,alignH = 2});

var headerFormat = book.addFormat({ alignH = 2/*_ALIGNH_CENTER*/,
									border = 1/*_BORDERSTYLE_THIN*/,
									font = boldFont;
									fillPattern = 1 /*_FILLPATTERN_SOLID*/,
									patternForegroundColor = 47 /*COLOR_TAN*/
									});

var descriptionFormat = book.addFormat({borderLeft = 1 /*BORDERSTYLE_THIN*/});

var amountFormat = book.addFormat({	numFormat = 5,
									borderLeft = 1,
									borderRight = 1
									});

var totalLabelFormat = book.addFormat({	borderTop = 1,
										alignH = 3,
										font = boldFont
										});
										
var totalFormat = book.addFormat({	numFormat = 5,
									border = 1,
									font = boldFont,
									fillPattern = 1,
									patternForegroundColor = 13});

var signatureFormat = book.addFormat({	alignH = 2,
										borderTop = 10});

sheet.setMerge(2,1,2,2)
sheet.setValue(2, 1, "收款收据", titleFormat)

sheet.setValue(4, 1, "姓名: 张三")
sheet.setValue(5, 1, "地址: 中国山东")
sheet.setValue(6, 1, "开票时间:"++..tostring(..time()))

sheet.setValue(7, 1, "品名", headerFormat)
sheet.setValue(7, 2, "数量", headerFormat)

sheet.setValue( 8, 1, "铅笔", descriptionFormat);
sheet.setValue(8, 2, 85, amountFormat);
sheet.setValue( 9, 1, "衬衫", descriptionFormat);
sheet.setValue(9, 2, 150, amountFormat);
sheet.setValue( 10, 1, "茶杯", descriptionFormat);
sheet.setValue(10, 2, 45, amountFormat);

sheet.setValue( 11, 1, "合计:", totalLabelFormat);
sheet.setValue(11, 2, "=SUM(B8:B10)", totalLabelFormat);

sheet.setValue(14, 2, "签名", signatureFormat);

sheet.setCol( 1, 1, 40, null, 0);
sheet.setCol(2, 2, 15, , 0);

book.save()
book.release()

五、与sql查询数据无缝衔接:

64bc919823b940848bfbb30317d8218b.png

 

import console; 
import sqlServer
var s = sqlServer( 
	["Data Source"] = "192.168.1.18,1433";
	["Database"] = "fang";
	["User ID"] = "fangs";
	["Password"] = "fangs1234"; 
)
var t = s.getTable("select * from fangs")

import godking.libxl
var book = godking.libxl.new(".xls","Sheet1")
var sheet = book.sheet()
sheet.setTable(1,1,t.fields); //填充表头
// 或 sheet.setRowValue(1,1,t.fields);  //填充表头
sheet.setTable(2,1,t); //填充数据
book.save("d:\t.xls")

console.pause(true);

六、筛选、排序

7f8681fc0ce44f8db6fbfbe854586cef.png

 

//筛选器例程
import godking.libxl;
// 注意:xls格式不支持筛选功能
var book = godking.libxl.new("d:\filter.xlsx","筛选器例程")
var sheet = book.sheet();

    sheet.setValue(2, 1,"国家");
    sheet.setValue(2, 2,"交通死亡率");
    sheet.setValue(2, 3,"吸烟死亡率");
    sheet.setValue(2, 4,"自杀死亡率");

    sheet.setValue(3, 1,"USA");   	  sheet.setValue(4, 1,"Greenland"); 
    sheet.setValue(3, 2, 64);         sheet.setValue(4, 2, 94);
    sheet.setValue(3, 3, 69);         sheet.setValue(4, 3, 55);
    sheet.setValue(3, 4, 49);         sheet.setValue(4, 4, 64);

    sheet.setValue(5, 1,"Germany");   sheet.setValue(6, 1,"Switzerland");
    sheet.setValue(5, 2, 88);         sheet.setValue(6, 2, 93); 
    sheet.setValue(5, 3, 46);         sheet.setValue(6, 3, 54);
    sheet.setValue(5, 4, 55);         sheet.setValue(6, 4, 50);

    sheet.setValue(7, 1,"Spain");     sheet.setValue(8, 1,"Gobon"); 
    sheet.setValue(7, 2, 86);         sheet.setValue(8, 2, 75); 
    sheet.setValue(7, 3, 47);         sheet.setValue(8, 3, 52);
    sheet.setValue(7, 4, 69);         sheet.setValue(8, 4, 71);

    sheet.setValue(9, 1,"Greece");    sheet.setValue(10, 1,"Japan");
    sheet.setValue(9, 2, 67);         sheet.setValue(10, 2, 91);
    sheet.setValue(9, 3, 23);         sheet.setValue(10, 3, 57);
    sheet.setValue(9, 4, 87);         sheet.setValue(10, 4, 36);

var filter = sheet.filter()

// G开头的国家(注意:col1和col2不能同时生效,比较遗憾)
var col1 = filter.filterColumn(1)
col1.addFilter("G*")

//交通死亡率>50且<90(注意:col1和col2不能同时生效,比较遗憾)
//此处设置了col2后,col1的设置将失效。只有最后一次filterColumn设置才有效。
var col2 = filter.filterColumn(2)
col2.setCustomFilter(">",50,"<",90,"and")

filter.setSort(2,true) // 按第2列逆序排序
filter.apply() // 应用筛选和排序设置

book.save()
book.release()

import win ; win.delay(500) ;
import process
process.execute("d:\filter.xlsx")

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/128744.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

广州车展|埃安超跑Hyper GT登场,给年少有为者的时代献礼

近年来&#xff0c;随着中国新能源的技术日趋成熟&#xff0c;中国新能源车开始蓬勃发展&#xff0c;逐渐占据了可观的市场份额&#xff0c;并朝着高端化迈进。有一个有趣的现象&#xff1a;希望进军豪华纯电市场的中国车企&#xff0c;几乎都会与特斯拉对标。然而&#xff0c;…

2023新一代设备管理系统助力企业高效化巡检

设备数量和种类都比较多的情况下&#xff0c;工厂设备管理员的工作往往压力巨大&#xff0c;因为生产环环相扣&#xff0c;每一个环节如果出现问题&#xff0c;都会影响到生产。如果隐患不能及时处理&#xff0c;会影响设备的正常和安全运转&#xff0c;严重的会波及到周围相关…

SpringBoot+Shiro+JWT+Mybatis-Plus搭建admin-shiro管理系统

1、项目背景 从零开始搭建一个项目骨架&#xff0c;最好选择合适&#xff0c;熟悉的技术&#xff0c;并且在未来易拓展&#xff0c;适合微服务化体系等。所以一般以Springboot作为我们的框架基础&#xff0c;这是离不开的了。 然后数据层&#xff0c;我们常用的是Mybatis&…

佳创视讯亮相第十八届文博会,VR直播全民化备受瞩目

2022年12月28日,第十八届中国(深圳)国际文化产业博览交易会正式面向公众开放。本届文博会采取线下为主、线上同步的方式,强化线上线下交互联动,旨在推动中华文化产业高质量发展,加强对外文化合作交流。展会共吸引2532家政府组团、文化机构和企业线下参展,870家机构和企业线上参…

SpringSecurity(二十四)--OAuth2:使用JWT和加密签名(下)非对称密钥加密

一、前言 由于上文对称密钥涉及到的内容比较多&#xff0c;所以这一节的非对称密钥加密拆开成这一节单独讲解。 所以大家尽量先阅读完上一章的内容后再浏览这一章内容会更好。 二、使用通过JWT和非对称密钥签名的令牌 本节将实现OAuth2身份验证的一个示例&#xff0c;其中授…

自定义事件实现rpc的调用C++和蓝图实现举例

参考视频&#xff1a;https://www.youtube.com/watch?vGcZQ2o6LpDI 1.自定义事件的方式实现rpc run on server 修改角色的最大速度&#xff0c;方框1&#xff0c;让客户端先行&#xff0c;速度直接改变&#xff1b;然后方框2&#xff0c;告知服务器&#xff0c;自己的速度已经…

双脚在路上,钢笔在手里,想法在脑中,2023年CSDN将在心头

☔️&#xff08;一&#xff09;行走过的道路 一年的时间说长不长&#xff0c;说短不短&#xff0c;所渡过时光的长短在于你是否留意你曾走过的路。 &#x1f434;① 记得2022年初我所许下的flag&#xff0c;是要在CSDN平台上运用今年一年的时间撰写超50篇的技术文章&#xff0…

MySQL-运算符详解

1. 算数运算符 运算符名称作用示例加法计算两个值或表达式的和SELECT A B-减法计算两个值或表达式的差SELECT A - B*乘法计算两个值或表达式的乘积SELECT A * B/或DIV除法计算两个值或表达式的商SELECT A / B%或MOD求模(求余)计算两个值或表达式的余数SELECT A % B 2. 比较运…

vue导入私有组件和注册全局组件和props自定义属性

目录先下载并配置插件导入私有组件注册全局组件props自定义属性使用先下载并配置插件 导入的时候需要路径,有个符号,但不能提示路径,需要手打路径,会发现很麻烦,这时候可以通过vscode插件来解决 vscode搜索Path Autocomplete 配置插件,点击插件设置—扩展设置,点开任意一个set…

CRM客户关系管理:赢得和留住客户的指南

客户管理是一个涉及协调和管理客户与企业之间互动的过程。它对企业的商誉及其保留和获得新客户的能力有重大影响。 一般来说&#xff0c;客户管理可以分解成四个不同的部分&#xff1a; - 了解客户的需求以及他们想从你这里得到什么 - 满足这些要求并对他们的询问提供充分的…

EIZO船舶触摸屏维修T1502-B

EIZO船舶触摸屏使用注意事项&#xff1a; 1 由于显示器电子零件的性能需要约30分钟才能稳定,因此在电源开启之后,应调整显示器30分钟以上。 2为了降低因长期使用而出现的发光度变化以及保持稳定的发光度,建议您以较低亮度使用显示器。 3 当显示器长期显示一个图像的情况下再…

传统卷积与Transformers 优缺点对比

近两年Transformer如日中天&#xff0c;刷爆各大CV榜单&#xff0c;但在计算机视觉中&#xff0c;传统卷积就已经彻底输给Transformer了吗&#xff1f; 回答1 作者&#xff1a;DLing 链接&#xff1a;https://www.zhihu.com/question/531529633/answer/2819350360 看在工业界还…

【云原生进阶之容器】第二章Controller Manager原理--client-go剖析

2 Client-go Kubernetes 官方从 2016 年 8 月份开始,将 Kubernetes 资源操作相关的核心源码抽取出来,独立出来一个项目 client-go,Kubernetes中使用client-go作为Go语言的官方编程式交互客户端库,提供对api server服务的交互访问。对于k8s的二次开发,熟练掌握client-go是十…

大胆预测,2023年Android 行业什么技术最重要~

随着Android 时代的发展&#xff0c;在2022的这一年里&#xff0c;感觉自己经历了许多&#xff0c;从年初到年底&#xff0c;见证了不是互联网公司的裁员、优化、毕业、输送人才……等一些列的操作&#xff0c;估计有些人和我一样对Android未来感到茫然&#xff0c;不少人可能会…

发表计算机SCI论文,是先写中文,还是直接写英文论文? - 易智编译EaseEditing

经过高考、四六级和研究生考试&#xff0c;我们都有一定的英文基础&#xff0c;也都知道英文和中文的差别就是中国人和欧美人的思维差别。在这里对中英文写作的优缺点进行列举和分析&#xff1a; 直接写英文论文&#xff1a; &#xff08;1&#xff09;中英文表述方式差异明显…

【图像算法】pytesseract简单实现图片数字识别

【前置目的】 识别视频中是否包含目标元素&#xff1b; 抽象自动化&#xff0c;就是处理一段含有时间戳的视频&#xff1b; 再核心就是对视频进行图片裁减&#xff0c;识别出图片中的数字&#xff0c;做数学计算延时。 【学习地址】 环境&#xff1a;mac、python3、pytesserac…

PCB阻焊桥的工艺设计,华秋一文告诉你

PCB表面的一层漆称为阻焊油墨&#xff0c;也就是PCB线路板防焊油墨。阻焊油墨是PCB线路板中非常常见也是主要使用的油墨。阻焊油墨一般90%都是绿色的&#xff0c;但也有其他颜色&#xff0c;例如&#xff1a;红色、蓝色、黑色、白色、黄色称之为杂色油墨。 阻焊油墨的作用就是…

星尘数据完成5000万元A轮融资,Autolabeling加速自动驾驶量产

近日&#xff0c;国内领先的AI数据服务商星尘数据宣布完成A轮融资5000万元人民币&#xff0c;本轮融资由华映资本领投&#xff0c;小米生态链背景的厚天资本和瑞夏资本跟投。融资将用于端到端的数据闭环系统研发、商务拓展以及供应商合作。星尘数据创始人、CEO章磊表示&#xf…

用Python制作一个文件解压缩工具

经常由于各种压缩格式的不一样用到文件的解压缩时就需要下载不同的解压缩工具去处理不同的文件&#xff0c;以至于桌面上的压缩工具就有三四种&#xff0c;于是使用python做了一个包含各种常见格式的文件解压缩的小工具。 常见的压缩格式主要是下面的四种格式&#xff1a; zip…

New File Format:SpreadJS v16 Crack

New File Format 有你需要的更新内容&#xff0c;请大家及时更新到最新版 SpreadJS V16 has just released, and with it, Ω578867473 some exciting new features, including a new SpreadJS file format and enhancements to the TableSheet, Designer, Calculation, and W…