Textteile in einer Zelle unterschiedlich formatieren

  • Hallo,
    ich habe ein Problem mit dem Zusammenführen von Zellen und möchte wissen ob (und wie) das in Autoit möglich ist.
    zum Problem:
    Ich habe ein Tabellenblatt mit zwei Spalten A,B
    in Spalte A (Zeile 1) steht: XX
    in Spalte B (Zeile 1) steht: 1


    das soll jetzt in eine Zelle in ein anderes Blatt, IN EINE ZELLE gepackt werden. Aber:
    "XX" (fett, Arial, schwarz, Größe 12); Leerzeichen;"1" (TimesNew, rot, Größe 10)
    so in etwa:
    XX 1

    geht das oder muss ich VBA bemühen?

    schon mal Danke!
    autoit_dau

  • also was ich so festgestellt habe ist, dass du mit AutoIt wie mit VBA artbeitest.
    Alles was du mit VBA kannst kannst auch mit AutoIt machen.
    Ich hab das immer so gemacht, dass ich mit VBA mir was zusammengebastelt habe und dass dann in AutoIt übersetzt habe.

  • So schau mal, das müsste es machen, was du willst.

    Spoiler anzeigen
    [autoit]

    Global $sFilePath = @ScriptDir & "\Test.xls"
    Global $oExcel = ObjCreate("Excel.Application")
    $oExcel.Visible = 0
    Global $oBook = $oExcel.Workbooks.Open($sFilePath)
    Global $oSheet_1 = $oBook.Sheets(1)
    Global $oSheet_2 = $oBook.Sheets(2)
    Global $iValue_A1 = $oSheet_1.Range("A1").Value
    Global $iValue_B1 = $oSheet_1.Range("B1").Value

    [/autoit] [autoit][/autoit] [autoit]

    $oSheet_2.Range("A1").Value = $iValue_A1 & " " & $iValue_B1
    With $oSheet_2.Range("A1").Characters(1, 2).Font
    .Name = "Arial"
    .FontStyle = "Fett"
    .Size = 12
    .ColorIndex = 1
    EndWith
    With $oSheet_2.Range("A1").Characters(4, 1).Font
    .Name = "Times New Roman"
    .FontStyle = "Standard"
    .Size = 10
    .ColorIndex = 3
    EndWith

    [/autoit] [autoit][/autoit] [autoit]

    $oExcel.DisplayAlerts = False
    $oExcel.Save
    $oExcel.Application.Quit

    [/autoit] [autoit][/autoit] [autoit]

    MsgBox(0, "Info", "Fertig!")

    [/autoit]
    • Offizieller Beitrag

    Hier mal noch eine Version, die flexibel ist (von-bis).

    Spoiler anzeigen
    [autoit]

    Local $Path = "C:\test\test.xls" ; 'Deine_Excel_Datei'
    Local $sheetRead = "Tabelle1" ; "Name_Tabellenblatt_zum_Auslesen"
    Local $sheetWrite = "Tabelle2" ; "Name_Tabellenblatt_zum_Schreiben"
    Local $ReadRange = "A2:B14" ; der zu lesende Bereich (2 benachbarte Spalten)
    Local $aRead = StringSplit($ReadRange, ':', 2)
    Local $Col_start = StringRegExp($aRead[0], '\D+', 1)
    Local $Row_start = StringRegExp($aRead[0], '\d+', 1)
    Local $Row_ende = StringRegExp($aRead[1], '\d+', 1)
    Local $Row_count = $Row_ende[0] - $Row_start[0]

    [/autoit] [autoit][/autoit] [autoit]

    Local $sRead, $tmp, $iStart, $iLen
    Local $oExcel = ObjCreate('Excel.Application')
    $oExcel.Visible = 1
    Local $oBook = $oExcel.Workbooks.Open($Path)

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 0 To $Row_count
    ; === erstes Tabellenblatt auswählen, Werte auslesen
    $sRead = $oBook.Sheets($sheetRead).Range($aRead[0]).Offset($i, 0).Value
    $tmp = $oBook.Sheets($sheetRead).Range($aRead[0]).Offset($i, 1).Value
    $iStart = StringLen($sRead)+2
    $iLen = StringLen($tmp)
    $sRead &= ' ' & $tmp
    ; === zweites Tabellenblatt zum Schreiben auswählen und Wert eintragen
    $oBook.Sheets($sheetWrite).Range($aRead[0]).Offset($i, 0).Value = $sRead
    ; === Formatieren
    With $oBook.Sheets($sheetWrite).Range($aRead[0]).Offset($i, 0).Characters(1, $iStart-2).Font
    .Name = "Arial"
    .FontStyle = "Fett"
    .Size = 12
    EndWith
    With $oBook.Sheets($sheetWrite).Range($aRead[0]).Offset($i, 0).Characters($iStart, $iLen).Font
    .Name = "Times New Roman"
    .Size = 10
    .ColorIndex = 3
    EndWith
    Next

    [/autoit]


    Der einfachste Weg ist immer:
    - was du tun willst in einem Makro aufzeichnen
    - das Makro in VBA öffnen
    Dort siehst du dann die verwendeten Methoden etc.
    Wie du siehst, ist die Umsetzung in AutoIt problemlos.

  • Danke auch!

    schwerer Stoff - werd mich bemühen.

    Ich habe das so verstanden, dass ich immer nur nach dem Schreiben formatieren kann. Das ist schwierig, da ja auch mal ein "X" oder "POQ" stehen kann und ich die Zeichanzahl nicht weiß.
    Kann ich die Attribute beim schreiben auch gleich mitgeben?

    ..cells($i,$y).Value= "XX" (fett, Arial, schwarz, Größe 12); & " "& "1" (TimesNew, rot, Größe 10)

    schönes WE

    • Offizieller Beitrag

    mal ein "X" oder "POQ" stehen kann und ich die Zeichanzahl nicht weiß.


    In meinem Beispiel ist es völlig egal, wie lang die Inhalte der beiden Zellen sind. Ich speichere die Länge und formatiere danach die entsprechende Anzahl an Zeichen.
    Und für die Farbe,Schriftart etc. kannst du natürlich auch Variablen verwenden, denen du einen entsprechenden Wert zuweist.

  • Danke,

    wenn mans richtig versteht - wirklich gut!

    Aber ich habe noch ein kleines Problem mit dem erstellen einse Textfeldes in Excel.
    Ich habe (Danke für den Tip) ein Makro aufgezeichnet und es versucht für autoit aufzubereiten. Irgend etwas stimmt aber noch nicht:


    Gehört nicht agnz hier rein - Text soll aber auch formatiert werden.


    Danke !

    • Offizieller Beitrag

    So, hab nochmal nachgelesen. Es geht doch.
    Hier ein Bsp.:

    Spoiler anzeigen
    [autoit]

    Local $xlsPath = 'C:\test\test.xls'
    Local $oExcel = ObjCreate('Excel.Application')
    $oExcel.Visible = 1
    Local $oBook = $oExcel.Workbooks.Open($xlsPath)

    [/autoit] [autoit][/autoit] [autoit]

    $oTextBox = $oBook.Worksheets("Tabelle1").Shapes.AddTextBox(1, 20, 20, 150, 100).OLEFormat.Object
    $oTextBox.Name = "TextBox_1"
    $oTextBox.Text = "Der Font ist Comic Sans MS"

    [/autoit] [autoit][/autoit] [autoit]

    With $oTextBox.Characters(14, 13).Font
    .Name = "Comic Sans MS"
    .FontStyle = "Fett"
    .Size = 12
    .ColorIndex = 3
    EndWith

    [/autoit]