# JCom Beispeil mit Excel



## tobi88 (12. Sep 2008)

Hallo zusammen,

ich möchte gerne ein vorhandenes Exceldokument öffnen und ein paar Werte dort ein Einfügen. Ich kann leider nicht das CSV-Datenformat nehmen, da in dem Dokument überall Formeln und Formatierungen vorhanden sind.

Ich weiß das es eine JCom-Brigde gibt. Ich bekomme dieses leider nur noch nicht hin  Ich habe die JCom.jar in mein Projekt eingefügt und habe den beiligenen DemoCode genommen.

DemoCode:

```
import jp.ne.so_net.ga2.no_ji.jcom.excel8.*;
import jp.ne.so_net.ga2.no_ji.jcom.*;
import java.io.File;
import java.util.Date;

/* sample program using Excel lapper */
class testJCom {
    public static void main(String[] args) throws Exception {
        ReleaseManager rm = new ReleaseManager();
        try {
            System.out.println("EXCEL startup...");
            // if already started, open new window
            ExcelApplication excel = new ExcelApplication(rm);
            excel.Visible(true);
            // display any information
            System.out.println("Version="+excel.Version());
            System.out.println("UserName="+excel.UserName());
            System.out.println("Caption="+excel.Caption());
            System.out.println("Value="+excel.Value());

            ExcelWorkbooks xlBooks = excel.Workbooks();
            ExcelWorkbook xlBook = xlBooks.Add();   // create new book
            
            // enumurate all files
            System.out.println("set infomation of files in current directory to cell ...");
            ExcelWorksheets xlSheets = xlBook.Worksheets();
            ExcelWorksheet xlSheet = xlSheets.Item(1);
            ExcelRange xlRange = xlSheet.Cells();

            xlRange.Item(1,1).Value("filename" );
            xlRange.Item(2,1).Value("size" );
            xlRange.Item(3,1).Value("last modified time");
            xlRange.Item(4,1).Value("is directory");
            xlRange.Item(5,1).Value("is file");
            xlRange.Item(6,1).Value("can read");
            xlRange.Item(7,1).Value("can write");

            File path = new File("./");
            String[] filenames = path.list();
            for(int i=0; i<filenames.length; i++) {
                File file = new File(filenames[i]);
                System.out.println(file);
                xlRange.Item(1,i+2).Value( file.getName() );                // filename(no path)
                xlRange.Item(2,i+2).Value( (int)file.length() );            // filesize
                xlRange.Item(3,i+2).Value( new Date(file.lastModified()) ); // last modified time
                xlRange.Item(4,i+2).Value( file.isDirectory()?"Yes":"No" ); // directory ?
                xlRange.Item(5,i+2).Value( file.isFile()?"Yes":"No" );      // file ?
                xlRange.Item(6,i+2).Value( file.canRead()?"Yes":"No" );     // can read ?
                xlRange.Item(7,i+2).Value( file.canWrite()?"Yes":"No" );    // can write ?
            }
            String expression = "=Sum(B2:B"+(filenames.length+1)+")";
            System.out.println("embed equation, calculate sum of filesize: "+expression);
            xlRange.Item(1,filenames.length+2).Value("sum");
            xlRange.Item(2,filenames.length+2).Formula(expression);
            xlRange.Columns().AutoFit();    // fit columns

            // comment out, if print out.
            // output default printer.
//          System.out.println("print out...");
//          xlSheet.PrintOut();

            // comment out, if book save to file.
            // if no path, save to(My Documents)
//          System.out.println("save to file... (My Documents)\\testExcel.xls");
//          xlBook.SaveAs("testExcel.xls");

            xlBook.Close(false,null,false);
            excel.Quit();

            System.out.println("thank you .");
        }
        catch(Exception e) { e.printStackTrace(); }
        finally { rm.release(); }
    }
}
```

Wenn ich diesen Starte bekomme ich folgene Fehlermeldung:



> Exception in thread "main" java.lang.UnsatisfiedLinkError: no jcom in java.library.path
> at java.lang.ClassLoader.loadLibrary(Unknown Source)
> at java.lang.Runtime.loadLibrary0(Unknown Source)
> at java.lang.System.loadLibrary(Unknown Source)
> ...



Muss ich noch irgendeine Libarary einbinden?


Ich besitze bereits schon Office 2007. Kann es auch daran liegen, dass ich kein Office2003 installiert habe? Oder ist  meine JCom.jar fehlerhaft?

Ich hoffe ihr könnt mir weiterhelfen 

gruß
tobi


----------



## tobi88 (22. Sep 2008)

Keiner eine Idee?


----------



## setsuna9 (22. Sep 2008)

Ist JCom das richtige für Einfügen von Werten oder Formeln?
Dafür ist Apache POI oder JExcel eher geeignet.


----------



## tobi88 (23. Sep 2008)

Super Danke  

JExcel funktioniert schon mal so weit  nur leider kein Excel2007. Gibt es schon was für Excel2007? Ich finde leider nichts 

Werde jetzt gleich erstmal Apache POI testen.


EDIT:
Apache POI


> HSSF for Excel Documents
> 
> HSSF is our port of the Microsoft Excel 97(-2003) file format (BIFF8) to pure Java. It supports read and write capability. (Support for Excel 2007 .xlsx files is in progress). Please see the HSSF project page for more information.




Gruß 
Tobi


----------



## Peter100 (15. Okt 2008)

um den unsatisfiedLinkError zu vermeiden muß die jcom.dll noch in die JAVAHOME\bin gestellt werden!


----------

