2009-08-12 3 views
0

Ich habe einen Client, der nicht in der Lage ist, Tabellen korrekt zu formatieren. Ich habe sie 10 Mal gebeten, eine vernünftige Richtlinie zu befolgen (wie FORMAT DIE SPALTEN MIT DEM RICHTIGEN DATATYPE), aber in ihrer mangelnden Intelligenz oder Professionalität oder beidem können sie es einfach nicht tun/werden.Excel-Kalkulationstabellen für Idioten korrigieren

Ich habe eine ODBC-Verbindung für die Tabellen eingerichtet und zieht die Daten mit Ausnahme der Spalten, die Produktanzahl oder Produktpreise enthalten. Wenn ich den Typ für jede dieser Spalten nicht manuell auf "Anzahl" in Excel einstelle, erscheinen die Werte in der ASP-Seite, die die Ergebnisse anzeigt, als null.

Ist es möglich, eine SQL-Anweisung zu schreiben, die den Datentyp ändert, wenn er eingeht? Es ist mir egal, wenn jede Spalte in eine Zeichenfolge konvertiert wird, solange das ADODB.Recordset die Werte aller Spalten anzeigt.

Code:

<% 
Dim MM_SQLSource 

MM_SQLSource = "SELECT * FROM [Inventory$]" 
Set rsGetExcelInfo = Server.CreateObject("ADODB.Recordset") 
rsGetExcelInfo.ActiveConnection = MM_Excel_Connect 
rsGetExcelInfo.Source = MM_SQLSource 
rsGetExcelInfo.CursorType = 0 
rsGetExcelInfo.CursorLocation = 2 
rsGetExcelInfo.LockType = 1 

rsGetExcelInfo.Open() 
%> 
+1

Wenn Sie Ihren Kunden einen Idioten, unintelligent und unprofessionell nennen ... vielleicht werden sie weggehen und so wird Ihr Problem? –

Antwort

1

Es kann nicht völlig Fehler Ihres Kunden sein. Excel hat manchmal eigene Ideen, wie eine Spalte formatiert werden soll. Zum Beispiel, wenn Sie eine Spalte mit Postleitzahlen haben, einige mit dem Plus 4, andere ohne, ist es ziemlich ein Mist-Shooting, wie diese Spalte formatiert wird.

Wie für Ihre ursprüngliche Frage nach dieser site, CONVERT ist eine gültige SQL-Skalarfunktion, vielleicht so etwas wie

SELECT CONVERT(BadField, SQL_CHAR) AS FixedField FROM [Inventory$] 

funktionieren könnte?

Meine erste Intention war, die Verwendung von COM zum Lesen der Daten aus der Tabelle vorzuschlagen. Ich bin mir ziemlich sicher, dass Sie in der Lage wären, das Format jeder Zelle zu lesen und entsprechend damit umzugehen, aber ich fand Excel über COM immer schwierig und nicht schrecklich schnell (ich habe es nur aus C++ gemacht).

1

Leider AFAIK alle ODBC/ADO/OLEDB/was auch immer Gadgets erraten den Datentyp für jede Spalte nach der Überprüfung ein paar Zeilen (Standard ist 8, glaube ich).

Es gibt Pakete/Module/Bibliotheken für Python [1] /Perl/PHP/.Net usw., mit denen Sie eine Excel-Datei Zelle für Zelle lesen können. Die besseren geben Ihnen sowohl einen Wert als auch einen feinkörnigen Typ (text/numeric/date/boolean/error/empty) für jede Zelle - bewaffnet mit dieser Information und einem Wissen darüber, was in jeder Spalte sein soll, können Sie mach einen Reparaturjob.

[1] z. http://pypi.python.org/pypi/xlrd von denen ich der Autor bin ... nach gebissen von (a) das ODBC-Problem (b) das 'save-as-CSV' Problem (c) das COM-Problem

1

Wie wäre es mit Excel zu stoppen und zu setzen es in eine echte Datenbank mit einigen Formen für die Benutzerdateneingabe?

Es sollte nicht allzu schwierig sein, die Tabelle in eine Datenbank zu legen. Access wäre gut. Oder verwenden Sie ein SQL Server-Back-End und ein Access-Front-End. Oder, wenn Sie mehr Aufwand bewältigen können, machen Sie ein Web-Front-End.

Was Sie finden, ist, dass je schwieriger es ist, dies zu tun, desto schlechter waren Ihre Daten sowieso, und desto mehr Fehler, Inkonsistenzen und Auslassungen hatten Sie.

Tun Sie allen einen Gefallen und formalisieren Sie dieses Ding.