Best Practices > Diskussionen zu Best Practices

COM-Schnittstelle MS Excel

<< < (2/8) > >>

ata:
... dynamische Funktion zum zeilenorientierten Auslesen von Excel-Zell-Werten

Es ist zu beachten, daß die Rückgabe "vRes" immer ein String-Array ist und als Variant deklariert werden muß

...
Dim vRes As Variant

vRes = xlGetCellValues( xlSheet,  1 , 10 ) ' # liest die 10. Spalte der 1. Reihe des Tabellenblattes ein
vRes = xlGetCellValues( xlSheet , 1 , 0 ) ' # liest alle 255 Spalten der 1. Reihe des Tabellenblattes  ein
vRes = xlGetCellValues( xlSheet , 1 , -10 ) ' # liest die ersten 10 Spalten der 1. Reihe des Tabellenblattes ein
vRes = xlGetCellValues( xlSheet , 1 , 99999 ) ' # liest bis zur ersten leeren Spalte der 1. Reihe des Tabellenblattes ein


--- Code: ---Function xlGetCellValues( xlSheet As Variant , row As Variant , column As Variant ) As Variant
   ' # Einlesen von Excel-Werten
   Dim sDummy( 0 to 0 ) As String
   Dim vValue As Variant
   Dim i As Integer
   '
   On Error Goto GeneralError
   '
   If column > 0 And column <= 255 Then
      sDummy( 0 ) = xlSheet.Cells( row , column ).Value
      xlGetCellValues =  sDummy
   Else
      vValue = sDummy
      If column = 0 Then
         column = 254
      Elseif column = 99999 Then
          i = 1
          While Trim( xlSheet.Cells( row , i ).Value ) <> ""
             i = i + 1
          Wend
          column = i
      Else
         column = ( column * ( -1 ) ) - 1
      End If
      Redim vValue( 0 to column )
      For i = 0 to column
         vValue( i ) = Trim( Cstr( xlSheet.Cells( row , i + 1 ).Value ) )
      Next
      xlGetCellValues =  vValue
   End If
WayOut:
   Exit Function
GeneralError:
   xlGetCellValues = sDummy
   Resume WayOut
End Function

--- Ende Code ---

ata:
... kann man beim Export gut verwenden, um ein Arbeitsblatt an einer bestimmten Stelle zu fixieren...


--- Code: ---Function xlFreeze( xl As Variant , xlSheet As Variant , row As Long , column As Integer ) As Variant
   ' # Einfrieren eines Arbeitsblattes für besseres Scrollen.
   Call xlSheet.Select
   Call xlSheet.Cells( row , column ).Select
   xl.ActiveWindow.FreezePanes = True
End Function

--- Ende Code ---

ata:
... sortieren eines Bereiches eines Arbeitsblattes anhand eines Spaltenbereiches...

Ein Aufruf kann wie folgt aussehen:
' # Sortieren der Spalten 1 - 6 von Zeile 2 bis 21 anhand der ersten Spalte "A"
Call xlSort( xlSheet , "A2:F21" , "A2:A21" )



--- Code: ---Function xlSort( xlSheet As Variant , sDataRange As String , sColumnRange As String ) As Variant
   ' # sDataRange => der gesamte Bereich mit Daten => "A2:F20" bei Kopfzeile, 5 Spalten und 19 Daten-Zeilen
   ' # sColumnRange => Die Spalte, nach der sortiert werden soll => "A2:A20" bei Kopfzeile und 19 Daten-Zeilen
   Call xlSheet.Range( sRange ).Sort( xlSheet.Range( sColumnRange ) , 1 )
End Function

--- Ende Code ---

Axel:
Formatieren von Zellen


--- Code: ---'Konstanten für die vertikale Ausrichtung innerhalb der Zellen
Const xlVAlignTop = -4160
Const xlVAlignBottom = -4107
Const xlVAlignCenter = -4108

