2012-04-27 6 views
5

Mam zapytanie SQL z SQL Server, który zwraca daty w postaci ciągu "RRRR-MM-DD". Po wprowadzeniu daty w tym formacie do komórki zostanie ona uznana za datę. Ale kiedy zapełniam arkusz z CopyFromRecordset, wydaje się traktowany jako ciąg. Każda formuła, która używa komórki, konwertuje ją na datę jako pierwszą. Na przykład, jeśli moje daty są w kolumnie A i tworzę nową kolumnę B wypełnioną formułą = A1 + 0 , formuła zwraca moją datę jako datę.jak uzyskać excel traktować datę jako datę, a nie ciąg podczas wykonywania CopyFromRecordset

Problem: Używam danych zestawu rekordów dla kilku rzeczy, z których jednym jest tabela przestawna. Tabela przestawna nie wyświetla dat jako dat. Nie mogę na przykład grupować jako daty. Moje hackowanie polega na stworzeniu nowej kolumny, która jest w zasadzie = A1 + 0 Zamierzam zmienić moje makro, aby zautomatyzować to dodanie zera, ale zastanawiam się, czy istnieje sposób na uzyskanie tego od razu, gdy wykonywany jest CopyFromRecordset.

+0

Czy próbowałeś ręcznie przypisać format komórki do typu danych "DATA" przed zastosowaniem zestawu copyfromrecordset? – xQbert

Odpowiedz

3

Najłatwiej byłoby zrobić konwersję na Serwer SQL np

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

Dzięki, to zadziałało. –

+0

Uwaga: to nie działało dla mnie w Oracle, więc musiałem zmienić format liczb kolumn w Excelu. – waternova

+0

casting jako data nie działa dla mnie na serwerze sql. Datetime załatwił sprawę. – NiH

1

Użyj funkcji CDate() podczas wypełniania komórek datami z zestawu rekordów. Spowoduje to przekształcenie ciągu znaków w wartość daty.

Edit

który pracuje dla ustalania wartości poszczególnych komórek. Do korzystania z CopyFromRecordset myślę, że musisz zrobić conversino w zapytaniu SQL, więc kolumna zwrócona przez zapytanie jest typem daty, a nie łańcuchem.

-1

To prawdopodobnie nie będzie odpowiedzi, ale na pewno pomaga Ci znalezienie odpowiedniego rozwiązania dla problemu

String stringCellValue = myCell.toString(); 

tutaj myCell ma typ danych jako CELL który ja przekształcany ciąg formatu. Jesli chcesz go w żądanym formacie Data, to można spróbować u this-

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

Nadzieję, że to pomaga w rozwiązywaniu problemu ...

+0

Jaki to jest język? Zdecydowanie nie VBA ... –

2

CopyFromRecordset jest dobrze znany z powodu problemów z formatem danych/formatowaniem komórek w programie Excel.

Wydaje mi się, że pamiętam gdzieś to czytać, ponieważ typ danych zestawu rekordów jest ignorowany i program Excel próbuje ustalić format każdej kolumny na podstawie podzbioru danych w zestawie rekordów.

Najlepszym sposobem jest ustawienie formatowania komórek w zakresie docelowym przed wykonaniem .

0

Miałem ten problem, zaimportowanie danych z Teradata, i obejrzałem go najpierw formatując kolumny daty z NumberFormat = "m/d/yy h: mm; @" (data 24 h), a następnie przechodząc przez pola dat następnie z VBA i wykonywanie ws.cells (iRow, iCol) .value = ws.cells (iRow, iCol) .value, zmusza program Excel do ponownej oceny łańcucha w polu daty/czasu.

2

Miałem ten problem po tym, jak zmieniłem widok na mojej bazie danych SQL Server.Zmieniłem typ danych na DATE; Poprzednio był na starszej wersji, która nie obsługiwała DATE, więc użyłem DATETIME. Podejrzewam, że Excel nie zawsze rozpoznaje typ danych Date przez dostawcę SQLOLEDB, ale rozpoznaje DATETIME. Dziedzina zainteresowania to meas_date. Zmieniłem widok, zmieniając to na odlew SELECT CAST(meas_date AS DATETIME) AS meas_date, ... i odświeżyłem zapytanie w Excelu. Pracował!

Powiązane problemy