2012-04-27 2 views
5

Tôi có truy vấn SQL từ SQL Server trả về ngày dưới dạng chuỗi ở định dạng "YYYY-MM-DD". Nếu tôi nhập ngày ở định dạng này vào ô, nó sẽ được ghi nhận là ngày tháng. Nhưng khi tôi điền một trang tính với CopyFromRecordset, nó dường như được coi là một chuỗi. Bất kỳ công thức nào sử dụng ô sẽ chuyển đổi nó thành một ngày đầu tiên. Ví dụ: nếu ngày của tôi ở cột A và tôi tạo cột B mới chứa công thức = A1 + 0 , công thức sẽ trả về ngày của tôi, dưới dạng một ngày.cách nhận excel để coi ngày tháng là ngày không phải là chuỗi khi thực hiện CopyFromRecordset

Sự cố: Tôi sử dụng dữ liệu Recordset cho một vài điều, một trong số đó là bảng tổng hợp. Bảng tổng hợp không thấy ngày của tôi là ngày. Ví dụ: tôi không thể nhóm thành ngày tháng. Hack của tôi là tạo một cột mới về cơ bản = A1 + 0 Tôi sẽ thay đổi macro của mình để tự động hóa việc thêm số 0, nhưng tôi tự hỏi liệu có cách nào để lấy nó ngay từ lúc CopyFromRecordset được thực hiện hay không.

+0

Bạn đã cố gắng gán định dạng ô theo cách thủ công cho loại dữ liệu "DATE" trước khi áp dụng tính năng sao chép từ chối không? – xQbert

Trả lời

3

Cách đơn giản nhất sẽ được để làm việc chuyển đổi trên SQL server ví dụ

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

Cảm ơn, điều này đã làm việc. –

+0

Lưu ý: điều này không làm việc cho tôi trong Oracle, vì vậy tôi chỉ phải thay đổi định dạng số của cột trong Excel. – waternova

+0

truyền như ngày không làm việc cho tôi trên máy chủ sql. Datetime đã làm các trick. – NiH

1

Sử dụng chức năng CDate() khi điền các ô có ngày tháng từ bộ sưu tập. Điều này sẽ chuyển đổi chuỗi thành một giá trị ngày tháng.

Sửa

đó làm việc để thiết lập giá trị tế bào riêng lẻ. Để sử dụng CopyFromRecordset Tôi nghĩ bạn cần phải thực hiện cuộc trò chuyện trong truy vấn SQL, do đó cột được trả về bởi truy vấn là loại ngày chứ không phải chuỗi.

-1

Điều này có lẽ sẽ không phải là câu trả lời nhưng chắc chắn sẽ giúp bạn tìm ra giải pháp thích hợp cho vấn đề của bạn

String stringCellValue = myCell.toString(); 

đây myCell có datatype như CELL mà tôi đã chuyển đổi sang Chuỗi định dạng. Nếu u muốn nó trong mong muốn định dạng ngày, sau đó u có thể thử this-

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

Hy vọng nó giúp trong việc giải quyết vấn đề của bạn ...

+0

Ngôn ngữ này là gì? Chắc chắn không phải VBA ... –

2

CopyFromRecordset nổi tiếng vì gây ra các vấn đề định dạng kiểu dữ liệu/ô trong Excel.

Tôi nghĩ rằng tôi nhớ đọc ở đâu đó là vì kiểu dữ liệu của recordset bị bỏ qua và Excel cố gắng làm việc định dạng của mỗi cột dựa trên tập con của dữ liệu trong recordset.

Cách tốt nhất làm tròn này là đặt định dạng ô trong phạm vi đích trước khi thực hiện CopyFromRecordset.

0

Tôi đã gặp sự cố này khi nhập dữ liệu từ Teradata và đã thu thập dữ liệu từ đầu bằng cách định dạng cột ngày với NumberFormat = "m/d/yy h: mm; @" (ngày 24 giờ) rồi bước qua các trường ngày sau đó với VBA và thực hiện các giá trị ws.cells (iRow, iCol) .value = ws.cells (iRow, iCol) .value, nó buộc Excel phải đánh giá lại chuỗi thành trường ngày/giờ.

2

Tôi gặp sự cố này sau khi tôi đã thay đổi chế độ xem trên cơ sở dữ liệu SQL Server của mình.Tôi đã thay đổi kiểu dữ liệu thành DATE; trước đây là phiên bản cũ hơn không hỗ trợ DATE nên tôi đã sử dụng DATETIME. Tôi nghi ngờ Excel không phải lúc nào cũng nhận ra kiểu dữ liệu Date thông qua nhà cung cấp SQLOLEDB, nhưng nó nhận ra DATETIME. Lĩnh vực quan tâm là meas_date. Vì vậy, tôi thay đổi quan điểm bằng cách thay đổi điều này thành một dàn diễn viên SELECT CAST(meas_date AS DATETIME) AS meas_date, ... và làm mới truy vấn trong Excel. Đã làm việc!