当前位置: 首页 > 办公技巧 > 正文

wps办公技巧表格日期(WPS表格如何在宏代码中判断日期类型及获取年、月、日)

  • 叁碗诸角 叁碗诸角
  • 办公技巧
  • 2023-08-26 13:09:28
  • 0

缘起:一个朋友需要经常处理中成百上千行的WPS表格,其中一项就是要知道某列的单元格中日期是否有填写或者输入的是否为日期,然后从单元格分别取出日期中的年、月、日。手工处理太枯燥、麻烦了,WPS似乎没有提供可以直接在单元格中引用的公式。于是问我有没什么方法可以自动处理,其实本人对WPS也太熟,不过还是试图通过宏来进行处理。

WPS在支持VBA宏的同时,近几年也开始支持JS——不用安装,可以直接使用。下面是用JS进行了测试。

一. 判断是否为日期,在网上查了一下,JS中几种常见可能判断日期类型的方法是:


instanceofObject.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的宏编辑器中输入时并不会一定提示有该方法,但直接输入可以使用。


最新文章