INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

Excel Binary Writer



Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!

07.06.2010, 11:20
Beitrag #1

SeBa Offline
LVF-Guru
*****


Beiträge: 2.025
Registriert seit: Oct 2008

09SP1 & 10 FDS
2008
DE

65xxx
Deutschland
Excel Binary Writer
Moinmoin...

Vorweg (1):
Mich nervt es, dass hier immer wieder von Exceldateien erzählt wird, die beim Nachfragen zu ASCII/CSV Dateien mutieren oder im Zusammenhang mit dem "Write to Spreadsheet VI" von Exceldateien geredet wird.
Hier also der Rundumschlag um ein für alle Mal klarzustellen was eine Exceldatei ist. Box

Vorweg (2):
Ich will mich ja nicht mit fremden Lorbeeren schmücken, daher der Hinweis auf diesen CodeProject Artikel.
Serhiy Perevoznyk hats ausgefuchst, ich habs portiert Tippen

Also was ist das?
Direktes Erstellen einer nativen (binären) Exceldatei in BIFF5 (Binary Interchange File Format Version 5) ohne Excel Automation oder das Einbinden von 3rd-Party dll's.

Pro:
Ein installiertes Excel ist auf dem ausführenden Rechner nicht nötig.
Exportieren von Double-, Integer- und String-Werten.
Es ist schneller als Excel Automation.

Contra:
In dieser Version keine Formatierung der Zellen.
Wer kann und möchte, kann das ja nachrüsten.
Links zu den Spezifikationen: OpenOffice: Excel Spezification und Microsoft: Excel Spezification

Wofür braucht man das?
Ich benutze das schon länger in meinen VB.net Projekten, um schnell große Datenmengen zu exportieren. So in der Größenordnung mehrere 10000 Zeilen und 100+ Spalten. Auf eine Formatiertung kann ich dabei verzichten, da es um die Daten zu Weiterverarbeitung geht und nicht um Kundenreports.

Wie benutzt man das?
Für LV hab ich die Funktionen Start/Stop und ein polymorphes VI zum schreiben einer Zelle erstellt.
   

Beispiel:
snip09
   

Dateien:
Lv09_img2
Sonstige .llb  xlBinaryWriter_lv09.llb (Größe: 165,36 KB / Downloads: 513)

Lv80_img
Sonstige .llb  xlBinaryWriter_lv80.llb (Größe: 223,35 KB / Downloads: 447)

Lizenz:
Genauso wie der C#-Code stehen die LV-VI's unter der The Code Project Open License (CPOL) 1.02 zur Verfügung.

Letzte Worte:
Viel Spaß damit.
Wer was verbessert, darf es natürlich gerne hochladen... Wink


Gruß SeBa

Dieser Beitrag soll weder nützlich, informativ noch lesbar sein.

Er erhebt lediglich den Anspruch dort wo er ungenau ist, wenigstens eindeutig ungenau zu sein.
In Fällen größerer Abweichungen ist es immer der Leser, der sich geirrt hat.

Rette einen Baum!
Diesen Beitrag nur ausdrucken, wenn unbedingt nötig!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
07.06.2010, 13:42
Beitrag #2

Y-P Offline
☻ᴥᴥᴥ☻ᴥᴥᴥ☻
LVF-Team

Beiträge: 12.612
Registriert seit: Feb 2006

Developer Suite Core -> LabVIEW 2015 Prof.
2006
EN

71083
Deutschland
Excel Binary Writer
Danke. Wink

Gruß Markus

--------------------------------------------------------------------------
Bitte stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort !!
--------------------------------------------------------------------------
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
07.06.2010, 16:37
Beitrag #3

GerdW Offline
______________
LVF-Team

Beiträge: 17.425
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
Excel Binary Writer
Hallo SeBa,

nach erstem Rumprobieren: schöne und (Hauptvorteil) Excel-freie Lösung!

Werde, sobald Zeit ist, noch etwas Fehlerhandling implementieren und dann hier wieder hochladen...

Gruß

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
07.06.2010, 18:38
Beitrag #4

SeBa Offline
LVF-Guru
*****


