標籤:
//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");//建立一個sheetIRow 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) |
NPOI 1.2.4教程 –日期函數