网站首页 > 基础教程 正文
缘起:一个朋友需要经常处理中成百上千行的WPS表格,其中一项就是要知道某列的单元格中日期是否有填写或者输入的是否为日期,然后从单元格分别取出日期中的年、月、日。手工处理太枯燥、麻烦了,WPS似乎没有提供可以直接在单元格中引用的公式。于是问我有没什么方法可以自动处理,其实本人对WPS也太熟,不过还是试图通过宏来进行处理。
WPS在支持VBA宏的同时,近几年也开始支持JS——不用安装,可以直接使用。下面是用JS进行了测试。
一. 判断是否为日期,在网上查了一下,JS中几种常见可能判断日期类型的方法是:
- instanceof
- Object.prototype.toString.call()
- constructor
1. instanceof :可判断用new Date()生成的日期,返回值为true。
today = new Date()
MsgBox(today instanceof Date)
但直接判断WPS表的单元格中的日期,似乎存在问题,返回了false。
var row = 2, col =5; //待处理日期所在行和列
inspection_date = Sheets.Item("Sheet1").Cells.Item(row, col).Value();
MsgBox(inspection_date instanceof Date);
2. Object.prototype.toString.call() 则工作正常,只是返回的值是:[object Date],需要处理一下即可判断是否为日期
var row = 2, col =5; //待处理日期所在行和列
inspection_date = Sheets.Item("Sheet1").Cells.Item(row, col).Value();
MsgBox(Object.prototype.toString.call(inspection_date));
3. constructor,在WPS中仅仅返回空值,不能判断日期类型。
二. 取出单元格中的日期,则变得相对简单,测试如下:
var row = 3, col =5; //实际表中能自动判断日期列的起始单元的下标为宜,免得手工修改。
var max_row = 1000; //实际表中能自动判断日期列最大行数为宜,免得手工修改。
//遍历日期列的单元格,如果为日期则取出日期中的年、月、日进行进一步处理。
for(row, row <=1000, row++)
{
inspection_date = Sheets.Item("Sheet1").Cells.Item(row, col).Value();
//MsgBox(Object.prototype.toString.call(inspection_date));
if(Object.prototype.toString.call(inspection_date) == "[object Date]")
{
inspection_year = inspection_date.getFullYear();
inspection_month = inspection_date.getMonth() + 1; //月从0开始,故需要加 1。
inspection_day = inspection_date.getDate();
//MsgBox(inspection_day);
}
else if(Sheets.Item("Sheet1").Cells.Item(row, col).Value() == null)
{
; //如果为空,可根据实际情况跳过或设置提醒标志。
}
else
; //如果输入的不是日期,可根据实际情况跳过或设置提醒标志。
}
需要注意的是:
1. 读取单元格中的数据时用Value(),以保持数据格式。
2. 向单元格写入数据时用Value2即可。如:
Sheets.Item("Sheet1").Cells.Item(10, 10).Value2 = "Hello !";
3. 有的方法如获取年getFullYear()、月getMonth()、日getDate()的方法,在WPS的宏编辑器中输入时并不会一定提示有该方法,但直接输入可以使用。
猜你喜欢
- 2024-11-19 JavaScript 根据指定的字符串格式格式化日期
- 2024-11-19 前端时间格式化下,让用户看时间一看就懂的方法
- 2024-11-19 快来领取,33个常用JavaScript功能已封装成方法,拿来即用
- 2024-11-19 JavaScript中的日期对象
- 2024-11-19 十年前的js代码
- 2024-11-19 如何在JavaScript/Vue中获取当前时间并格式化输出精确到时分秒
- 2024-11-19 JavaScript学习笔记(十四)
- 2024-11-19 Node.js 实现抢票小工具&短信通知提醒(下)「干货」
- 2024-11-19 JS短文:如何确定一个月中有多少天?
- 2024-11-19 如何在Vue.js中对时间格式化
- 最近发表
- 标签列表
-
- jsp (69)
- gitpush (78)
- gitreset (66)
- python字典 (67)
- dockercp (63)
- gitclone命令 (63)
- dockersave (62)
- linux命令大全 (65)
- pythonif (86)
- location.href (69)
- dockerexec (65)
- tail-f (79)
- queryselectorall (63)
- location.search (79)
- bootstrap教程 (74)
- deletesql (62)
- linuxgzip (68)
- 字符串连接 (73)
- html标签 (69)
- c++初始化列表 (64)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)