Beiträge: 2.025
Registriert seit: Oct 2008

09SP1 & 10 FDS
2008
DE

65xxx
Deutschland
Excel Binary Writer
' schrieb:Werde, sobald Zeit ist, noch etwas Fehlerhandling implementieren und dann hier wieder hochladen...

Tob dich aus...

Gruß SeBa

Dieser Beitrag soll weder nützlich, informativ noch lesbar sein.

Er erhebt lediglich den Anspruch dort wo er ungenau ist, wenigstens eindeutig ungenau zu sein.
In Fällen größerer Abweichungen ist es immer der Leser, der sich geirrt hat.

Rette einen Baum!
Diesen Beitrag nur ausdrucken, wenn unbedingt nötig!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
10.06.2010, 21:41 (Dieser Beitrag wurde zuletzt bearbeitet: 10.06.2010 21:42 von GerdW.)
Beitrag #5

GerdW Offline
______________
LVF-Team

Beiträge: 17.425
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
Excel Binary Writer
Hallo zusammen,

ein erstes Update...

- einige Fehlerabfragen eingeführt
- Funktionen zum Schreiben von Booleans und Fehler-Anzeigen zugefügt
- Write_DBL erweitert, da Excel nicht alle IEEE-Codes kennt (NaN)
- Write_String auf 255 Zeichen begrenzt (bin mir bei der Doku aber noch nicht sicher, ob diese Grenze richtig ist...)
- Projekt und lvlib erstellt
- häufige Operationen als lvlib-interne Routine ausgeführt
- 4:2:2:4 connector pane, teilweise Eingänge als "required" markiert
- einige wenige Kommentare hinterlassen
- VIs teilweise umbenannt (Start, Close)
- deutsche Captions entfernt, englische Labels anzeigen lassen

Bin für Vorschläge und Kommentare offen.

Frage:
- Sollen Fehlerabfragen nur intern durchgeführt werden (z.B. der Test auf korrekte row/column-Angaben) oder auch per ErrorCluster gemeldet werden?
- Wie soll bei DBL mit ±Inf verfahren werden?

Lv09_img2(vorerst)


Angehängte Datei(en)
Sonstige .zip  xlBin_Writer.zip (Größe: 138,68 KB / Downloads: 339)

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
11.06.2010, 07:08
Beitrag #6

SeBa Offline
LVF-Guru
*****


Beiträge: 2.025
Registriert seit: Oct 2008

09SP1 & 10 FDS
2008
DE

65xxx
Deutschland
Excel Binary Writer
Oh je...

...jetzt wirds hart. Da kommt meine vollkommene Unwissenheit bezüglich Projekte zum tragen.

Du hast die Begin/EndWrite VIs und das Write_polymorph umbenannt und in die lvlib reingepackt... braucht man die originalen dann überhaupt noch?
Davon abgesehen, dass beim draufklicken gemeckert wird...
   


Was genau bringt lvlib jetzt (sorry, kein Plan... Kurze Erklärung reicht)?
Warum 4:2:2:4 con.pane?


So:
Alle Zellen sind 2080byte begrenzt, ist der Inhalt größer, muss ein CONTINUE Record geschreiben werden. ...ToDoSmile
Fehlerabfragen würde ich auch rausgeben, z.B. row/col OutOfRange -> Abbruch aller folgenden Schreiboperationen + ErrorOut
DBL±Inf. muss mal reinlesen, ob es dafür einen Record gibt, sonst würd ich vorschlagen Max/Min DBL einzuschreiben.


Gruß SeBa

Dieser Beitrag soll weder nützlich, informativ noch lesbar sein.

Er erhebt lediglich den Anspruch dort wo er ungenau ist, wenigstens eindeutig ungenau zu sein.
In Fällen größerer Abweichungen ist es immer der Leser, der sich geirrt hat.

Rette einen Baum!
Diesen Beitrag nur ausdrucken, wenn unbedingt nötig!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
11.06.2010, 07:24 (Dieser Beitrag wurde zuletzt bearbeitet: 11.06.2010 07:47 von GerdW.)
Beitrag #7

