# Apache POI Word Tabelle Spaltenbreite festlegen



## kiname (19. Nov 2014)

Hallo,

ich versuche nun schon seit einiger Zeit die Spaltenbreite einer XWPFTable festzulegen und finde einfach keine Lösung.
Die Spaltenbreite für alle Spalten will ich nicht allgemein festlegen nur für bestimmte Spalten eine bestimmte Breite.
Momentan habe ich folgendes als Ansatz:

```
XWPFTable table = document.createTable(5, 4);
table.getRow(0).getCell(0).getCTTc().addNewTcPr().addNewTcW().setW(BigInteger.valueOf(2000));
```

Lg
kiname


----------



## Joose (19. Nov 2014)

Es fehlt leider eine konkrete Frage, daher lässt sich nur schwer helfen.


----------



## kiname (19. Nov 2014)

also ich habe eine XWPFTable das hat 5 zeilen und 4 spalten.
Die sind jedoch unformatiert deshalb will ich die breite der Spalten festlegen.
so dass z.B. die 2te und die 4te spalte breiter sind als die 1ste und 3te spalte.
wie kann ich das realisieren?

ist meine Frage nun eindeutig?


----------



## Joose (19. Nov 2014)

Jap, mit dem obrigen Code hast du es anscheind probiert aber ohne Erfolg?
Hat sich nichts an der Breite geändert? Kam eine Fehlermeldung?

EDIT:
SOLVED: Is there a way to set the width of a column in XWPFTableCell?
Hier gibt es das gleiche Problem wie bei dir. Der Code zum Anpassen der Breite entspricht deinem.


----------



## kiname (19. Nov 2014)

Ja ich habe den obrigen Code versucht und auch ohne Fehlermeldung jetzt habe ich eine Testklasse erstellt und den code getstet aber das ergebnis ist eine komplett zusammengeschobene tabelle weißt du den fehler?


```
public class Main {
	static String savePathName = "C:\\Users\\WV00033160\\Desktop\\Testerdoc.docx";
	public static void main(String[] args) {
		XWPFDocument doc = new XWPFDocument();
	      int[] cols = {4000, 2000, 3000};
	      XWPFTable table = doc.createTable(3, 3);
	      
//	      table.getRow(0).getCell(0).getCTTc().addNewTcPr().addNewTcW().setW(BigInteger.valueOf(2000));

	      for(int i = 0; i < table.getNumberOfRows(); i++){
	          XWPFTableRow row = table.getRow(i);
	          int numCells = row.getTableCells().size();
	          for(int j = 0; j < numCells; j++){
	              XWPFTableCell cell = row.getCell(j);
	 
	              cell.getCTTc().addNewTcPr().addNewTcW().setW(BigInteger.valueOf(cols[j]));
	          }
	      }
	      
	      try{//Dokument Speichern
				FileOutputStream output = new FileOutputStream(savePathName);
				doc.write(output);
				output.close();
			}catch(Exception e){
				e.printStackTrace();
			}//Speichern Ende
	}
	
}
```


----------



## Joose (19. Nov 2014)

In dem Link den ich gepostet habe stand: 


> Ok, the issue was my environment.  I had MS-Office 2007 installed. Once I upgraded to MS-Office
> 2010, the code below works perfectly.



Möglicherweise ist das auch dein Problem?


----------



## kiname (19. Nov 2014)

ja das ist das problem aber 2007 ist fest installiert daran kann ich nichts ändern ich will jedoch dennoch die spaltenbreite festlegen es muss doch auch möglich sein das problem mit word 2007 zu lösen


----------



## Joose (19. Nov 2014)

kiname hat gesagt.:


> .... es muss doch auch möglich sein das problem mit word 2007 zu lösen



Nein muss es nicht, wenn Office damals bestimmte Funktionalität nicht zugänglich hatte dann ist es eben so.
Den Hersteller der API und vielleicht Microsoft anschreiben und probieren es zu klären.

PS: Office 2007 ist doch schon ziemlich "alt" oder nicht?


----------

