c#将OADa​​te转换为Valid DateTime Microsoft.Office.Interop.Excel

时间:2016-08-26 00:09:29

标签: c# excel-interop

我试图从Excel文件中获取日期字段,但是日期是以#34; 42373"等常规格式出现的,我尝试了所有内容,例如转换为double然后转换为datetime。我找不到任何代码来帮助我,我使用业务系统来做到这一点..这就是为什么我在这里找到的常规代码无法工作

我想得到那个" 42373"并格式化为有效日期(2016-04-01),他们得到" MMM"从它。

obs:使用CSharp Ineterop。

   using System;
   using System.Text;
   using System.Reflection;
   using System.Collections;
   using System.Globalization;
   using System.Collections.Generic;
   using System.Collections.ObjectModel;
   using Microsoft.Office.Interop.Excel;

   public class Macro : MacroBase {

   private enum Header1 {
   [Name("ACCOUNT  NUMBER")]
   Begin,
   }

   private enum Header2 {
   [Name("PERIOD  COVERED")]
   Period,
  }

  protected override bool Run() {

    var RSheet = (Worksheet)TargetWorkbook.Worksheets[1];
    if (RSheet == null)
        return false;

   var excelTable = new ExcelTable<Header2>(){ CacheHeaders = true };
    if (excelTable.Initialize(RSheet) == false)
        return false;

    var excelTable1 = new ExcelTable<Header1>(){ CacheHeaders = true };
    if (excelTable1.Initialize(RSheet) == false)
        return false;

     var Periodo = excelTable[Header2.Period].get_Offset(1,0).Value;

      excelTable1[Header1.Begin].get_Offset(2,0).Value2 = Periodo;

     return true;
   }

   }

WORKS

      string Periodo =        excelTable[Header2.Period].get_Offset(1,0).Value.ToString();      
       excelTable1[Header1.Begin].get_Offset(2,0).Value = DateTime.FromOADate(42373).ToString("MMM");

不要工作

     DateTime.FromOADate(Periodo).ToString("MMM");

2 个答案:

答案 0 :(得分:0)

使用DateTime.FromOADate(value).ToString("MMM")

答案 1 :(得分:0)

知道了,谢谢!

    string Periodo = excelTable[Header2.Period].get_Offset(1,0).StringValue();

     string b = Periodo;
     double d = double.Parse(b);
     DateTime conv = DateTime.FromOADate(d);

     var Bingo = conv.ToString("MMM-yyyy");