GerdW Offline
______________
LVF-Team

Beiträge: 17.425
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
Excel Binary Writer
Hallo SeBa,

"Davon abgesehen, dass beim draufklicken gemeckert wird..."
Muss ich mir heute abend (ehm, heute Anpfiff - dann später am Wochenende: ehm Sonntag spielt Deutschland - evtl. nächste Woche...) nochmal anschauen! Bei 30° dann doch lieber PublicViewing in der (irischen) Lieblingskneipe...
Edit: Nach einem Blick ins ZIP-File: Die VIs mit altem Namen sind Überbleibsel vom Umbenennen. Anscheinend hat LV nicht umbenannt, sondern kopiert... Umbenennen funktioniert sonst eigentlich sehr gut im Projekt. Muss mit der lvlib-Verknüpfung zusammenhängen. Umbenannt hatte ich, um konform mit sonstigen Funktionen (wie bei normalen Dateien) zu werden bzw. um den User nicht zu verwirren (der braucht nicht unbedingt ein VI mit Namen "*_polymorph").

"Was genau bringt lvlib jetzt (sorry, kein Plan... Kurze Erklärung reicht)?"
Zusammenfassen von zusammengehörigen Funktionen, mit der Möglichkeit, Funktionen als "Privat" zu deklarieren. Bin auch am Ausprobieren...
Edit: Guckst du hier, 2. Absatz.

"Warum 4:2:2:4 con.pane?"
StyleGuide-konform.
Edit: LabVIEW-Cleanup liebt gerade ErrorCluster-Drähte. Ich liebe gleichmäßig ausgerichtete Icons. Standardfunktionen bevorzugen den 4224-ConPane. Schmeiß alles zusammen, und du verstehst, warum alle (ok: 99%) meiner VIs den 4224-ConPane verwenden...

"Alle Zellen sind 2080byte begrenzt ...ToDo"
Ich hatte in der Beschreibung von MS noch eine andere Zahl gelesen. Kann aber sein, dass sich diese auf BIFF7/8 bezog. Außerdem hat mein Excel2000 von einem 1023 Zeichen langen String nur die ersten 255 Zeichen angezeigt (der Rest wurde als Leerfeld präsentiert) und beim Löschen des letzten (unsichtbaren) Zeichens automatisch auf 255 Zeichen verkürzt...

"Fehlerabfragen würde ich auch rausgeben"
Werde ich noch einbauen.

"DBL±Inf ... Max/Min DBL einzuschreiben"
Excel macht aus +Inf automatisch 1.xE+308 (=MaxDBL), -Inf hatte ich gestern abend nicht mehr ausprobiert. Aus NaN macht Excel2000 übrigens 2*+InfSmile

Ich werd' dran bleiben!

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
11.06.2010, 14:08
Beitrag #8

SeBa Offline
LVF-Guru
*****


Beiträge: 2.025
Registriert seit: Oct 2008

09SP1 & 10 FDS
2008
DE

65xxx
Deutschland
Excel Binary Writer
' schrieb:"DBL±Inf ... Max/Min DBL einzuschreiben"
Excel macht aus +Inf automatisch 1.xE+308 (=MaxDBL), -Inf hatte ich gestern abend nicht mehr ausprobiert. Aus NaN macht Excel2000 übrigens 2*+InfSmile

Hab mich heute in der Mittagspause mal damit beschäftigt und folgendes nachgerüstet:
   

Bringt mich dann zu der Frage:
So einen Enum dann lieber als .ctl und strict-type-def. oder doch so wie deinen Error-Enum direkt in das VI integrieren?

Andere Frage zum Dateimanagement wäre dann noch, ob man private Dateien in einen extra Ordner speichert... ggf. .ctl's auch?

Hab außerdem die row/col verbunden im NaN Case für Write_DBL.

Zum Thema +-Inf. hab ich mich auch mal schlau gemacht, aber da unterscheiden sich die Excelversionen teilweise ganzschön in Bezug auf die Zahl die dann geschrieben werden müsste.

-Inf. wird bei meinem Excel 2002 SP3 ignoriert und genauso ausgegeben wie +Inf.

