Hallo,
ich würde gerne in die nächst freie Zelle in Spalte B schreiben.
Also wenn z.b: in B1 und B2 schon was steht, dann schreibe in B4 usw.
In diesen Beispiel wird nur in eine bestimmte Zelle geschrieben.
Hallo,
ich würde gerne in die nächst freie Zelle in Spalte B schreiben.
Also wenn z.b: in B1 und B2 schon was steht, dann schreibe in B4 usw.
In diesen Beispiel wird nur in eine bestimmte Zelle geschrieben.
#include <Excel.au3>
$pfad = @scriptdir&"\test.xlsx"
$tabelle = "Tabelle1"
$i = 1
$Ziel = "B" & $i
$wert = "12345"
$oExcel=_Excel_Open(true)
$oWorkbook=_Excel_BookOpen($oExcel,$pfad)
While _Excel_RangeRead($oWorkbook,$tabelle, $ziel) <> ""
$Ziel = "B" & $i
$i += 1
WEnd
_Excel_RangeWrite($oWorkbook,$tabelle, $wert,$Ziel)
;_Excel_BookClose($oWorkbook)
;_Excel_Close($oExcel)
Alles anzeigen
Einfach prüfen was in der Zelle ist. Ist sie leer, dann reinschreiben, ansonsten nächstes Feld
Vielleicht so:
#include <Excel.au3>
$pfad = @scriptdir&"\test.xlsx"
$tabelle = "Tabelle1"
$Spalte="B"
$Zeile=3
$wert = "12345"
$oExcel=_Excel_Open(true)
$oWorkbook=_Excel_BookOpen($oExcel,$pfad)
_ExcelWriteIfEmpty($oWorkbook,$tabelle,$wert,$Spalte,$Zeile)
_Excel_BookClose($oWorkbook)
_Excel_Close($oExcel)
Func _ExcelWriteIfEmpty($oWorkbook,$sTable,$sValue,$sCol,$sRow)
Local $sTmp, $sCell
Do
$sCell=$sCol&$sRow
$sTmp=StringStripWS(_Excel_RangeRead($oWorkbook,$tabelle,$sCell),7)
$sRow+=1
Until $sTmp = ''
_Excel_RangeWrite($oWorkbook,$sTable, $sValue,$sCell)
EndFunc
Alles anzeigen
ungetestet sollte aber funktionieren
Perfekt, beide Beispiele führen zum Erfolg.
Danke für die schnelle Hilfe
Schmerz! Excel bietet mit dem UsedRange Objekt die Info über die bereits belegten Zellen.
Siehe Wiki: https://www.autoitscript.com/wiki/Excel_Range
@water,Kannst du mir bitte sagen wie ich das für mein Vorhaben umsetzen kann?
Suche in Spalte "B" die nächste freie Zelle und schreibe den Wert dort rein.
Habe mal etwas probiert, jedoch mache ich wohl was falsch.
#include <Excel.au3>
$pfad = @scriptdir&"\test.xlsx"
$tabelle = "Tabelle1"
$Spalte = "B"
$wert = "Wert"
$oExcel=_Excel_Open(true)
$oWorkbook=_Excel_BookOpen($oExcel,$pfad)
$oRange = $oWorkbook.ActiveSheet.UsedRange.SpecialCells($xlCellTypeLastCell)
_Excel_RangeWrite($oWorkbook,$tabelle, $wert,$oRange)
_Excel_BookSave($oWorkbook)
Alles anzeigen
Bin derzeit im Urlaub. Dauert also noch bis Ende nächster Woche.
Folgendes Beispiel gibt Dir die letzte benutze Zeile des aktiven Sheets aus. Um 1 erhöhen und dann mit reinpinseln:
Hallo water,
vielen Dank für dein Tip.
Habe das jetzt mal so "reingepinselt"
#include <Excel.au3>
$pfad = @scriptdir&"\test.xlsx"
$tabelle = "Tabelle1"
$Spalte = "B"
$wert = "Wert"
$oExcel=_Excel_Open(true)
$oWorkbook=_Excel_BookOpen($oExcel,$pfad)
Local $iLastUsedRow =$oWorkbook.ActiveSheet.UsedRange.Rows.Count
_Excel_RangeWrite($oWorkbook,$tabelle,$wert,$Spalte&$iLastUsedRow+1)
Alles anzeigen
jetzt schreibt er mir bei einer leeren Tabelle immer den Wert in die nächste freie Zelle in Spalte B, eigentlich gut so, jedoch wenn irgendwo z.b in Spalte A oder in sonst einer anderen, ein Wert weiter "unten in der Reihe" steht, nimmt er diesen als letzte Zeile und schreibt mir natürlich nicht mehr in die nächste freie Zelle in Spalte B. Ich brauchte also eine Funktion die genau in Spalte B die letzte Zeile findet.
Dann so:
#include<Excel.au3>
Local $oAppl = _Excel_Open()
Local $oWorkbook = _Excel_BookOpen($oAppl, "C:\temp\test.xlsx")
Local Const $xlUp = -4162
With $oWorkbook.ActiveSheet
$oRangeLast = .UsedRange.SpecialCells($xlCellTypeLastCell)
$iRowCount = .Range(.Cells(1, 1), .Cells($oRangeLast.Row, $oRangeLast.Column)).Rows.Count
$iLastCell = .Cells($iRowCount + 1, "B").End($xlUp).Row
ConsoleWrite("B: " & $iLastCell & @CRLF)
EndWith
Danke water, jetzt funktioniert es und ist auch noch schnell.