none
Export Access -> Excel Zellenformatierung wird nicht übernommen

    Frage

  • Hallo,

    ich habe ein großes Problem.

    Ich importiere mit Access Daten aus einer Textdatei in eine Tabelle. Die Daten sind in der Textdatei in einer festgelegten Struktur und werden mittels einer Importspezifikation importiert.

    Die Datenfelder in der Tabelle sind auch dementsprechend definiert.

    Diese Tabelle wird dann nach Excel exportiert, dort optisch etwas verschönert und weiterverarbeitet.

    Dies funktioniert auch fast alles wunderbar, allerdings ist nun ein Problem aufgetreten.

    In der Tabelle sind Zahlenfelder enthalten. Manche mit, manche ohne Nachkommastellen. Beim Export der Tabelle nach Excel wird in Excel zwar mittels Rechtsklick/Felder formatieren die richtige Formatierung angezeigt, allerdings scheint diese nicht aktiv zu sein. Ich kann mit den Feldern nicht weiterrechnen. Dies ist erst möglich, wenn ich einmal ein Doppelklick in die betroffene Zelle gemacht habe. Dann ist die Zelle richtig formatiert.

    Mit den Funktionen =ISTZAHL und =ISTTEXT lässt sich dieses ja auch prüfen.

    Wie ist es nun möglich die Tabelle direkt so zu exportieren, dass die Zellen auch wirklich richtig formatiert sind ?

    Es handelt sich teilweise um große Dateien mit mehreren tausend Datensätze. Damit fällt eine händische Anpassung weg.

    [CODE]

           DoCmd.RunSavedImportExport "77sovstor"


            Set Db = Nothing

            Dim rs As DAO.Recordset, fld As DAO.Field
            Dim strSQL As String
            Set rs = CurrentDb.OpenRecordset("Select * From sovency77 Where False")
            For Each fld In rs.Fields
                If fld.Type = dbText Then
                    strSQL = strSQL & ", Trim(sovency77." & fld.Name & ") As " & fld.Name
                Else
                    strSQL = strSQL & ", " & fld.Name
                End If
            Next
            rs.Close
            strSQL = "Select " & Mid(strSQL, 3) & " From sovency77"
            CurrentDb.CreateQueryDef "77soven", strSQL
            DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, "77soven", "E:\77\77sovstor.xls"
            DoCmd.DeleteObject acQuery, "77soven"
            Set xlAnw = CreateObject("excel.application")
            xlAnw.Visible = True
            xlAnw.Workbooks.Open FileName:="E:\77\77sovstor.XLS"
            xlAnw.Cells.Select
            xlAnw.Range("F:H;P:X;AG:AN;BE:BG;BP:BW;CN:CP;CY:DF;DW:DY;EH:EO;FF:FH;FQ:FX;GO:GQ").Select
            xlAnw.Selection.NumberFormat = "0"
            xlAnw.Cells.Select
            xlAnw.Range("Y:AF;AO:BC;BH:BO;BX:CL;CQ:CX;DG:DU;DZ:EG;EP:FD;FI:FP;FY:GM").Select
            xlAnw.Selection.NumberFormat = "0.00"
            xlAnw.Range("A:C;E:HZ").Select
                With Selection
                    .HorizontalAlignment = xlRight
                End With
            xlAnw.Cells.Select
            xlAnw.Selection.Columns.AutoFit
            xlAnw.Rows("1:1").Select
            xlAnw.Selection.Interior.ColorIndex = xlNone
            xlAnw.Selection.Borders(xlDiagonalDown).LineStyle = xlNone
            xlAnw.Selection.Borders(xlDiagonalUp).LineStyle = xlNone
            xlAnw.Selection.Borders(xlEdgeLeft).LineStyle = xlNone
            xlAnw.Selection.Borders(xlEdgeTop).LineStyle = xlNone
            xlAnw.Selection.Borders(xlEdgeBottom).LineStyle = xlNone
            xlAnw.Selection.Borders(xlEdgeRight).LineStyle = xlNone
            xlAnw.Selection.Borders(xlInsideVertical).LineStyle = xlNone
            xlAnw.Selection.Borders(xlInsideHorizontal).LineStyle = xlNone

    [/CODE]

    Ich hoffe hier kann mir jemand weiterhelfen, da die 299 Euro für eine direkte Anfrage bei Microsoft leider nicht in Frage kommen.

    gruß

    Patrick

    Freitag, 23. Mai 2014 07:11

Alle Antworten

  • Am 23.05.2014 schrieb PatrickHingst:

    In der Tabelle sind Zahlenfelder enthalten. Manche mit, manche ohne Nachkommastellen. Beim Export der Tabelle nach Excel wird in Excel zwar mittels Rechtsklick/Felder formatieren die richtige Formatierung angezeigt, allerdings scheint diese nicht aktiv zu sein. Ich kann mit den Feldern nicht weiterrechnen. Dies ist erst möglich, wenn ich einmal ein Doppelklick in die betroffene Zelle gemacht habe. Dann ist die Zelle richtig formatiert.

    Du könntest das Excel File unsichtbar öffnen, alle Formatierungen
    vornehmen, speichern, schließen und erneut öffnen. Geht es dann?
    Alternativ vor dem schließen und speichern die betreffenden Zellen
    markieren und eine ENTER (Sendkeys) absetzen.

    oder Du verwendest eine Excel Vorlage, die bereits passend formatiert
    ist.


    Servus
    Winfried

    Gruppenrichtlinien
    WSUS Package Publisher
    HowTos zum WSUS Package Publisher
    NNTP-Bridge für MS-Foren

    Freitag, 23. Mai 2014 13:31
  • Hallo Patrick

    Statt ein SELECT * von Deiner Tabelle zu machen und zu exportieren, solltest Du eine Query benutzen, welche jedes Feld in den passenden Datentypen explizit umwandelt (ausser Textfelder).

    z.B. "SELECT CLng(ID), CDbl(DeinBetrag), CDate(DeinDatum) FROM Sovency77"

    Dies hilft Excel den korrekten Datentypen zu ermitteln. Das Problem könnte davon herrühren, dass Deutschland (gegenüber dem grössten Teil der Welt) bei den Dezimalzahlen , und . vertauscht.

    Alternativ kannst Du auch ein Recordset per VBA von der Tabelle öffnen, Excel im OLE Automatisierungsmodus öffnen und dann dort die CopyFromRecordset Methode benutzen, um das Recodset einzufügen. Du hast dann allerdings keine Spaltenüberschriften, die Du dann selber einfügen musst.

    Die letzte Möglichkeit (meine bevorzugte) ist die, Dich nicht auf Access/Excel/VBA und Transfer Spreadsheet zu verlassen sondern die Daten selber in das Excel Sheet abzufüllen:

    • Öffne das Recordset in VBA
    • Öffne Excel im OLE Automatisierungsmodus und lege dort ein Worksheet an
    • Loope durch die Field Collection des Recodtsets und schreibe die Feldnamen in die erste Zeile des Excel Sheets
    • Loope nun durch das Recodset und schreibe die Werte der einzelnen Felder in die folgenden Zeilen des Excel Sheets
    • Formattiere das gefüllte Excelsheet per OLE Automatisierung (automatische Spaltenbreite und fette Kopfzeile reichen in der Regel aus.

    Die Zahlen sollten auf diese Weise automatisch in Excel auch als Zahlen ankommen.

    Gruss

    Henry

    Dienstag, 1. Juli 2014 05:55