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();
        }
复制代码

 

posted @   txwtech  阅读(1388)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
历史上的今天:
2020-01-03 STM32单片机应用与全案例实践 /stm32自学笔记 第二版 pdf
点击右上角即可分享
微信分享提示