-> Daher der Gedanke, bei DBL auf +-Inf. zu prüfen und entsprechend einen String in die Zelle zu schreiben, statt der Zahl.
Was meinst du dazu?


Lv09_img2
Sonstige .zip  xlBin_Writer_1.zip (Größe: 126,34 KB / Downloads: 398)



Gruß SeBa

Dieser Beitrag soll weder nützlich, informativ noch lesbar sein.

Er erhebt lediglich den Anspruch dort wo er ungenau ist, wenigstens eindeutig ungenau zu sein.
In Fällen größerer Abweichungen ist es immer der Leser, der sich geirrt hat.

Rette einen Baum!
Diesen Beitrag nur ausdrucken, wenn unbedingt nötig!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
11.06.2010, 17:32 (Dieser Beitrag wurde zuletzt bearbeitet: 11.06.2010 17:33 von GerdW.)
Beitrag #9

GerdW Offline
______________
LVF-Team

Beiträge: 17.425
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
Excel Binary Writer
Hallo,

noch ein Update vor'm Wochende:
- interne Änderungen (Fehlercode-Generierung und -Weitergabe)
- Errorcode-Generierung in (private) Subroutinen verlegt zur leichteren Erstellung weiterer Fehlermeldungen, ErrorCodes starten bei 9100
- Enum/Ring als public typedef
- DBL: ±Inf wird geprüft und als #VALUE weitergegeben
- I32: Test auf Excel-30bit-Beschränkung, ansonsten Verwendung von DBL
- readme.txt im Folder documentation angelegt

Gruß


Angehängte Datei(en)
Sonstige .zip  20100611_LV90_xlBin_Writer.zip (Größe: 150,8 KB / Downloads: 312)

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
14.06.2010, 15:24
Beitrag #10

SeBa Offline
LVF-Guru
*****


Beiträge: 2.025
Registriert seit: Oct 2008

09SP1 & 10 FDS
2008
DE

65xxx
Deutschland
Excel Binary Writer
Update

Lv09_img2
Sonstige .zip  20100614_LV90_xlBin_Writer.zip (Größe: 179,72 KB / Downloads: 397)


-xlBin_Write_Note.vi
Beliebig lange Kommentare in einer Zelle speichern.
   
Im xlBin_Write.vi hinter Write_String eingefügt, damit STR als Standardauswahl bleibt.

-xlBin_private_Error_Generator.vi
Array gegen Property ausgetauscht -> jetzt werden Änderungen am xlBin_private_Errorcode.ctl direkt übernommen.
   
Oder war das vorher auch schon so? Wenn ja, dann bitte erklärenWink

-xlBin_private_Check_RowColRange.vi
Eingang für FileRef, Ausgänge für FileRef, Row, Col hinzugefügt.
-> Weniger Knotenpunkte + gefällt mir besser
(StyleGuide konform?)
   


Folgendes zur Diskussion bitte:
Bei Strings >255 Zeichen im LABEL-Record ist die Datei nicht lesbar. Das BIFF-Record Limit von ?2080 Bytes greift hier nicht. CONTINUE-Records scheinen nicht zu funktionieren (wenn man einen String >255 Zeichen als Excel5 Datei speichert, ist der String nach dem Laden nur 255 Zeichen lang...).
Folgende Möglichkeiten sind denkbar
1) String nicht schreiben und Error ausgeben (aktueller Stand)
2) Die ersten 255 Zeichen in die Zelle schreiben und Warnung/Error ausgeben
3) Die ersten 255 Zeichen in die Zelle schreiben und den Rest als NOTE-Record mit dem Hinweis "Der String war zu lang... Rest: blablabla"

Ich würde 3) favorisieren.



Gruß SeBa

Dieser Beitrag soll weder nützlich, informativ noch lesbar sein.

Er erhebt lediglich den Anspruch dort wo er ungenau ist, wenigstens eindeutig ungenau zu sein.
In Fällen größerer Abweichungen ist es immer der Leser, der sich geirrt hat.

Rette einen Baum!
Diesen Beitrag nur ausdrucken, wenn unbedingt nötig!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Gehe zu: