|
Export nach Excel mittels des Binary Interchange File Format (BIFF)
Hauptproblem:
Windows speichert in little Endian Java speichert in big Endian |
UIBspExport2Excel01.java
UIBspTabView01.png
Export2BIFF
private void bnStringClick() {
Export2BIFF excel = new Export2BIFF("test1.xls"); excel.openFile(); excel.Write(1,1,"abc"); // col row Value excel.Write(1,2,"01.01.2010"); // col row Value hier String, NICHT Datum ! excel.Write(1,3,"01/01/2010"); // col row Value hier String, NICHT Datum ! excel.closeFile(); StartExcel("test1.xls"); }
private void bnIntegerClick() {
Export2BIFF excel = new Export2BIFF("test2.xls"); excel.openFile(); // excel.Write(1,1,"abc"); // col row Value excel.Write(1,2,1234); // col row Value excel.Write(1,3,2004); // col row Value // excel.Write(1,3,"=SUMME(B3:B4)"); // col row Value excel.closeFile(); StartExcel("test2.xls"); }
private void bnDoubleClick() {
Export2BIFF excel = new Export2BIFF("test3.xls"); excel.openFile(); excel.Write(1,1,1234.45678); // col row Value excel.closeFile(); StartExcel("test3.xls"); }
private void bnAllesClick() { int row; Export2BIFF excel = new Export2BIFF("test4.xls"); excel.openFile(); java.util.Random random = new java.util.Random(); excel.Write(1,0, "Name" ); excel.Write(2,0, "Integer" ); excel.Write(3,0, "Gehälter" ); for (row=1; row<50; row++) { excel.Write(1,row, "abc" + Integer.toString(row) ); // col row Value excel.Write(2,row, random.nextInt() ); excel.Write(3,row, random.nextDouble()*10000 ); } // for excel.closeFile(); StartExcel("test4.xls"); }
private void StartExcel(String filename) { try { // funktioniert nur mit vollstaendigen Pfad String excel = "\"C:\\Program Files (x86)\\Microsoft Office\\Office14\\EXCEL.EXE\""; Runtime.getRuntime().exec(excel+" D:\\Daten\\Dp60\\Java-Edit\\"+filename); } catch (IOException e1) { System.out.println("Error in Start Excel"); } } |
Export nach Excel mittels des Binary Interchange File Format (BIFF) Diese Lösung verwendet beim Double-Datentyp zwei Pipes Die erste Lösung ist natürlich besser, zeigt aber die Verwendung von Pipes
Hauptproblem:
Windows speichert in little Endian Java speichert in big Endian |
UIBspExport2Excel02.java
UIBspTabView02.png
Export2BIFF
private void bnStringClick() {
Export2BIFF excel = new Export2BIFF("test1.xls"); excel.openFile(); excel.Write(1,1,"abc"); // col row Value excel.Write(1,2,"01.01.2010"); // col row Value hier String, NICHT Datum ! excel.Write(1,3,"01/01/2010"); // col row Value hier String, NICHT Datum ! excel.closeFile(); StartExcel("test1.xls"); }
private void bnIntegerClick() {
Export2BIFF excel = new Export2BIFF("test2.xls"); excel.openFile(); // excel.Write(1,1,"abc"); // col row Value excel.Write(1,2,1234); // col row Value excel.Write(1,3,2004); // col row Value // excel.Write(1,3,"=SUMME(B3:B4)"); // col row Value excel.closeFile(); StartExcel("test2.xls"); }
private void bnDoubleClick() {
Export2BIFF excel = new Export2BIFF("test3.xls"); excel.openFile(); excel.Write(1,1,1234.45678); // col row Value excel.closeFile(); StartExcel("test3.xls"); }
private void bnAllesClick() { int row; Export2BIFF excel = new Export2BIFF("test4.xls"); excel.openFile(); java.util.Random random = new java.util.Random(); excel.Write(1,0, "Name" ); excel.Write(2,0, "Integer" ); excel.Write(3,0, "Gehälter" ); for (row=1; row<50; row++) { excel.Write(1,row, "abc" + Integer.toString(row) ); // col row Value excel.Write(2,row, random.nextInt() ); excel.Write(3,row, random.nextDouble()*10000 ); } // for excel.closeFile(); StartExcel("test4.xls"); }
private void StartExcel(String filename) { try { // funktioniert nur mit vollstaendigen Pfad String excel = "\"C:\\Program Files (x86)\\Microsoft Office\\Office14\\EXCEL.EXE\""; Runtime.getRuntime().exec(excel+" D:\\Daten\\Dp60\\Java-Edit\\"+filename); } catch (IOException e1) { System.out.println("Error in Start Excel"); } }
NEU:
// ein double-Wert wird genau verkehrt herum geschrieben // also extra schreiben, einlesen und neuschreiben public void Write(int Col, int Row, double dValue) { short s; int v; int i; byte [] bits = new byte[8]; PipedInputStream pipein; // PipedOutputStream pipeout; DataOutputStream dout;
try { ClearArrays(); s = (short) (Row); CXlsDouble[4] = (byte) (s & 255); // 4 5 [2] CXlsDouble[5] = (byte) ((s >> 8) & 255); // 4 5 [2] s = (short) (Col); CXlsDouble[6] = (byte) (s & 255); // 6 7 [3] CXlsDouble[7] = (byte) ((s >> 8) & 255); // 6 7 [3] writeCXlsDouble(); pipein = new PipedInputStream(); pipeout = new PipedOutputStream(); dout = new DataOutputStream(pipeout); // Erzeugen der Stream-Objekte zum Schreiben und Lesen
pipeout.connect(pipein); // Kopplung der Streams
dout.writeDouble(dValue); pipein.read(bits, 0, bits.length); // in dem Array wird gelesen, Startindex=0 Anzahl = 8 pipein.close(); dout.close(); pipeout.close();
for (i=bits.length-1; i>=0; i--) { dout.writeByte( bits[i] ); } // _dout.writeDouble( Value ); // leider hier verkehrte Reihenfolge } catch (IOException e) { System.err.println("IOException: " + e); } } // Write Double |
|
|