2.3.3 用NPOI操作EXCEL--日期函数

Excel中有非常丰富的日期处理函数,在NPOI中同样得到了很好的支持。如下图:
对应的与前面的基本公式设置类似:
HSSFSheet sheet1 = hssfworkbook.CreateSheet("Sheet1");
HSSFRow row1 
= sheet1.CreateRow(0);
HSSFRow row2 
= sheet1.CreateRow(1);
row1.CreateCell(
0).SetCellValue("姓名");
row1.CreateCell(
1).SetCellValue("参加工作时间");
row1.CreateCell(
2).SetCellValue("当前日期");
row1.CreateCell(
3).SetCellValue("工作年限");

HSSFCell cel1 
= row2.CreateCell(0);
HSSFCell cel2 
= row2.CreateCell(1);
HSSFCell cel3 
= row2.CreateCell(2);
HSSFCell cel4 
= row2.CreateCell(3);

cel1.SetCellValue(
"aTao.Xiang");
cel2.SetCellValue(
new DateTime(200471));
cel3.SetCellFormula(
"TODAY()");
cel4.SetCellFormula(
"CONCATENATE(DATEDIF(B2,TODAY(),\"y\"),\"年\",DATEDIF(B2,TODAY(),\"ym\"),\"个月\")");

//在poi中日期是以double类型表示的,所以要格式化
HSSFCellStyle cellStyle = hssfworkbook.CreateCellStyle();
HSSFDataFormat format 
= hssfworkbook.CreateDataFormat();
cellStyle.DataFormat 
= format.GetFormat("yyyy-m-d");

cel2.CellStyle 
= cellStyle;
cel3.CellStyle 
= cellStyle;

下面对上例中用到的几个主要函数作一些说明:
TODAY():取得当前日期;
DATEDIF(B2,TODAY(),"y"):取得B2单元格的日期与前日期以年为单位的时间间隔。(“Y”:表示以年为单位,”m”表示以月为单位;”d”表示以天为单位);
CONCATENATE(str1,str2,...):连接字符串。

另外附上Excel中常用的日期函数列表,只需要将此句代码作适当修改即可:

cel4.SetCellFormula("CONCATENATE(DATEDIF(B2,TODAY(),\"y\"),\"年\",DATEDIF(B2,TODAY(),\"ym\"),\"个月\")");

函数名 函数说明 语法
DATE 返回代表特定日期的系列数。 DATE(year,month,day)
DATEDIF 计算两个日期之间的天数、月数或年数。 DATEDIF(start_date,end_date,unit)
DATEVALUE 函数 DATEVALUE 的主要功能是将以文字表示的日期转换成一个系列数。 DATEVALUE(date_text)
DAY 返回以系列数表示的某日期的天数,用整数 1 到 31 表示。 DAY(serial_number)
DAYS360 按照一年 360 天的算法(每个月以 30 天计,一年共计 12 个月),返回两日期间相差的天数。 DAYS360(start_date,end_date,method)
EDATE 返回指定日期 (start_date) 之前或之后指定月份数的日期系列数。使用函数 EDATE 可以计算与发行日处于一月中同一天的到期日的日期。 EDATE(start_date,months)
EOMONTH 返回 start-date 之前或之后指定月份中最后一天的系列数。用函数 EOMONTH 可计算特定月份中最后一天的时间系列数,用于证券的到期日等计算。 EOMONTH(start_date,months)
HOUR 返回时间值的小时数。即一个介于 0 (12:00 A.M.) 到 23 (11:00 P.M.) 之间的整数。 HOUR(serial_number)
MINUTE 返回时间值中的分钟。即一个介于 0 到 59 之间的整数。 MINUTE(serial_number)
MONTH 返回以系列数表示的日期中的月份。月份是介于 1(一月)和 12(十二月)之间的整数。 MONTH(serial_number)
NETWORKDAYS 返回参数 start-data 和 end-data 之间完整的工作日数值。工作日不包括周末和专门指定的假期 NETWORKDAYS(start_date,end_date,holidays)
NOW 返回当前日期和时间所对应的系列数。 NOW( )
SECOND 返回时间值的秒数。返回的秒数为 0 至 59 之间的整数。 SECOND(serial_number)
TIME

返回某一特定时间的小数值,函数 TIME 返回的小数值为从 0 到 0.99999999 之间的数值,代表从 0:00:00 (12:00:00 A.M) 到 23:59:59 (11:59:59 P.M) 之间的时间。

TIME(hour,minute,second)
TIMEVALUE 返回由文本串所代表的时间的小数值。该小数值为从 0 到 0.999999999 的数值,代表从 0:00:00 (12:00:00 AM) 到 23:59:59 (11:59:59 PM) 之间的时间。 TIMEVALUE(time_text)
TODAY 返回当前日期的系列数,系列数是 Microsoft Excel 用于日期和时间计算的日期-时间代码。 TODAY( )
WEEKDAY 返回某日期为星期几。默认情况下,其值为 1(星期天)到 7(星期六)之间的整数。 WEEKDAY(serial_number,return_type)
WEEKNUM 返回一个数字,该数字代表一年中的第几周。 WEEKNUM(serial_num,return_type)
WORKDAY 返回某日期(起始日期)之前或之后相隔指定工作日的某一日期的日期值。工作日不包括周末和专门指定的假日。 WORKDAY(start_date,days,holidays)
YEAR 返回某日期的年份。返回值为 1900 到 9999 之间的整数。 YEAR(serial_number)
YEARFRAC 返回 start_date 和 end_date 之间的天数占全年天数的百分比。 YEARFRAC(start_date,end_date,basis)

 

返回目录

 

posted @ 2009-09-13 00:19  atao.xiang  阅读(7360)  评论(0编辑  收藏  举报