[NEWSboard IBMi Forum]

Hybrid View

  1. #1
    Registriert seit
    Feb 2001
    Beiträge
    20.716
    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.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  2. #2
    Registriert seit
    Oct 2004
    Beiträge
    251
    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 dbFileString outFileString userString 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",
                         
    userpassword);

           
    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 0anzFieldsi++) {
               
    cell row.createCell((shorti);
               
    String label meta.getColumnLabel(i+1);

               
    // alte, mehrzeilige Columnheadings komprimieren (für Autofilter & Co)
               
    switch (label.length()) {
                   case 
    60:
                       
    label label.substring(019).trim() + " " +
                               
    label.substring(2039).trim() + " " +
                               
    label.substring(40).trim();
                       break;
                   case 
    40:
                       
    label label.substring(019).trim() + " " +
                               
    label.substring(2039).trim();
                       break;
                   default:
                       
    label label.trim();
               }

               
    cell.setCellValue(label);
               
    //  Spaltenbreite aus Metadaten holen (256=eine Zeichenbreite + etwas Abstand)
               
    sheet.setColumnWidth((shorti, (short) (meta.getColumnDisplaySize(i+1) * (256 16) + 512));
           }

           
    // Daten umschaufeln
           
    while (rs.next ()) {
               
    row sheet.createRow(zeile++);
               for (
    int i 0anzFieldsi++) {
                   
    cell row.createCell((shorti);
                   
    // 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

  1. Problem mit Java-Methoden Aufruf aus ILE RPG?
    By Stoeberl in forum NEWSboard Programmierung
    Antworten: 8
    Letzter Beitrag: 10-01-07, 10:58
  2. EXCEL, PDF, ZIP, IDEA, e-mail, alles auf iSeries
    By Kilianski in forum NEWSboard Server Software
    Antworten: 0
    Letzter Beitrag: 22-11-06, 15:23
  3. RPG - Eine Datei 2x einbinden
    By TobiasHe in forum NEWSboard Programmierung
    Antworten: 6
    Letzter Beitrag: 08-04-05, 08:44
  4. Excel - Dateigenerierung mit Java (POI/HSSF)
    By ErnieBaer in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 16-02-05, 15:03
  5. Datei aus Queryauswertung nach excel übertragen
    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
  •