NPOI 1.2.4教程 –日期函数
//Excel中有非常丰富的日期处理函数,在NPOI中同样得到了很好的支持。如下图:
using NPOI.HSSF.UserModel; using NPOI.HPSF; using NPOI.POIFS.FileSystem; using NPOI.SS.UserModel; HSSFWorkbook workbook = new HSSFWorkbook();//创建一个表 ISheet sheet1 = workbook.CreateSheet("Sheet1");//创建一个sheet IRow row1 = sheet1.CreateRow(0);//创建一行 IRow row2 = sheet1.CreateRow(1);//再创建二行 //sheet1.CreateRow(0).CreateCell(0).SetCellValue("B");//直接在第一行第一列创建并设值 row1.CreateCell(0).SetCellValue("姓名");//创建一列并在第一列添加内容 row1.CreateCell(1).SetCellValue("参加工作时间"); row1.CreateCell(2).SetCellValue("当前日期"); row1.CreateCell(3).SetCellValue("工作年限"); ICell cel1 = row2.CreateCell(0);//在第二行创建一列 ICell cel2 = row2.CreateCell(1); ICell cel3 = row2.CreateCell(2); ICell cel4 = row2.CreateCell(3); cel1.SetCellValue("Tom");//在第二行的第一列添加内容 cel2.SetCellValue(new DateTime(2004, 7, 1));//添加日期 cel3.CellFormula = "TODAY()";//添加当前日期 cel4.CellFormula = "CONCATENATE(DATEDIF(B2,TODAY(),\"y\"),\"年\",DATEDIF(B2,TODAY(),\"ym\"),\"个月\")"; //在poi中日期是以double类型表示的,所以要格式化 //设置日期格式 ICellStyle cellStyle = workbook.CreateCellStyle(); IDataFormat format = workbook.CreateDataFormat(); cellStyle.DataFormat = format.GetFormat("yyyy-m-d"); cel2.CellStyle = cellStyle; cel3.CellStyle = cellStyle; using (FileStream file = new FileStream(@"c:\tes.xls", FileMode.Create)) { workbook.Write(file);//写入输出流中 }
下面对上例中用到的几个主要函数作一些说明:
TODAY():取得当前日期;
DATEDIF(B2,TODAY(),"y"):取得B2单元格的日期与前日期以年为单位的时间间隔。(“Y”:表示以年为单位,”m”表示以月为单位;”d”表示以天为单位);
CONCATENATE(str1,str2,…):连接字符串。
另外附上Excel中常用的日期函数列表,只需要将此句代码作适当修改即可:
cel4.CellFormula = "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) |