Ich habe das Problem, dass meine Excel-Datei kaputt geht, wenn ich mehr als 200 Bildern einspeichern möchte.
Folgende Ausgangssituation:
Xojo 2016.4
Excel 2016
MBS Xojo Complete [in den Plugin Ordner nur Barcode, XL, Main kopiert.]
macOS Sierra 10.12.1
Im Open-Event der App habe ich den Code vom MBS Plugin korrekt eingebaut.
Auch das SetKey der XLLib ist sauber eingebaut [merke ich daran, dass oben die 1-Zeile nicht mehr mit der Demo-Meldung überschrieben wird.]
Ich habe eine Excelliste “PD Kopie.xls” in der in Spalte 1 die Artikelnummer ist und in Spalte 3 die Farbnummer hinterlegt ist.
Diese baue ich mir zusammen, und hole mir dann aus einem Ordner meine dazugehörigen Bilder - und baue es entsprechend links neben die Artikelnummer in Spalte 0. Die Bilder sind 4 KB gross und als .png gespeichert. Also sehr klein, so dass Excel keine Probleme haben dürfte.
Mit folgendem Code, klappt dies, wenn ich es auf 50 Artikel begrenze. Gehe ich langsam hoch auf 150 fangen Probleme an, ab 200 geht es nicht mehr.
Probleme heisst: Wenn mein Code fertig ist, geht die Excel-Datei kaputt.
Meldung: “Dateifehler: Daten sind möglicherweise verloren gegangen.”
Verschiebe ich den Start z.B. auf Zeile 150 bis 200, oder 200 bis 250 geht das auch problemlos.
Gibt es hier evtl. ein Problem mit Xojo 2016.4? Tappe da jetzt etwas im Dunkeln, wo ich ansetzen könnte.
Habe testweise auch ein App.SleepCurrentThread(100) eingebaut, falls der Rechner zu schnell ist, um ihn auszubremsen, das löste es aber auch nicht.
Oder habe ich einen Flüchtigkeitsfehler gebaut, z.B. weil ich mein MZInt mehrfach verwende?
// create new xls file
dim book as new XLBookMBS(false)
book.SetKey("hier steht mein name", "hier meine seriennummer")
// load existing
dim file as FolderItem = SpecialFolder.Desktop.Child("PD Kopie.xls")
if file.Exists = false then
MsgBox "Die Datei PD Kopie.xls ist nicht vorhanden!"
quit
end if
if not book.Load(file) then
MsgBox "Fehler beim Lesen der Excel-Datei: "+book.ErrorMessage
quit
end if
// do some changes
dim sheet as XLSheetMBS = book.Sheet(0)
if sheet<>Nil then
// Spalte 1 korrekte Grösse verpassen
call sheet.SetCol(0,0,25)
// Den ersten 250 Zeilen die perfekte Grösse verpassen und das Bild einbauen
dim zeile As integer
dim MZString_Artikelnummer as String
Dim f as FolderItem
dim MZInt as Integer
for zeile = 1 to 250
call sheet.SetRow(zeile,131.25)
MZString_Artikelnummer = "Artikel_" + sheet.ReadString(zeile,1) + "_" + sheet.ReadString(zeile,3).left(3) + "_1_mittel.png"
// System.debuglog (MZString_Artikelnummer)
f = Volume(0).Child("Users").Child("marcelzimmer").Child("Desktop").Child("bilder").Child(MZString_Artikelnummer)
MZInt = book.addPicture(f)
call sheet.SetPicture(zeile,0,MZInt,1.0)
System.debuglog ("Zeile: " + str(zeile) + " - " + MZString_Artikelnummer)
// App.SleepCurrentThread(100)
next
end if
// write file
if book.Save(file) then
// file.Launch
MsgBox ("Fertig!")
else
MsgBox "Fehler beim Erstellen der Excel-Datei."+EndOfLine+EndOfLine+book.ErrorMessage
end if
// quit