EasyXLS http://forum.easyxls.com/ |
|
Returning Date Values http://forum.easyxls.com/viewtopic.php?f=5&t=137 |
Page 1 of 1 |
Author: | jpaterson [ Mon Jan 14, 2008 10:36 am ] |
Post subject: | Returning Date Values |
I am relatively new to EasyXLS and would like to see a code sample of returning a value from a formula cell that is a date. I am coding in VS2005 using C#. This is probably simple. When I call the getFormulaResultValue() function, I get back a value like "39203" (string). I need to convert this to a .NET DateTime value. |
Author: | daniela [ Tue Jan 15, 2008 1:09 pm ] |
Post subject: | |
Microsoft Excel always considers the dates as numbers. The difference between numbers and dates is given by the number/date format applied to the cell. Like: xlsTable.easy_getCell("A1").setFormat("MM/dd/yyyy") You can also format a formula using the TEXT function: xlsTable.easy_getCell("A1").setValue("=TEXT(A2, \"MM/dd/yyyy\")") where instead of A2 you can have any formula or cell reference. |
Author: | daniela [ Tue Jan 15, 2008 1:23 pm ] |
Post subject: | |
This functions transforms the date number into a datetime: public DateTime GetDate(double date) { try { int nTotalDays = (int)date; int nMiliseconds = (int)Math.Round((date - nTotalDays)*86400000); int nHour = nMiliseconds/( 60/*minutes*/*60/*seconds*/*1000 ); nMiliseconds = nMiliseconds - nHour*60/*minutes*/*60/*seconds*/*1000; int nMin = nMiliseconds/( 60/*seconds*/*1000 ); nMiliseconds = nMiliseconds - nMin*60/*seconds*/*1000; int nSec = nMiliseconds/1000; int nYear = 1900; while (nTotalDays > ( (( (nYear%4 == 0 && nYear%100 != 0) || nYear%400 == 0 ) || nYear==1900)?366:365)) { if ( ((nYear%4 == 0 && nYear%100 != 0) || nYear%400 == 0) || nYear==1900)//bisect year { nTotalDays -= 366; } else { nTotalDays -= 365; } nYear++; } //because Excel consider 1900 as a leap year 60 = 02/29/1900; ther is no such a dat in java or C# so we should consider this day as 02/28/1900 if(nTotalDays == 60 && nYear == 1900) { nTotalDays = nTotalDays - 1; } bool isBisectYear = ((nYear%4 == 0 && nYear%100 != 0) || nYear%400 == 0) || nYear==1900; int nMonth = 0; bool bMonthFound = false; for (nMonth=1; nMonth<12> 31) nTotalDays -= 31;//January else bMonthFound = true; break; case 2: if (nTotalDays > (isBisectYear?29:28)) nTotalDays -= isBisectYear?29:28;//February else bMonthFound = true; break; case 3: if (nTotalDays > 31) nTotalDays -= 31;//March else bMonthFound = true; break; case 4: if (nTotalDays > 30) nTotalDays -= 30;//April else bMonthFound = true; break; case 5: if (nTotalDays > 31) nTotalDays -= 31;//May else bMonthFound = true; break; case 6: if (nTotalDays > 30) nTotalDays -= 30;//June else bMonthFound = true; break; case 7: if (nTotalDays > 31) nTotalDays -= 31;//July else bMonthFound = true; break; case 8: if (nTotalDays > 31) nTotalDays -= 31;//August else bMonthFound = true; break; case 9: if (nTotalDays > 30) nTotalDays -= 30;//September else bMonthFound = true; break; case 10: if (nTotalDays > 31) nTotalDays -= 31;//October else bMonthFound = true; break; case 11: if (nTotalDays > 30) nTotalDays -= 30;//November else bMonthFound = true; break; case 12: if (nTotalDays > 31) nTotalDays -= 31;//December else bMonthFound = true; break; } } nMonth = nMonth - 1; int nDay = nTotalDays; if (nDay == 0)//if it is the last day of the year { nDay = 31; nMonth = 1; nYear = nYear - 1; } return new DateTime( nYear, nMonth, nDay, nHour, nMin, nSec); } catch (Exception x) { Console.WriteLine(x.Message); return new DateTime(0,0,0); } } |
Page 1 of 1 | All times are UTC - 4 hours |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |