2012-04-27 35 views
5

我有一個來自SQL Server的SQL查詢,它以格式「YYYY-MM-DD」的格式返回日期。 如果我將這種格式的日期輸入到單元格中,它將被識別爲日期。 但是,當我用CopyFromRecordset填充工作表時,它似乎被視爲一個字符串。 任何使用單元格的公式都會先將它轉換爲日期。例如,如果我的日期位於列A中,而且我創建了一個填充公式= A1 + 0 的新列B,則該公式將返回我的日期作爲日期。如何讓excel將日期當作日期而不是字符串做CopyFromRecordset時

問題: 我使用Recordset數據做了一些事情,其中​​一個是數據透視表。 數據透視表沒有看到我的日期爲日期。例如,我無法將日期分組。我的破解是創建一個新的列,它基本上是= A1 + 0我要改變我的宏來自動添加一個零,但我想知道是否有辦法從CopyFromRecordset被執行的那一刻開始。

+0

您是否曾嘗試在應用copyfromrecordset之前手動將單元格格式指定爲「DATE」數據類型? – xQbert 2015-06-03 20:04:07

回答

3

最簡單的方法是做對的轉換SQL服務器例如

SELECT CAST(date_text AS DATE) FROM TestExcelDates; 
+1

謝謝,這工作。 – 2012-04-29 13:18:28

+0

注意:這在Oracle中並不適用於我,所以我只需在Excel中更改列的數字格式。 – waternova 2015-05-19 18:24:07

+0

由於日期不適合我在sql server上工作。日期時間做了訣竅。 – NiH 2017-07-07 12:56:04

1

使用CDate()函數填充記錄集中的日期單元格時。這會將字符串轉換爲日期值。

編輯

,對於設置單獨的單元格值的作品。對於使用CopyFromRecordset我想你需要在SQL查詢中執行轉換,所以查詢返回的列是日期類型而不是字符串。

-1

這可能不會是答案,但肯定會幫助您找到合適的解決方案,您的問題

String stringCellValue = myCell.toString(); 

這裏了myCell具有數據類型爲CELL我已經轉換爲字符串格式。 如果妳想要在期望日期格式,則U可以試試這個 -

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

希望它可以幫助解決你的問題......

+0

這是什麼語言?絕對不是VBA ... – 2012-04-27 08:20:26

2

CopyFromRecordset因在Excel中引發數據類型/單元格格式問題而衆所周知。

我想我記得在某處讀到這是因爲記錄集的數據類型被忽略,Excel試圖根據記錄集中數據的一個子集計算出每列的格式。

圍繞此操作的最佳方法是在目標範圍中設置單元格格式,然後執行CopyFromRecordset

0

我也有這個問題,從Teradata導入數據,並通過首先格式化NumberFormat =「m/d/yy h:mm; @」(24小時日期)的日期列,然後逐步瀏覽日期字段之後使用VBA和ws.cells(iRow,iCol).value = ws.cells(iRow,iCol).value,它強制Excel重新將字符串轉換爲日期/時間字段。

2

我在更改SQL Server數據庫的視圖後出現此問題。我已將數據類型更改爲DATE;以前它是在一個不支持DATE的舊版本中,因此我使用了DATETIME。我懷疑Excel並不總是通過SQLOLEDB提供程序識別Date數據類型,但它確實能識別DATETIME。感興趣的領域是meas_date。所以我改變了這個視圖,將其更改爲SELECT CAST(meas_date AS DATETIME) AS meas_date, ...,並刷新了Excel中的查詢。成功了!

相關問題