# Excel Datei erstellen: optimale Spaltenbreite möglich?



## DuenenTuessy (26. April 2006)

Hallo zusammen,
ich erstelle in meinem Java-Programm eine Excel-Datei, das funktioniert auch alles. Ich nutze die JExcelApi(package jxl).
In Excel kann man durch doppelklick auf die Spalte die optimale Spaltenbreite erzeugen. Ist dies auch über Java möglich?

Danke, Nicole


----------



## DuenenTuessy (27. April 2006)

Hallo nochmal,
kann mir keiner weiterhelfen oder habe ich mich zu unverständlich ausgedrückt? Oder kann mir vielleicht jemand nen Tip geben, wie ich mich besser anstellen kann um jemanden zufinden, der vielleicht schon mal sowas oder sowas ähnliches gemacht hat bzw. sich damit ein wenig auskennt?
Wär schön wenn doch noch jemand einen Rat weiß!

Danke schonmal, Nicole


----------



## flashray (27. April 2006)

Hallo Nicole,

versuchs mal hier:
http://groups.yahoo.com/group/JExcelApi/


Vg  Erdal


----------



## Thomas Darimont (27. April 2006)

Hallo!

Ich denke die Methode *setShrinkToFit*(boolean s)  
          Sets the shrink to fit flag
des WritableCellFormats ist das was du suchst...
http://jexcelapi.sourceforge.net/resources/javadocs/2_5_5/docs/jxl/write/WritableCellFormat.html

Gruß Tom


----------



## DuenenTuessy (28. April 2006)

Hallo zusammen,
vielen Dank für die Tipps!

@Erdal: ich werde dort gleich mal schauen, sieht viel versprechend aus.

@Tom: Da passiert genau das umgekehrte von dem was ich möchte. Die Methode bewirkt, das sich der Spalteninhalt an die Spaltenbreite anpasst und nicht nicht die Spaltenbreite an den Spalteninhalt. Das heißt die Schrift wird kleiner. Ich möchte aber, dass die Schriftgröße bleibt und die Spalte sich vergrößert/verkleinert...

LG Nicole


----------



## Thomas Darimont (28. April 2006)

Hallo!

http://jexcelapi.sourceforge.net/resources/javadocs/2_5_5/docs/jxl/WorkbookSettings.html
void *setFormulaAdjust*(boolean b)  
          Setter for the formula adjust disabled property  Wenn ich dieses Flag auf true setze wird immerhin die letzte von drei Spalten optimal resized... na ja, irgendwie bin ich mit dieser API nicht gluecklich, vor allem die Dokumentation der einzelnen Methoden gibt oft Raetsel auf.
Ich wuerds dann mal noch mit    sheet.getSettings().setDefaultColumnWidth(XXX); versuchen.

Aus der FAQ:


> How do I do the equivilent of Excel's "Format/Column/Auto Fit Selection"? 		 	 	 		 			There is no API function to do this for you.  You'll need to write code that scans the cells in each column, 	calculates the maximum length, and then calls setColumnView() accordingly. This will get you close to what Excel does but not exactly. Since most fonts have variable width characters, to get the exact same value, you would need to use FontMetrics to calculate the maximum width of each string in the column. No one has posted code on how to do this yet. Feel free to post code to the Yahoo! group or send it directly to the FAQ author's listed at the bottom of this page.



http://jexcelapi.sourceforge.net/resources/faq/

Gruss Tom


----------



## Eboniker (3. März 2012)

Ein bisl spät, aber:
Einfach über alle Spalten iterieren, sich alle Zellen besorgen, diese nach dem längsten Inhalt durchsuchen. Diesen Wert dann als Spaltenbreite setzen. Done.
Hier noch eine Methode die das macht...

```
private void setOptimalColumnWidth(WritableSheet sheet) {
		int len = -1;
		for (int i = 0; i < sheet.getColumns(); i++) {
			Cell[] cells = sheet.getColumn(i);
			for (Cell cell : cells) {
				if (cell != null) {
					len = Math.max(len, cell.getContents().length());
				}
			}
			if (len > 1) {
				sheet.setColumnView(i, len + 2);
			}
			len = -1;
		}
}
```

Natürlich erst aufrufen wenn das Sheet bereits seinen Content enthält...


----------

