C#Excel日期值将作为数值

时间:2016-10-08 10:56:45

标签: c# excel date

excel文件由第三方应用生成。我正在编写一个实用程序来进一步处理该Excel文件。当我读取包含日期值的列时,我得到的数字字符串如05/02/2016(dd / MM / yyyy)将以42405的形式出现。

我尝试过使用.Text,.Formula,.Value,.Value2 - 所有方法都返回数值。

我知道FromOADateTime,但我的要求是将日期值作为字符串读取,完全按照它在屏幕上的显示方式。

感谢。

编辑1: 当我将列转换为Excel中的文本时,通过使用单元格格式并选择文本,所有日期值甚至在Excel中转​​换为数值!这有什么线索吗?可能第三方应用程序将数据存储为数值,但Excel会将其显示为屏幕上的日期字符串。我想读一下屏幕上显示的值。

编辑2:

此列中的所有日期值都没有此问题。我的第一印象是,在将日期值写入Excel时,第三方应用程序不一致。但我无法控制它。

编辑3: 以下是下载文件的链接:http://wikisend.com/download/316956/Prob.xls。在这个文件中,我需要读取B列中的所有日期值作为从第13行开始的文本

这是指向我机器中的外观截图的链接:http://wikisend.com/download/443994/Screenshot1.jpg

编辑4: 在NineBerry的回答的帮助下找到了我的代码中的罪魁祸首:在阅读Text属性之前的几行,我调用了ws.Columns.ClearFormats()和ws.Rows.ClearFormats();

我需要这样做:How to get the range of occupied cells in excel sheet ...,以便正确获取工作表中的使用范围!

原来的问题已经解决了。现在问题是如何使用ws.UsedRange而不调用ClearFormats()来正确获取已使用单元格的范围。

我的具体要求是获得在任何单元格中使用数据的已使用ROWS的范围,直到Col H.我不需要Excel中的整个UsedRange,Col H中的UsedRange对我来说已经足够了。

对此有何解决方案?或者我应该发布新帖子吗?

1 个答案:

答案 0 :(得分:1)

使用Text属性 提供将向用户显示的字符串。

      private void button_Click(object sender, EventArgs e)
      {
           string path = @"C:\Test.xlsx";

           Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();
           Workbook wb = excel.Workbooks.Open(path);
           Worksheet excelSheet = wb.ActiveSheet;

           //Read a specific cell
           Range cell = excelSheet.Cells[1, 3] as Range;

           // Show text content
           MessageBox.Show(cell.Text);

           wb.Close();
      }

如果您在此处看不到Excel中显示的内容,则必须向我们提供更多详细信息。也许提供一个示例Excel文件,其中单元格的行为不符合预期。

此代码输出文件中第二列的内容,与Excel中显示的完全相同:

  private void button1_Click(object sender, EventArgs e)
  {
       string path = @"D:\Downloads\Windows\Prob.xls";

       Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();
       Workbook wb = excel.Workbooks.Open(path);
       Worksheet excelSheet = wb.ActiveSheet;

       //Read a specific cell
       for (int i = 1; i <= 150; i++ )
       {
            Range cell = excelSheet.Cells[i + 1, 2] as Range;
            textBox1.AppendText(cell.Text + Environment.NewLine);

       }
       wb.Close();
  }

如果您没有看到,那么您应该检查您是否正在阅读正确的文件,并且在阅读之前不要自己修改文件。