2017-02-15 4 views
1

Я работаю над небольшим проектом, в котором я создаю файл слова Java и вношу некоторые детали в этот файл слов. Я могу создать файл слова и также в состоянии ввести в него данные. Я также пишу таблицу в файл слова и вводя некоторые детали.Как увеличить ширину столбца таблицы в файле слов JAVA

Теперь, что я хочу, я хочу увеличить ширину определенного столбца.

Есть ли способ сделать это? Я использую Apache POI драйверы для создания файла слов и записи данных в него.

Я использую ниже код:

XWPFDocument document= new XWPFDocument(); 
try{ 
FileOutputStream out = new FileOutputStream(
new File("d:\\createparagraph.docx")); 

XWPFParagraph paragraph = document.createParagraph(); 
    XWPFTable table = document.createTable(); 
    XWPFTableRow tableRowOne = table.getRow(0); 
    tableRowOne.getCell(0).setText("CLientID"); 
    tableRowOne.addNewTableCell().setText(txtCID.getText()); 
    //create second row 
    XWPFTableRow tableRow2 = table.createRow(); 
    tableRow2.getCell(0).setText("AccountID"); 
    tableRow2.getCell(1).setText(txtAID.getText()); 
document.write(out); 
out.close(); 
} 

Этот код работает отлично и генерировать нормальную таблицу, но я хочу, чтобы увеличить ширину конкретного столбца (Column 2).

Пожалуйста, помогите.

ответ

3

Насколько я вижу, настройки ширины столбца не реализованы (начиная с версии POI версии 3.15) в XWPFTable. Поэтому мы должны использовать базовые объекты низкого уровня.

Пример:

import java.io.FileOutputStream; 

import org.apache.poi.xwpf.usermodel.*; 

import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTblWidth; 
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STTblWidth; 

import java.math.BigInteger; 

public class CreateWordTableColumnWidth { 

public static void main(String[] args) throws Exception { 

    XWPFDocument document= new XWPFDocument(); 

    XWPFParagraph paragraph = document.createParagraph(); 
    XWPFRun run=paragraph.createRun(); 
    run.setText("The Body:"); 

    paragraph = document.createParagraph(); 

    XWPFTable table = document.createTable(1, 2); 

    //values are in unit twentieths of a point (1/1440 of an inch) 
    table.setWidth(5*1440); //should be 5 inches width 

    //create CTTblGrid for this table with widths of the 2 columns. 
    //necessary for Libreoffice/Openoffice to accept the column widths. 
    //first column = 2 inches width 
    table.getCTTbl().addNewTblGrid().addNewGridCol().setW(BigInteger.valueOf(2*1440)); 
    //other columns (only one in this case) = 3 inches width 
    for (int col = 1 ; col < 2; col++) { 
    table.getCTTbl().getTblGrid().addNewGridCol().setW(BigInteger.valueOf(3*1440)); 
    } 

    //set width for first column = 2 inches 
    CTTblWidth tblWidth = table.getRow(0).getCell(0).getCTTc().addNewTcPr().addNewTcW(); 
    tblWidth.setW(BigInteger.valueOf(2*1440)); 
    //STTblWidth.DXA is used to specify width in twentieths of a point. 
    tblWidth.setType(STTblWidth.DXA); 

    //set width for second column = 3 inches 
    tblWidth = table.getRow(0).getCell(1).getCTTc().addNewTcPr().addNewTcW(); 
    tblWidth.setW(BigInteger.valueOf(3*1440)); 
    tblWidth.setType(STTblWidth.DXA); 

    XWPFTableRow tableRowOne = table.getRow(0); 
    tableRowOne.getCell(0).setText("CLientID"); 
    tableRowOne.getCell(1).setText("CID001"); 
    //create second row 
    XWPFTableRow tableRow2 = table.createRow(); 
    tableRow2.getCell(0).setText("AccountID"); 
    tableRow2.getCell(1).setText("ACCID001"); 

    paragraph = document.createParagraph(); 

    document.write(new FileOutputStream("CreateWordTableColumnWidth.docx")); 
    document.close(); 

} 
} 

код прокомментирован, чтобы описать то, что он делает. Особо следует упомянуть специальный блок измерения Twip (двадцатый точки).

+0

Понимать, что ширина таблиц и ширина ячеек в Word несколько странные. То есть, они предлагаются только по ширине. Слово может изменять их на дисплее, поскольку оно сочтет необходимым, исходя из длины содержимого ячейки. – jmarkmurphy

+0

@jmarkmurphy: Какая у вас точка? Ширины, установленные с использованием моего кода выше, являются именно теми, которые я прокомментировал в коде. –

+0

Наверное, я не был ясен. Вы можете установить ширину для столбца, но если текст занимает больше места, Word может отобразить таблицу с большим столбцом. Вы можете прочитать о настройке таблицы и ширины ячеек в спецификации по адресу http://www.ecma-international.org/publications/standards/Ecma-376.htm. В POI используется спецификация первого выпуска. В части 4 приведено подробное описание того, как работают макеты таблиц. Он называет ширину «предпочтительной ширины», поскольку механизм компоновки использует это как один компонент из нескольких факторов при определении отображаемой ширины ячейки. – jmarkmurphy

Смежные вопросы