0

1 つのテーブルを含む .docx ファイルがあります。行 2 から最後までのすべてのテキストを削除したい。ただし、myTable.getRow(somecounter).getCell(somecounter2).setText("")「」を既存の値に連結するだけなので、このメソッドは機能しません。また、XWPFRun をrun.setText("")作成してから作成しようとしましたmyTable.getRow(sc).getCell(sc2).getParagraphs().get(0).createRun()が、うまくいきません。

このスレッドの解決策も試してみましたが、今回はうまくいきませんでした:(

セルからテキストを簡単に削除する方法はありますか? 私のアイデアは、新しいテーブルをゼロから作成し、コンテンツで埋めることですが、非常に困難に思えます。

4

1 に答える 1

1

Wordテーブルセルにはテキスト以外の多くのものを含めることができるため、「2行目から最後まですべてのテキストを削除する」という要件を満たすのは少し複雑です。

次の表を検討してください。

ここに画像の説明を入力

したがって、行 2 から最後までのすべてのコンテンツを削除する必要がある場合は、すべてのセルを新しいクリーンなセルに置き換えるだけで済みます。または、少なくとも空の段落しかないものでは。

import java.io.FileOutputStream;
import java.io.FileInputStream;

import java.util.List;

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

import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTc;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTc;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTP;

/*
needs the full ooxml-schemas-1.3.jar as mentioned in https://poi.apache.org/faq.html#faq-N10025
since the CTRowImpl is not fully shipped with poi-ooxml-schemas-3.13-*.jar
*/

public class WordCleanTableRows {

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

  FileInputStream fis = new FileInputStream("document.docx");
  XWPFDocument doc = new XWPFDocument(fis);

  List<XWPFTable> tables = doc.getTables();
  XWPFTable table = tables.get(0);

  XWPFTableRow[] rows = table.getRows().toArray(new XWPFTableRow[0]);
  for (int r = 0; r < rows.length; r++) {
   if (r > 0) {
    XWPFTableRow row = rows[r];
    CTTc[] cells = row.getCtRow().getTcList().toArray(new CTTc[0]);
    for (int c = 0; c < cells.length; c++) {
     CTTc cTTc = cells[c];
     //clear only the paragraphs in the cell, keep cell styles
     cTTc.setPArray(new CTP[] {CTP.Factory.newInstance()});
     cells[c] = cTTc;
    }
    row.getCtRow().setTcArray(cells);
    //System.out.println(row.getCtRow());
   }
  }

  doc.write(new FileOutputStream("new document.docx"));

 }
}

CTRowImpl は poi-ooxml-schemas-3.13-*.jar に完全には同梱されていないため、https: //poi.apache.org/faq.html#faq-N10025 に記載されているように、完全な ooxml-schemas-1.3.jar が必要です。 .

完全な ooxml-schemas-1.3.jar がなければ、最初の行を除くすべての行を削除して新しい行を追加するだけです。

import java.io.FileOutputStream;
import java.io.FileInputStream;

import java.util.List;

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

public class WordCleanTableRows2 {

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

  FileInputStream fis = new FileInputStream("document.docx");
  XWPFDocument doc = new XWPFDocument(fis);

  List<XWPFTable> tables = doc.getTables();
  XWPFTable table = tables.get(0);

  XWPFTableRow[] rows = table.getRows().toArray(new XWPFTableRow[0]);
  for (int r = 0; r < rows.length; r++) {
   if (r > 0) {
    XWPFTableRow row = rows[r];
    table.removeRow(1); //remove second row. others shift upwards
    table.createRow(); //add new row at the end
   }
  }

  doc.write(new FileOutputStream("new document.docx"));

 }
}

編集:

以下は、ooxml-schemas-1.3.jar なしで機能し、最初の例と同じように動作するはずです。

import java.io.FileOutputStream;
import java.io.FileInputStream;

import java.util.List;

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

import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTP;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STOnOff;

import java.math.BigInteger;

public class WordCleanTableRows3 {

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

  FileInputStream fis = new FileInputStream("document.docx");
  XWPFDocument doc = new XWPFDocument(fis);

  List<XWPFTable> tables = doc.getTables();
  XWPFTable table = tables.get(0);

  XWPFTableRow[] rows = table.getRows().toArray(new XWPFTableRow[0]);
  for (int r = 0; r < rows.length; r++) {
   if (r > 0) {
    XWPFTableRow row = rows[r];
    List<XWPFTableCell> cells = row.getTableCells();
    for (XWPFTableCell cell : cells) {
     //get CTTc and replace the CTPArray with one empty CTP
     cell.getCTTc().setPArray(new CTP[] {CTP.Factory.newInstance()});

     //set some default styles for the paragraphs in the cells:
     //http://grepcode.com/file/repo1.maven.org/maven2/org.apache.poi/ooxml-schemas/1.1/org/openxmlformats/schemas/wordprocessingml/x2006/main/CTParaRPr.java  
     CTP cTP = cell.getCTTc().getPArray(0);
     cTP.addNewPPr();
     cTP.getPPr().addNewRPr();
     cTP.getPPr().getRPr().addNewB().setVal(STOnOff.ON);
     cTP.getPPr().getRPr().addNewColor().setVal("FF0000");
     cTP.getPPr().getRPr().addNewSz().setVal(BigInteger.valueOf(40));
    }
   }
  }

  doc.write(new FileOutputStream("new document.docx"));

 }
}

org.openxmlformats.schemas.wordprocessingml.x2006.main.CTP は poi-ooxml-schemas-3.13-*.jar に同梱されています。

于 2016-02-06T08:31:21.627 に答える