2013-04-17 2 views
2

Я нашел учебники о том, как создать простую таблицу при создании файла docx с помощью docx4j. и видели образец того, как объединить ячейки по вертикали. Это сработало. но я пробовал то же самое с использованием горизонтального слияния. но ничего не случилось. Как использовать HMerge? Я обнаружил, что значения этого класса могут быть "restart" или "continue". что могут сделать эти ценности? вот пример кода.Как использовать и применять HMerge в ячейке при создании файла docx с помощью java и docx4j?

Tbl tblGI = factory.createTbl(); 
Tr trGI = factory.createTr(); 

Tc tcGI1 = factory.createTc(); 
TcPr tcpr = new TcPr(); 
HMerge hmerge = new HMerge(); 
hmerge.setVal("restart"); 
tcpr.setHMerge(hmerge); 
tcGI1.setTcPr(tcpr); 
tcGI1.getContent().add(wordMLPackage.getMainDocumentPart().createParagraphOfText("sample merged cell")); 
trGI.getContent().add(tcGI1); 

Tr trGI2 = factory.createTr(); 
Tc tcGI21 = factory.createTc(); 
tcGI21.getContent().add(wordMLPackage.getMainDocumentPart().createParagraphOfText("row2 column1")); 
trGI2.getContent().add(tcGI21); 

Tc tcGI22 = factory.createTc(); 
tcGI22.getContent().add(wordMLPackage.getMainDocumentPart().createParagraphOfText("row2 column2")); 
trGI2.getContent().add(tcGI22); 

tblGI.getContent().add(trGI1); 
tblGI.getContent().add(trGI2); 

Этот код показывает таблицу с двумя строками. первая строка имеет только один столбец и ячейку (которая должна быть объединена). и второй ряд с двумя ячейками. Как я сделать первый ряд быть объединены и будет одна ячейка с пролетом колонны 2.

ответ

2

Вы можете использовать вес: gridSpan, например, так:

<w:tbl> 
    <w:tblPr> 
    <w:tblStyle w:val="TableGrid"/> 
    <w:tblW w:w="0" w:type="auto"/> 
    <w:tblLook w:val="04A0" w:firstRow="1" w:lastRow="0" w:firstColumn="1" w:lastColumn="0" w:noHBand="0" w:noVBand="1"/> 
    </w:tblPr> 
    <w:tblGrid> 
    <w:gridCol w:w="4788"/> 
    <w:gridCol w:w="4788"/> 
    </w:tblGrid> 
    <w:tr > 
    <w:tc> 
     <w:tcPr> 
     <w:tcW w:w="9576" w:type="dxa"/> 
     <w:gridSpan w:val="2"/> 
     </w:tcPr> 
     <w:p > 
     </w:p> 
    </w:tc> 
    </w:tr> 
    <w:tr > 
    <w:tc> 
     <w:tcPr> 
     <w:tcW w:w="4788" w:type="dxa"/> 
     </w:tcPr> 
     <w:p /> 
    </w:tc> 
    <w:tc> 
     <w:tcPr> 
     <w:tcW w:w="4788" w:type="dxa"/> 
     </w:tcPr> 
     <w:p /> 
    </w:tc> 
    </w:tr> 
</w:tbl> 

В TCPR, там получить/setGridSpan.

ps вышеупомянутый XML был выпущен Word 2010. Вы можете разархивировать docx, чтобы посмотреть на него.

+0

плохо попробуйте используя сетка. – Weddy

+0

gridspan отлично работает. хотя я не совсем понял xml-код выше. но я попробовал gridspan. Благодарю вас. Джейсон и больше власти. – Weddy

+0

Спасибо за полезный ответ и XML Jason. Я только что узнал, что Apache POI не создает таблицы с элементом w: tblGrid по умолчанию. Я должен был создать это вручную с помощью дочерних элементов w: gridCol, чтобы избежать «Число столбцов или количество ячеек в строке переполняет количество столбцов fo: table-column, указанных для таблицы». Просто хотел упомянуть об этом, потому что другие тоже попали в эту ошибку. –