【问题标题】:how to get excel to treat a date as a date not a string when doing CopyFromRecordset执行 CopyFromRecordset 时如何让 excel 将日期视为日期而不是字符串
【发布时间】:2012-05-07 21:52:24
【问题描述】:

我有一个来自 SQL Server 的 SQL 查询,它以“YYYY-MM-DD”格式返回日期作为字符串。 如果我以这种格式在单元格中输入日期,它会被识别为日期。 但是当我使用 CopyFromRecordset 填充工作表时,它似乎被视为字符串。 任何使用单元格的公式都会先将其转换为日期。例如,如果我的日期在列 A 中,并且我创建了一个新列 B,其中填充了公式 =A1 + 0 该公式将我的日期作为日期返回。

问题: 我将 Recordset 数据用于一些事情,其中​​之一是数据透视表。 数据透视表不会将我的日期视为日期。例如,我不能按日期分组。我的技巧是创建一个基本上是 =A1 + 0 的新列 我将更改我的宏以自动添加一个零,但我想知道是否有办法从执行 CopyFromRecordset 的那一刻起正确处理它。

【问题讨论】:

  • 您是否尝试在应用 copyfromrecordset 之前手动将单元格的格式分配给“DATE”数据类型?

标签: sql excel vba


【解决方案1】:

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

SELECT CAST(date_text AS DATE) FROM TestExcelDates;

【讨论】:

  • 注意:这对我在 Oracle 中不起作用,所以我只需要在 Excel 中更改列的数字格式。
  • 在 sql server 上转换为日期对我不起作用。日期时间成功了。
【解决方案2】:

CopyFromRecordset 因在 Excel 中导致数据类型/单元格格式问题而闻名。

我想我记得在某处读过,这是因为记录集的数据类型被忽略了,Excel 尝试根据记录集中的数据子集计算出每一列本身的格式。

解决此问题的最佳方法是在目标范围内设置单元格格式执行CopyFromRecordset之前。

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      使用记录集中的日期填充单元格时使用CDate() 函数。这会将字符串转换为日期值。

      编辑

      这适用于设置单个单元格值。对于使用CopyFromRecordset,我认为你需要在SQL查询中进行conversino,所以查询返回的列是日期类型而不是字符串。

      【讨论】:

        【解决方案5】:

        我在从 Teradata 导入数据时也遇到了这个问题,通过首先使用 NumberFormat = "m/d/yy h:mm;@" (24 hr date) 格式化日期列然后逐步遍历日期字段来解决这个问题使用 VBA 并执行 ws.cells(iRow, iCol).value = ws.cells(iRow, iCol).value,它会强制 Excel 将字符串重新评估为日期/时间字段。

        【讨论】:

          【解决方案6】:

          这可能不是答案,但肯定会帮助您为您的问题找到正确的解决方案

          String stringCellValue = myCell.toString();
          

          这里 myCell 的数据类型为 CELL,我已将其转换为 String 格式。 如果您希望它采用所需的日期格式,那么您可以试试这个-

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

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-04-23
            • 2021-07-14
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-06-23
            相关资源
            最近更新 更多