C#Exceldate值以数值forms出现

Excel文件是由第三方应用程序生成的。 我正在编写一个实用程序来进一步处理该Excel文件。 当我读取包含date值的列时,我得到一个数字string,如05/02/2016(dd / MM / yyyy)即将到达42405。

我已经尝试使用.Text,.Formula,.Value,.Value2 – 所有的方法都返回数值。

我知道FromOADateTime,但我的要求是读取date值作为一个string,正是它在屏幕上显示的方式。

谢谢。

编辑1:当我将列转换为Excel中的文本,通过使用格式单元格并select文本,所有date值甚至在Excel中转​​换为数值! 这是否提供任何线索? 第三方应用程序可能将数据存储为数字值,但Excel将其显示为屏幕上的datestring。 我想读取屏幕上显示的值。

编辑2:

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

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

下面是我的机器的外观截图的链接: http : //wikisend.com/download/443994/Screenshot1.jpg

编辑4:find罪魁祸首在我的代码与NineBerry的答案帮助:阅读Text属性之前,我打电话ws.Columns.ClearFormats()和ws.Rows.ClearFormats();

我需要做到这一点: 如何获得Excel表格中占用的单元格的范围 …,以便正确获取表单中使用的范围!

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

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

任何解决scheme? 或者我应该发布一个新的线程?

使用Text属性给出一个显示给用户的string。

  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(); } 

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