'Formatiert ein Arbeitsblatt mit den Attributen vertikale Textausrichtung oben und
'optimale Spaltenbreite
  Sub FormatRangeAlignment
    objSheet.Cells.Select  'Gesamtes Arbeitsblatt markieren
    objExcel.Selection.VerticalAlignment = xlVAlignTop  'Vertikale Ausrichtung nach oben
    objExcel.Selection.Columns.AutoFit  'Optimale Spaltenbreite
    objExcel.Selection.Rows.AutoFit  'Optimale Zeilenhöhe
    objSheet.Range("A1").Select           
End Sub


'Formatiert ein Arbeitsblatt mit der entsprechenden Schriftart und -grösse
'Aufruf ...FormatRangeFont("Arial", 10)

Sub FormatRangeFont(strFontName As String, iFontSize As Integer)
  objSheet.Cells.Select  'Gesamtes Arbeitsblatt markieren
  objExcel.Selection.Font.Name = strFontName  'Schriftart
  objExcel.Selection.Font.Size  = iFontSize  'Zeichengrösse setzen
  objSheet.Range("A1").Select           
End Sub


' Formatiert einen Bereich mit entsprechender Breite und Zeilenumbruch
'Aufruf ...FormatRangeWidth("A:A") für Spalte A

Sub FormatRangeWidth(sZiel As Variant)         
  objSheet.Columns(sZiel).Select
  objSheet.Columns(sZiel).ColumnWidth = 28
  objExcel.Selection.WrapText = True  'Zeilenumbruch zulassen
  objSheet.Range("A1").Select
End Sub

--- Ende Code ---

Axel

ata:
... Es kann manchmal performanter sein, eine Text-Datei nach Excel zu importieren, als mühsam alle Zeilen und Spalten "zu Fuß mit der Hand am Arm" zu befüllen...


' # als Beispiel eine Textdatei mit 6 Spalten
Dim vDataTypes( 0 to 5 ) As Integer
vDataTypes( 0 ) = 1    ' # 1. Spalte automatisch - implizit
vDataTypes( 1 ) = 2    ' # 2. Spalte als Text
vDataTYpes( 2 ) = 4    ' # 3. Spalte als Datum-Zeit-Wert => t.m.j
vDataTypes( 3 ) = 2    ' # 4. Spalte als Text
vDataTypes( 4 ) = 9    ' # 5. Spalte nicht importieren
vDataTypes( 5 ) = 1    ' # 6. Spalte automatisch

Call xlDataImport( xlSheet , "C:\Temp\Test.csv" , ";" , vDataTypes , "A1" )



--- Code: ---Function xlDataImport( xlSheet As Variant , sFilePath As String , sSep As String , vDataTypes As Variant , sStartPos As String) As Variant
   ' # importieren einer ASCII-Datei nach Excel
   ' # xlSheet => Variant => Arbeitsblatt als Excel-Objekt
   ' # sFilePath => String => vollständiger Pfad der zu importierenden Text-Datei
   ' # sSep => String => Separator, mit dem die Daten voneinander getrennt sind
   ' # vDataTypes => String-Array => Alias der Datentypen für die importierten Spalten - erster Wert = erste Spalte
   ' # sStartPos => String => z.B. "A1" für die erste Zelle in der ersten Spalte
   '
    With xlSheet.QueryTables.Add( "TEXT;" & sFilePath, xlSheet.Range( sStartPos ))
        .Name = "Adressen"
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .RefreshStyle = 1 ' xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .TextFilePromptOnRefresh = False
        .TextFilePlatform = 1252 ' # Windows Ansi
        .TextFileStartRow = 1
        .TextFileParseType = 1 ' xlDelimited
        .TextFileTextQualifier = -4142 ' xlTextQualifierNone
        .TextFileConsecutiveDelimiter = False
        .TextFileTabDelimiter = False
        .TextFileSemicolonDelimiter = False
        .TextFileCommaDelimiter = False
        .TextFileSpaceDelimiter = False
        .TextFileOtherDelimiter = sSep
        .TextFileColumnDataTypes = vDataTypes
        .TextFileTrailingMinusNumbers = True
        .Refresh False
    End With
   '
End Function

--- Ende Code ---

Navigation

[0] Themen-Index

[#] Nächste Seite

[*] Vorherige Sete

Zur normalen Ansicht wechseln