5

「YYYY-MM-DD」形式の文字列として日付を返す SQL Server からの SQL クエリがあります。この形式で日付をセルに入力すると、日付として認識されます。しかし、ワークシートに CopyFromRecordset を入力すると、文字列として扱われるようです。セルを使用する数式は、最初にセルを日付に変換します。たとえば、私の日付が列 A にあり、式 =A1 + 0 で満たされた新しい列 B を作成すると、式は私の日付を日付として返します。

問題: いくつかの目的で Recordset データを使用していますが、そのうちの 1 つはピボット テーブルです。ピボット テーブルで日付が日付として表示されません。たとえば、日付としてグループ化することはできません。私のハックは、基本的に =A1 + 0 である新しい列を作成することです。マクロを変更して、これを自動化してゼロを追加しますが、CopyFromRecordset が実行された瞬間からそれを正しく取得する方法があるかどうか疑問に思います。

4

6 に答える 6

4

最も簡単な方法は、SQLサーバーで変換を行うことです。

SELECT CAST(date_text AS DATE) FROM TestExcelDates;
于 2012-04-27T08:00:45.887 に答える
2

SQL Server データベースのビューを変更した後、この問題が発生しました。データ型を DATE に変更しました。以前はDATEをサポートしていない古いバージョンだったので、DATETIMEを使用していました。Excel は、SQLOLEDB プロバイダーを介して常に Date データ型を認識しているとは限りませんが、DATETIME は認識します。対象のフィールドはmeas_dateです。そこで、これをキャストに変更してビューを変更しSELECT CAST(meas_date AS DATETIME) AS meas_date, ...、Excel でクエリを更新しました。働いた!

于 2015-06-03T20:00:24.453 に答える
2

CopyFromRecordsetExcel でデータ型/セルの書式設定の問題を引き起こすことでよく知られています。

これは、レコードセットのデータ型が無視され、Excel がレコードセット内のデータのサブセットに基づいて各列自体の形式を計算しようとするためです。

これを回避する最善の方法は、CopyFromRecordset.

于 2012-04-27T15:32:09.317 に答える
1

CDate()セルにレコードセットの日付を入力するときに関数を使用します。これにより、文字列が日付値に変換されます。

編集

これは、個々のセル値を設定するために機能します。使用CopyFromRecordsetするには、SQLクエリでconversinoを実行する必要があると思うので、クエリによって返される列は文字列ではなく日付型です。

于 2012-04-27T06:24:54.493 に答える
0

私も Teradata からデータをインポートする際にこの問題を抱えていましたが、最初に NumberFormat = "m/d/yy h:mm;@" (24 hr date) で日付列をフォーマットし、その後 VBA で日付フィールドをステップ実行して回避しました。 ws.cells(iRow, iCol).value = ws.cells(iRow, iCol).value を実行すると、Excel は強制的に文字列を日付/時刻フィールドに再評価します。

于 2015-01-15T18:34:22.697 に答える
-1

これはおそらく答えではありませんが、問題の適切な解決策を見つけるのに役立ちます

String stringCellValue = myCell.toString();

ここで myCell のデータ型はCELLで、これをString形式に変換しました。希望の日付形式にしたい場合は、これを試すことができます-

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

問題の解決に役立つことを願っています...

于 2012-04-27T06:43:31.173 に答える