Zeilen in Exceltabelle löschen

  • Hi!

    Ich versuche, ein Script umzustellen auf die neuen Excel-Funktionen; komme aber nicht mit der Range-Syntax klar. Genauer: wie gibt man Zeilenadressen in :Excel_RangeRead und _Excel_RangeDelete an?

    Kann mir jemand helfen.


    MfG

    Friedhelm39

  • Danke, Alpines, für Deine schnelle Antwort.


    Natürlich habe ich versucht, mit den Hilfe-Beispielen - und zahlreichen Beispielen aus dem Internet - das Problem zu lösen. Aber ich habe kein Beispiel für Zeilen zu löschen und für Range-Adressen mit Variablen gefunden.

    Beispiel 1: Ich möchte die zu lesenden Zellen über Variable ansprechen, also etwa so:

    _Excel_RangeRead ($oExcel, $c & ":" & $z, 1)

    Beispiel 2: Ich will die Zeile 1 löschen, etwa so:

    _Excel_RangeDelete ($oExcel, 1)


    Vielleicht nimmt mir jemand das Brett vom kopf.


    Abendliche Grüße

    Friedhelm39

  • Hast Du Dir das Beispiel 2 in der Hilfe von _Excel_RangeDelete angesehen? Da steht alles drin.
    Edit:
    Es steht sogar schon in der Beschreibung des Range-Parameters.


    Also: Lesen hilft :)

  • Hallo Friedhelm39  

    kein Beispiel für Zeilen zu löschen und für Range-Adressen mit Variablen gefunden.

    Beispiel 1: Ich möchte die zu lesenden Zellen über Variable ansprechen, also etwa so:

    _Excel_RangeRead ($oExcel, $c & ":" & $z, 1)

    Naja, du weißt ja schon, wie man Strings mit Variablen und Text erstellt. Wenn hier etwas nicht klappt, liegt es entweder an den Inhalten der Variablen, die du nicht zeigst, oder an dem Fehler, dass du hier einen Punkt, statt einem Doppelpunkt verwendest.

  • Hallo - und Danke für Eure Hinweise.


    Leider bringen sie mich noch nicht weiter. Ich habe das zitierte Beispiel 2 unverändert als "Test3.au3" kopiert, eine Kopie meiner zu verarbeitenden Datei nach ...\Extras kopiert und dann laufen gelassen. Es lieferte :

    The requested action with this object has failed.

    Bisher habe ich mich noch nicht mit Anweisungen wie z..B. "$oWorkbook.Worksheets(3).Activate" - ich weiß nicht, wie man diese Anweisungserweiterungen bezeichnet - beschäftigt. Wo kann man etwas darüber lesen?


    Ich habe den Verdacht, daß mein Problem ein Zugriffsproblem sein könnte. Wie unterscheidet Excel - und ggf. auch Autoit oder Windows - zwischen .csv-, .xls- und .xlsx-Dateien?. Meine zu verarbeitende Datei ist eine CSV-Datei, Sie wird aber beim manuellen Aufruf als Exceltabelle dargestellt.


    Zum ROW-Problem: Wenn ich den Zugriff gelöst habe, melde ich mich dazu wieder. Ich hoffe auf Infos zu den Punkt-Anweisungen. Da habe ich wohl eine wichtige Wissenslücke.


    Grüße

    Friedhelm39

  • Werden wir konkret. Poste bitte Deine CSV-Datei und Dein Skript oder ein reduziertes Skript damit wir das Problem nachstellen und lösen können.

  • Die Exceldateien haben alle vertrauliche Daten. Ich werde morgen Testdateien erstellen.

    Wie unterscheidet Autoit zwischen .xls,- .xlsx- und .csv-Exceldateien?

    Wo finde ich Beschreibungen von Autoit-Anweisungen der Form Workbook.Worksheet und ähnlichem?


    Grüße

    Friedhelm39

  • Kann mir jemand die Zeile 8 in dem Beispiel auflösen? Bei allen Versuchen bleibt das Script in der Zeile 8 mit unable to parse line hängen.

    Zeile 8:

    MsgBox($MB_SYSTEMMODAL, "Excel UDF: _Excel_RangeDelete Example", "Error opening workbook '" & @ScriptDir & "\Extras\_Excel1.xls'." & @CRLF & "@error = " & @error & ", @extended = " & @extended)


    Bitte habt Geduld mit mir.

    Friedhelm39

  • Halllo Friedhelm39

    Hast du das Beispiel von der Website kopiert? Wenn ja, passt der Pfad nicht. Normalerweise ist das so gedacht, dass du die lokale Hilfedatei öffnest und den Link "Open this Script" benutzt. Dann liegt das ausgeführte Skript in deinem AutoIt Installationsverzeichnis bei den Helpfiles.

    Du kannst den Pfad anpassen. Statt @ScriptDir & "\Extras\_Excel1.xls" verwende StringTrimRight(@AutoItExe, 11) & "\Examples\Helpfile\Extras\_Excel1.xls".


    Edit:

    Wie unterscheidet Autoit zwischen .xls,- .xlsx- und .csv-Exceldateien?

    Überhaupt nicht. Das macht Excel.

  • Die Zeilennummer in der Fehlermeldung ist eventuell irreführend, da ich in dieser Zeil keinen Fehler sehe.
    Meist liegt der Fehler in den Zeilen davor und weist meist auf einen falsch gesetzten Textbegrenzer (' oder ") hin.
    Poste mal die aktuellen Zeile 1 - 8.

  • Hi.

    Eure Vorschläge habe ich versucht umzusetzen - leider ohne Erfolg.

    Das Testscript ExcelDelete2.au3 habe ich derBeschreibung der Function _Excel_RangeDelete, -Beispie2- per cut and paste entnommen

    (https://www.autoitscript.com/a…ns/_Excel_RangeDelete.htm)

    und in I:\ABC\_0-b\AutoIt\Scripts\ExcelDelete gespeichert.

    Die Excel-Testdatei habe ich im Verzeichnnis

    I:\ABC\_0-b\AutoIt\Scripts\ExcelDelete\Extras gespeichert.

    Das Ausführen von ExcelDelete2.au3 bringt die Meldung für Zeile 8: unable to parse line ohne oder mit Änderung nach Vorschlag von autoiter.

    Hier die Zeile 8 vor und nach der Änderung:

    vorher:

    MsgBox($MB_SYSTEMMODAL, "Excel UDF: _Excel_RangeDelete Example", "Error opening workbook '" & @ScriptDir & "\Extras\_Excel1.xls'." & @CRLF & "@error = " & @error & ", @extended = " & @extended)

    nachher:

    MsgBox($MB_SYSTEMMODAL, "Excel UDF: _Excel_RangeDelete Example", "Error opening workbook '" & @ScriptDir & "\Extras\_Excel1.xls'." & @CRLF & "@error = " & @error & ", @extended = " & @extended)


    Als Test-Exceltabelle müßte man eine beliebige Exceldatei nehmen können.

    Hoffentlich habe ich keine Tippfehler einngebaut.


    Hoffnungsvolle Grüße

    Friedhelm39

  • Sorry Friedhelm39

    Ich kann das nicht nachvollziehen und kann dir ja auch nicht direkt über die Schulter schauen. Außerdem sehe ich deinen Code ja nicht, obwohl du der Meinung bist, nur kopiert zu haben.

    Die MsgBox Zeile, die du hier immer schreibst, ist nicht der Fehler, sondern wird im Fehlerfall angezeigt. Es bringt auch nichts @error oder @extended abzuschreiben, weil wir ja nicht sehen, welche Werte sie zur Laufzeit hatten...


    Nur mal so nebenbei. Warum startest du nicht ganz einfach und probierst es mal mit dem Ausführen des Beispiels direkt aus der Hilfe, bevor du daran herumspielst?

    Hast du AutoIt installiert, hast du SciTE4AutoIt3 installiert? Dann klick doch einfach mal das Wort _Excel_RangeDelete im Editor an und drücke F1. In der Hilfe klickst du dann auf "Open this Script" und dann führst du es aus dem Editor mit F5 direkt aus.

  • Friedhelm39

    Gerade habe ich mir das Beispiel 2 in der Hilfe noch einmal angesehen. Ist dir bewusst, dass da Inhalte aus dem dritten Arbeitsblatt gelöscht werden sollen und nicht aus dem ersten?

    1:1 kopiert wird dieses Beispiel nicht mit Exceldateien funktionieren, die nicht drei Arbeitsblätter enthalten...

  • Drum habe ich es auch in den Text reingeschrieben, was das Beispiel konkret tut: "Delete 2 rows (1 and 2) on worksheet 3" :)

  • Das Testscript ExcelDelete2.au3 habe ich derBeschreibung der Function _Excel_RangeDelete, -Beispie2- per cut and paste entnommen


    (https://www.autoitscript.com/a…ns/_Excel_RangeDelete.htm)

    und in I:\ABC\_0-b\AutoIt\Scripts\ExcelDelete gespeichert.

    Nicht per Cut & Paste, sondern per Copy & Paste!


    Das habe ich auch mal genau so gemacht... den Text aus der Zwischenablage in SciTE eingefügt und unter m:\Excel\_Excel_RangeDelete[2].au3 gespeichert. Die Excel-Testdatei habe ich hier m:\Excel\Extras\_Excel1.xls gespeichert. Wenn ich nun das Script in SciTE mit F5 ausführe, läuft alles wie es soll.


    In welches Programm/Editor hast du denn den Text mit Paste eingefügt, um ihn zu speichern?


    Hier die Zeile 8 vor und nach der Änderung:

    Die Zeilen unter vorher und nachher sind identisch!


    Als Test-Exceltabelle müßte man eine beliebige Exceldatei nehmen können.

    Das ist Quatsch... denn beliebig wäre demnach auch eine leere Exceldatei... und darin könntest du keine Zeilen löschen. Zudem wurde in diesem Beispiel eben genau diese Datei ausgewählt, um zu zeigen, wie man mehrere Zeilen in einem bestimmten Arbeitsblatt in einem Rutsch löscht.

  • Jetzt mal Butter bei die Fische - das Rumgesumse hält ja kein Mensch aus :)

    Die beiden Dateien in das selbe Verzeichnis kopieren und das AutoIt-Skript starten.

  • Danke für die Blumen. Leider geht inzwischen alles etwas mühsamer. Prima, daß es Euch gibt.


    Den Umgang mit der Autoit-Hilfe nehme ich mir später wieder vor. waters Lösungsansatz führt wieder zurück zu meinem eigentlichen Problem - nur leider noch nicht weiter.

    _Excel_RangeDelete($oWorkbook.ActiveSheet, "2:4")

    liefert zur Anweisung ".ActiveSheet" die Meldung "Variable must be of txpe Object". Aussserdem enthält der Lösungsansatz eine Text-Datei statt einer Exceltabelle.


    Weitere Fragen:

    Wo findet man Beschreibungen von Anweisungen mit Punkterweiterungen wie z.B. "$oWorkbook.ActiveSheet"


    Wie gebe ich Variable bei denExcel-Anweisungen an, vielleicht z.B. für eine zu löschende Zeile

    _Excel_RangeDelete($oWorkbook.ActiveSheet, $Zeile)


    Erwartungsvolle Grüße

    Friedhelm39

  • Ich habe gerade dein Profil betrachtet..

    Einfach klasse, dass du dich immer noch mit neuen Sachen beschäftigst :).

    Auch ich möchte an dieser Stelle eine Äußerung des Respektes abgeben !

    In dein Profil hatte ich, vor autoiter 's Beitrag, gar nicht 'reingeschaut. Dein Profilzähler dürfte nun aber mächtig ansteigen :P

    Leider geht inzwischen alles etwas mühsamer.

    Ich bin zwar gut 20 Jahre jünger, aber diesen Effekt stelle ich gelegentlich auch fest. Das liegt vermutlich aber auch daran, dass sich Prioritäten im Alter einfach verschieben. Was soll's, dann nimmt man sich halt etwas mehr Zeit. Falls Du Lust hast, dann werfe mal einen Blick auf : https://de.wikipedia.org/wiki/Freeman_Dyson

    Mit etwas Glück (vorrangig Gesundheit) geht da also noch so Einiges ;)


    Gruß Musashi

    "Die Definition von Wahnsinn ist, immer wieder das Gleiche zu tun und andere Ergebnisse zu erwarten." - Albert Einstein