-
Excel Datei mit RPG und POI/HSSF in A4
Hallo Forum,
ich erstelle mit POI/HSSF und RPG eine Excel Datei die ich mit Daten fülle.
Beim erstellen der Excel Datei stellt er mir standardmäßig das Seitenformat Letter ein.
Ich möchte aber Format A4 haben. In der Doku habe ich eine Klasse für den
Drucker Setup gefunden und folgendes codiert:
D* // DRUCKER SETUP
D PrtSetup S O CLASS(*JAVA
D :'org.apache.poi.hssf.usermodel-
D .HSSFPrintSetup')
D* // PRINTER KONSTRUKTOR
D setupPrinter PR O EXTPROC(*JAVA
D :'org.apache.poi.hssf.usermodel-
D .HSSFPrintSetup'
D :*CONSTRUCTOR)
D CLASS(*JAVA
D :'org.apache.poi.hssf.usermodel-
D .HSSFPrintSetup')
D* // PAPIERGRÖSSE EINSTELLEN
D setPaperSize PR O EXTPROC(*JAVA
D :'org.apache.poi.hssf.usermodel-
D .HSSFPrintSetup'
D :'setPaperSize')
D CLASS(*JAVA
D :'org.apache.poi.hssf.usermodel-
D .HSSFPrintSetup')
Wie muss ich jetzt die Papiergröße abändern ?
Hat jemand ein Beispiel ?
Danke für alle Antworten
-
Versuch doch mal folgendes:
PrtSetup = setupPrinter();
setPaperSize(PrtSetup) = 9;
Gruß,
KM
-
POI Excel A4
Hallo,
ich bekomme beim Compilieren eine
Fehlermeldung:
setPaperSize(PrtSetup) = 9;
*RNF7416 30 753 069500 Die Arten der Operanden auf der rechten und linken Seite
des Ausdrucks in der Operation EVAL stimmen nicht überein.
-
Füge mal folgendes ein:
PHP-Code:
D A4 5I 0 inz(9)
.
.
.
setPaperSize(PrtSetup) = A4;
Die Methode setPaperSize erwartet den Typ SHORT.
Gruß,
KM
-
Hallo KM,
leider ohne Erfolg, die Fehlermeldung
bleibt wie gehabt.
-
setPaperSize ist falsch deklariert.
Bei Prozeduraufrufen kann keine Zuweisung erfolgen.
Das gewünschte Argument muss als Parameter übergeben werden.
Prüfe mal die Prozedurdeklaration und korrigiere diese, so dass folgender Aufruf möglich ist:
setPaperSize(PrtSetup:9);
-
Hallo Fuerchau, ich habe jetzt die Prozedurdefinition abgeändert in:
D* // PAPIERGRÖSSE EINSTELLEN
D setPaperSize PR O EXTPROC(*JAVA
D :'org.apache.poi.hssf.usermodel-
D .HSSFPrintSetup'
D :'setPaperSize')
D CLASS(*JAVA
D :'org.apache.poi.hssf.usermodel-
D .HSSFPrintSetup')
D parm 5I 0 value
Ich kann das PGM fehlerfrei compilieren, aber beim Aufruf des PGMs kommt die Fehlermeldung:
Java-Ausnahme "java.lang.NoClassDefFoundError:
org/apache/poi/hssf/usermodel/HSSFPrintSetup" empfangen, als die Methode
"" mit Kennung "()V" in Klasse
"org.apache.poi.hssf.usermodel.HSSFPrintSetup" aufgerufen
wurde.Fehlerbeseitigung: Mit Hilfe des Benutzers, der für die Programmpflege
verantwortlich ist, die Fehlerursache bestimmen.Technische Beschreibung . .
-
Ich kenne mich in den Funktionen da nicht aus.
Aber die Deklaration (sprich der Aufruf) muss ja in etwa ähnlich anderen Zuweisungs-Operationen definiert werden.
Prüfe da genau die Argumente und Ausprägungen.
-
Da ich nur die Deklarationen sehen, kann ich mir kein richtiges Urteil bilden. Aber wie setzt du die Javazeilen:
PHP-Code:
// Papiergrösse A4 (short 9) HSSFPrintSetup ps = sheet.getPrintSetup(); ps.setPaperSize(HSSFPrintSetup.A4_PAPERSIZE);
um? Das Objekt HSSFPrintSetup muss aus dem Sheet initialisiert werden. Machst du das?
Allerdings muss ich hier auch ein Warnungen aussprechen:
1. RPG und Java....(siehe auch Homepage von Dieter Bender)
2. die POI-Lib
Die Exceltabelle wird komplett im Hauptspeicher erstellt. Der Hauptspeicherbedarf ist ca. Faktor 15-20 (!) vom xls.
Da bei uns auch mal größere Listen drüberlaufen, verwende ich die POI-Lib nicht! (besser JExcelAPI)
Anbei ein Commandline Tool, aber wie gesagt: nix für große XLS-Dateien.
Robert P.
PHP-Code:
import com.ibm.as400.access.*; import java.sql.*; import java.io.FileOutputStream; import org.apache.poi.hssf.usermodel.*;
public class PoiDemo {
public void run (String dbFile, String outFile, String user, String password) throws SQLException {
dbFile = dbFile.replaceAll("/", "."); // SQL schreibweise
// JDBC-Treiber laden DriverManager.registerDriver(new com.ibm.as400.access.AS400JDBCDriver());
Connection conn = DriverManager.getConnection("jdbc:as400://127.0.0.1;extended metadata=true", user, password);
Statement stmt = conn.createStatement (); ResultSet rs = stmt.executeQuery ("select * from " + dbFile);
ResultSetMetaData meta = rs.getMetaData(); int anzFields = meta.getColumnCount(); int zeile = 0;
// neues Dokument HSSFWorkbook wb = new HSSFWorkbook(); // neues sheet HSSFSheet sheet = wb.createSheet("Demo"); // Papiergrösse A4 (short 9) HSSFPrintSetup ps = sheet.getPrintSetup(); ps.setPaperSize(HSSFPrintSetup.A4_PAPERSIZE);
// Zeile erzeugen, um 1 erhöhen HSSFRow row = sheet.createRow(zeile++); HSSFCell cell;
// Überschriften erzeugen for (int i = 0; i < anzFields; i++) { cell = row.createCell((short) i); String label = meta.getColumnLabel(i+1);
// alte, mehrzeilige Columnheadings komprimieren (für Autofilter & Co) switch (label.length()) { case 60: label = label.substring(0, 19).trim() + " " + label.substring(20, 39).trim() + " " + label.substring(40).trim(); break; case 40: label = label.substring(0, 19).trim() + " " + label.substring(20, 39).trim(); break; default: label = label.trim(); }
cell.setCellValue(label); // Spaltenbreite aus Metadaten holen (256=eine Zeichenbreite + etwas Abstand) sheet.setColumnWidth((short) i, (short) (meta.getColumnDisplaySize(i+1) * (256 + 16) + 512)); }
// Daten umschaufeln while (rs.next ()) { row = sheet.createRow(zeile++); for (int i = 0; i < anzFields; i++) { cell = row.createCell((short) i); // zwischen numerisch unterscheiden, der Rest als String if (meta.getColumnClassName(i+1).equals("java.math.BigDecimal")) { cell.setCellValue(rs.getDouble(i+1)); cell.setCellType(cell.CELL_TYPE_NUMERIC); } else { cell.setCellValue(rs.getString(i+1)); cell.setCellType(cell.CELL_TYPE_STRING); }
} }
rs.close(); stmt.close(); conn.close();
// File schreiben try { FileOutputStream xlsFile = new FileOutputStream(outFile); wb.write(xlsFile); xlsFile.close(); } catch (Exception e) { System.out.println("Fehler beim Erstellen von File " + outFile + ": " + e); } }
public static void main (String args []) throws SQLException {
if (args.length == 4) { try { new PoiDemo().run(args[0],args[1],args[2],args[3]); } catch (SQLException e) { System.out.println("Datenbankfehler: " + e); } } else { System.out.println("AS/400 DbFile2XLS"); System.out.println("Parameter: AS400Lib/File IFS-OutFile User Password"); } } }
Anmkerungen:
1. Das Tool verwendet nicht die nativen DB2-Treiber
2. Für den Normalgebrauch ist von metadata=true abzuraten. In diesem Fall ist das Absicht, damit man an die wirklichen Feldbezeichnungen kommt.
3. wie gesagt, braucht viel Speicher bei großen XLS-Tabellen
4. hier ein Beispielaufruf:
PHP-Code:
QSH
java -classpath /pfad:/pfad/poi-2.5.1.jar PoiDemo Lib/ARTIKEL /freigaben/Artikel.xls user pass
Similar Threads
-
By Stoeberl in forum NEWSboard Programmierung
Antworten: 8
Letzter Beitrag: 10-01-07, 10:58
-
By Kilianski in forum NEWSboard Server Software
Antworten: 0
Letzter Beitrag: 22-11-06, 15:23
-
By TobiasHe in forum NEWSboard Programmierung
Antworten: 6
Letzter Beitrag: 08-04-05, 08:44
-
By ErnieBaer in forum NEWSboard Programmierung
Antworten: 2
Letzter Beitrag: 16-02-05, 15:03
-
By Markus H in forum IBM i Hauptforum
Antworten: 3
Letzter Beitrag: 19-07-01, 19:21
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks