如何获得Excel的date作为一个date而不是一个string时做CopyFromRecordset

我有一个来自SQL Server的SQL查询,它以格式“YYYY-MM-DD”的forms返回date。 如果我将这种格式的dateinput到单元格中,则会将其识别为date。 但是,当我用CopyFromRecordset填充工作表时,它似乎被视为一个string。 任何使用单元格的公式都会先将其转换为date。 例如,如果我的date是在列A中,而且我创build了一个填充公式= A1 + 0的新列B,那么该公式将返回我的date作为date。

问题:我使用Recordset数据做了一些事情,其中​​一个是数据透视表。 数据透视表没有看到我的date为date。 例如,我不能将它们分组为date。 我的黑客是做一个新的列,这基本上是= A1 + 0我要改变我的macros来自动添加一个零,但我想知道是否有办法从CopyFromRecordset执行的那一刻起。

最简单的方法是在SQL服务器上进行转换,例如

SELECT CAST(date_text AS DATE) FROM TestExcelDates; 

CopyFromRecordset是众所周知的在Excel中导致数据types/单元格格式问题。

我想我记得在某处读取这是因为logging集的数据types被忽略,并且Excel试图根据logging集中的数据的一个子集计算每个列本身的格式。

最好的方法是执行CopyFromRecordset 之前将单元格格式设置在目标范围内。

在我更改了SQL Server数据库的视图后,我遇到了这个问题。 我已经将数据types更改为DATE; 以前它是在一个不支持DATE的旧版本,所以我使用了DATETIME。 我怀疑Excel并不总是通过SQLOLEDB提供程序识别date数据types,但它确实识别DATETIME。 感兴趣的领域是meas_date 。 所以我改变了这个视图,将其转换为SELECT CAST(meas_date AS DATETIME) AS meas_date, ...并刷新了Excel中的查询。 成功了!

使用loggingCDate()date填充单元格时使用CDate()函数。 这将把string转换为date值。

编辑

这适用于设置单个单元格值。 对于使用CopyFromRecordset我想你需要在SQL查询中执行转换,所以查询返回的列是datetypes而不是string。

我也有这个问题,从Teradata导入数据,并通过首先格式化date列与NumberFormat =“m / d / yy h:mm; @”(24小时date),然后逐步通过date字段与VBA和做ws.cells(iRow,iCol).value = ws.cells(iRow,iCol).value,它强制Excel重新将string转换为date/时间字段。

这可能不会是答案,但一定会帮助你find适合你的问题的解决scheme

 String stringCellValue = myCell.toString(); 

这里myCell的数据types是CELL ,我已经转换为string格式。 如果你想以期望的date格式,那么你可以试试这个 –

 SimpleDateFormat sdf = new SimpleDateFormat("YYYY-MM-DD"); myCellDate = sdf.parse(stringCellValue ); 

希望它有助于解决您的问题…