C# 读取Excel日期格式方法
读取Excel日期数据,一种方式是在EXCEL中把你的日期列的格式设置一下,设成"文本"型。
如果单元格格式设置为date,则在后台读出的数值是一个数值,如2008-08-08读出来是39688,怎样才能读出来是日期格式?方法如下:
要做一个判断,如果该单元格是一个double值,那么就要用 DateTime.FromOADate(double.Parse(range.Value2.ToString()));方法获得时间;如果就是一个时间,那么就直接DateTime.Parse(range.Value2.ToString());就可以了。
string schedule = CommonFunc.ConvertObjectToString(row.GetCell(6)).Trim();
if (IsDouble(schedule))
{
schedule = DateTime.FromOADate(double.Parse(schedule)).ToString("yyyy/MM/dd", System.Globalization.DateTimeFormatInfo.InvariantInfo);
}
private void OpenExcel(string strFileName) { object missing = System.Reflection.Missing.Value; Excel.Application excel = new Excel.Application();//lauch excel application if (excel == null) { //this.label1.Text = "Can't access excel"; toolStripStatusLabel1.Text = "无法启动excel"; } else { excel.Visible = false; excel.UserControl = true; // 以只读的形式打开EXCEL文件 Excel.Workbook wb = excel.Application.Workbooks.Open(strFileName, missing, true, missing, missing, missing, missing, missing, missing, true, missing, missing, missing, missing, missing); //取得第一个工作薄 Excel.Worksheet ws = (Excel.Worksheet)wb.Worksheets.get_Item(1); //取得总记录行数 (包括标题列) int rowsint = ws.UsedRange.Cells.Rows.Count; //得到行数 //int columnsint = mySheet.UsedRange.Cells.Columns.Count;//得到列数 //取得数据范围区域 (不包括标题列) Excel.Range rng1 = ws.Cells.get_Range("A2", "A" + rowsint); Excel.Range rng2 = ws.Cells.get_Range("B2", "B" + rowsint); Excel.Range rng3 = ws.Cells.get_Range("C2", "C" + rowsint);//日期 Excel.Range rng4 = ws.Cells.get_Range("D2", "D" + rowsint); Excel.Range rng5 = ws.Cells.get_Range("E2", "E" + rowsint); Excel.Range rng6 = ws.Cells.get_Range("F2", "F" + rowsint); Excel.Range rng7 = ws.Cells.get_Range("G2", "G" + rowsint); object[,] arry1 = (object[,])rng1.Value2; //get range's value object[,] arry2 = (object[,])rng2.Value2; object[,] arry3 = (object[,])rng3.Value2; //get range's value ,//日期 object[,] arry4 = (object[,])rng4.Value2; object[,] arry5 = (object[,])rng5.Value2; object[,] arry6 = (object[,])rng6.Value2; object[,] arry7 = (object[,])rng7.Value2; //将新值赋给一个数组 string[,] arry = new string[rowsint - 1, 7]; //for (int i = 1; i <= rowsint - 1; i++) for (int i = 1; i <= rowsint - 2; i++) { arry[i - 1, 0] = arry1[i, 1].ToString();//事件 arry[i - 1, 1] = arry2[i, 1].ToString(); //类别 // DateTime aa = (DateTime)arry3[i, 1]; // DateTime aa2= double.Parse(arry3[i, 1].ToString()); //arry[i - 1, 2] = arry3[i, 1].ToString();//日期 //string aa=DateTime.FromOADate(double.Parse(arry3[i, 1].ToString())).ToString("yyyy/MM/dd", System.Globalization.DateTimeFormatInfo.InvariantInfo); arry[i - 1, 2] = DateTime.FromOADate(double.Parse(arry3[i, 1].ToString())).ToString("yyyy/MM/dd", System.Globalization.DateTimeFormatInfo.InvariantInfo); // arry[i - 1, 3] = arry4[i, 1].ToString();//时间 arry[i - 1, 3] = DateTime.FromOADate(double.Parse(arry4[i, 1].ToString())).ToString("HH:mm:ss", System.Globalization.DateTimeFormatInfo.InvariantInfo); arry[i - 1, 4] = arry5[i, 1].ToString();//信息 arry[i - 1, 5] = arry6[i, 1].ToString();//发生次数 arry[i - 1, 6] = arry7[i, 1].ToString();//累计时间 } string a = ""; for (int i = 0; i <= rowsint - 3; i++) { a += arry[i, 0] + "|" + arry[i, 1] + "|" + arry[i, 2] + "|" + arry[i, 3] + "|" + arry[i, 4] + "|" + arry[i, 5] + "|" + arry[i, 6] + "\r\n"; } // this.toolStripStatusLabel1.Text = a; //MessageBox.Show(a); } excel.Quit(); excel = null; Process[] procs = Process.GetProcessesByName("excel"); foreach (Process pro in procs) { pro.Kill();//没有更好的方法,只有杀掉进程 } GC.Collect(); }
欢迎讨论,相互学习。
cdtxw@foxmail.com
分类:
C#
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
2020-01-03 STM32单片机应用与全案例实践 /stm32自学笔记 第二版 pdf