| |
| |
Import-Strategie- #24455 in section [744280] |
| Sec: |
(1) Allgemeines |
| Von: |
Cyprian Kuschka |
| An: |
Fritz Maurhofer |
| Am/Um: |
03.10.2025 08:24:00 gelesen |
Lieber Fritz, | |
Etwas geholfen hat, wenn man den User vorformatierte Arbeitsblätter zur Verfügung gestellt hat.
|
Klar, es ist eine Grundvoraussetzung, absolut! | |
Da in jede Excel Zelle grundsätzlich irgendwas stehen kann, kommst Du nicht darum herum, für jede zu importierende Spalte eine Prüfregel zu implementieren und jeden Wert mindestens in den korrekten Datentyp zu konvertieren. Dann schmeisst Dir der Fuchs wenigstens keinen Fehler beim insert.
|
Die Schleife habe ich mit folgenden Schritten versehen: In einer Tabelle habe ich zu den einzelnen Spalten die Bezüge eingetragen. Dann lese ich die einzelnen Felder der Excelzeilen aus: SCAN lcFieldName = ALLTRIM(importmapping.VfpField) IF EMPTY(NVL(lcFieldName,"")) LOOP ENDIF lcExcelColumn = importmapping.ExcelCol IF EMPTY(NVL(lcExcelColumn,"")) LOOP ENDIF llRequired = NVL(importmapping.Obligat,.f.) lcDefaultValue = NVL(importmapping.StandardW,"") * Wert aus der Excel-Zelle lesen lcValue = ALLTRIM(TRANSFORM(oSheet.Cells(lnRow, lcExcelColumn).Value)) * Wenn das Feld leer ist und erforderlich, Standardwert verwenden IF EMPTY(lcValue) AND llRequired lcValue = lcDefaultValue ENDIF * Formatprüfung und Konvertierung lcFieldType = TYPE(NVL("caaw_import." + lcFieldName,"")) DO CASE CASE lcFieldType == "C" && Zeichenkette lcConvertedValue = TRIM(TRANSFORM(lcValue)) CASE lcFieldType == "N" && Numerisch lcConvertedValue = VAL(lcValue) CASE lcFieldType == "D" && Datum IF LEN(lcValue)> 10 && Datetime lcConvertedValue = CTOD(SUBSTR(lcValue, 1, 10)) ELSE lcConvertedValue = CTOD(lcValue) ENDIF CASE lcFieldType == "T" && Datum/Zeit lcConvertedValue = TTOC(CTOT(lcValue)) CASE lcFieldType == "L" && Logisch IF EMPTY(lcValue) lcConvertedValue = .F. && Leere Werte als .F. behandeln ELSE lcConvertedValue = IIF(UPPER(ALLTRIM(lcValue)) == ".T." OR lcValue == "T", .T., .F.) ENDIF OTHERWISE lcConvertedValue = TRIM(NVL(lcValue,"")) && Unverändert lassen, wenn unbekannter Typ ENDCASE * Feld in der Zieltabelle füllen REPLACE (lcFieldName) WITH lcConvertedValue IN caaw_import ENDSCAN Fertig. Die Folge, womit ich nicht gerechnet habe, totales Chaos Was meinst Du dazu Viele Grüße Cyprian
|
|
|
|