2012-02-29 2 views
0

Я работаю над документом Microsoft Word 2007.OutputStream не сохранит все обновления в файле

мои цели должны заполнить:

  1. ячейку таблицы.
  2. Линия абзаца.

так что мой код выполняет эту работу, но проблема в том, что когда я пишу файл с помощью FileOutputStream, он записывает только одну из моих целей (только последняя модификация).

здесь изображение заголовка:

enter image description here

и вот код я использовал:

try{ 

InputStream input = new FileInputStream("c:\\doslot.docx"); 
XWPFDocument document=new XWPFDocument(input); 
//*********************inserting the 2nd line************************** 
    XWPFHeader head = document.getHeaderList().get(0); 
    List<XWPFParagraph> para= head.getParagraphs(); 
    XWPFRun pararun=para.get(0).createRun(); 
    pararun.setText("DOSSIER DE LOT GLUSCAN® N°FG-4040400A"); 
//*********************inserting the header thrid table cell************************* 
    XWPFHeader headd = document.getHeaderList().get(1); 
    List<XWPFTable> tables = headd.getTables(); 
    List<XWPFTableRow> rows = tables.get(0).getRows(); 
    XWPFTableCell cell = rows.get(0).getTableCell(rows.get(0).getTableCells().get(3).getCTTc()); 
    XWPFParagraph p =cell.addParagraph(); 
    XWPFRun pararuno=p.createRun(); 
    pararuno.setText("some text"); 


    FileOutputStream out = new FileOutputStream("c:\\fin.docx"); 
    document.write(out); 
    out.close(); 


    }catch(Exception ex){ 
     ex.printStackTrace(); 
    } 

ответ

1

Проблема заключается в том, что List<XWPFTableCell> cell = rows.get(0).getTableCells(); возвращается вновь созданный список, XWPFTableRow.getTableCells() говорит:

создать и вернуть список всех XWPFTableCell w хо принадлежит к этому ряду

И конечно замечания делать ложь, а код не делает, так sources сказать:

public List<XWPFTableCell> getTableCells(){ 
    if(tableCells == null){ 
     //Here it is created 
     List<XWPFTableCell> cells = new ArrayList<XWPFTableCell>(); 
     for (CTTc tableCell : ctRow.getTcList()) { 
      cells.add(new XWPFTableCell(tableCell, this, table.getPart())); 
     } 
     this.tableCells = cells; 
    } 
    return tableCells; 
} 

И для вашей помощи есть XWPFTableRow.getTableCell(CTTc cell), где вы проходите CTTc клеток, и метод определенно возвращает существующий объект:

public XWPFTableCell getTableCell(CTTc cell) { 
    for(int i=0; i<tableCells.size(); i++){ 
     if(tableCells.get(i).getCTTc() == cell) return tableCells.get(i); 
    } 
    return null; 
} 

Вы можете достичь CTTc клетки, вызывая XWPFTableCell.getCTTc(), а затем изменить его непосредственно.

Код для прямого доступа к существующей ячейке будет:

XWPFTableCell cell = 
    rows.getTableCell(rows.get(0).getTableCells().get(3).getCTTc()); 

Я не пробовал или скомпилировать этот код, так что я не уверен, что это правильно, но я доверяю OO знания и источники. Во что бы то ни стало это нужно. Если это так - исправьте код, чтобы убедиться, что он правильный и компилируемый.

FTR, я думаю, что должно быть более удобным способом сделать это, довольно часто можно редактировать ячейки, и я думаю, что это не должно быть так сложно, я бы предложил попробовать некоторые учебники по XWPFTable и его манипуляции.

+0

Благодарим вас, позвольте мне проверить это, я несравненно жду ответа. –

+0

Слишком плохо, что это не сработало, код скомпилирован без ошибок, но он по-прежнему остается одним и тем же, сохраняется только одно изменение, какая странная вещь: s –

+0

даже попробовал это, посмотри в мой пост –

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