首页 文章

C#Excel日期值将作为数值

提问于
浏览
0

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 . 在此文件中,我需要从第13行开始读取B列中的所有日期值作为文本

这里是它在我的机器中的样子截图的链接: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 回答

  • 1

    使用 Text 属性 does 给出将显示给用户的字符串 .

    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文件,其中单元格的行为不符合预期 .


    此代码DOES输出文件中第二列的内容,与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();
      }
    

    如果您没有看到,则应检查您实际上是否正在读取正确的文件,并且在阅读之前不要自己从代码中修改文件 .

相关问题