【发布时间】:2016-10-08 10:56:45
【问题描述】:
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...,以便正确获取工作表中使用的范围!
原来的问题解决了。现在的问题是如何在不调用 ClearFormats() 的情况下使用 ws.UsedRange 来正确获取已使用单元格的范围。
我的具体要求是在任何单元格中获取包含数据的已用 ROWS 的范围,直到 Col H。我不需要 Excel 中的整个 UsedRange,Col H 中的 UsedRange 对我来说已经足够了。
有什么解决办法吗?还是我应该发布一个新主题?
【问题讨论】:
-
exactly the way it is displayed on the screen- 那么.Text应该适合你。 -
但它不起作用!我也被难住了!
-
我也尝试将 NumberFormat 设置为“@”。但我仍然得到数值。如果我将 NumberFormat 设置为“dd/MM/yyyy”,我会得到日期时间值,但与单元格可能显示的方式不同;示例单元格可能显示 05/02/2016 或 05-02-2016 等。仅供参考,该列包含混合数据;比如有些单元格包含文本字符串,有些单元格包含日期值,如果有帮助的话。
-
但是它的显示方式是可变的,取决于客户端的区域设置,所以有这个要求是没有意义的
-
在我的错误消息中,如果他打开 Excel 文件并检查,我想以他看到的方式(取决于他的语言环境)向他显示文本!