Spire.Doc for Java で提供される Table.applyVerticalMerge() メソッドと Table.applyHorizontalMerge() メソッドは、それぞれ表のセルを垂直に結合するときと水平に結合するときに使用されます。デフォルトでは、結合するセルに同じ値が複数含まれている場合、結合後のセルにもこれらの重複した値が含まれます。表をより明瞭にするために、重複した値を削除することができます。この記事では、Spire.Doc for Java を使用して Word でセルを結合する際に重複した値を削除する方法を示します。
Spire.Doc for Java をインストールします
まず、Spire.Doc for Java を Java プロジェクトに追加する必要があります。JAR ファイルは、このリンクからダウンロードできます。Maven を使用する場合は、次のコードをプロジェクトの pom.xml ファイルに追加する必要があります。
<repositories>
<repository>
<id>com.e-iceblue</id>
<name>e-iceblue</name>
<url> https://repo.e-iceblue.com/nexus/content/groups/public/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>e-iceblue</groupId>
<artifactId>spire.doc</artifactId>
<version>11.10.3</version>
</dependency>
</dependencies>
Word でセルを結合する際に重複した値を削除する
セルを結合するときに重複した値を削除するには、mergeCell(Table table, boolean isHorizontalMerge, int index, int start, int end) のカスタムメソッドを作成します。このメソッドでは、結合された範囲内の最初のセルの値が範囲内の他のセルの値と同じかどうかを判断します。それらが同じである場合は、他のセルの値を削除してからセルを結合します。詳細な手順は次のとおりです。
- Document クラスのオブジェクトを作成します。
- Document.loadFromFile() メソッドを使用して、サンプルドキュメントを読み込みます。
- Document.getSections() メソッドを使用してセクション・コレクションを取得し、SectionCollection.get() メソッドを使用して特定のセクションを取得します。
- Section.getTables() メソッドを使用してテーブル・コレクションを取得し、TableCollection.get() メソッドを使用して目的のテーブルを取得します。
- mergeCell(Table table, boolean isHorizontalMerge, int index, int start, int end) メソッドを呼び出して、テーブルのセルを水平または垂直に結合し、重複する値を削除します。
- Document.saveToFile() メソッドを使用して、結果ファイルに保存します。
- Java
import com.spire.doc.*;
public class MergeCells {
public static void main(String[] args) throws Exception {
//Documentクラスのオブジェクトを作成し、サンプルドキュメントを読み込む
Document document = new Document();
document.loadFromFile("Sample.docx");
//最初のセクションを取得する
Section section = document.getSections().get(0);
//最初のテーブルを取得する
Table table = section.getTables().get(0);
//セルを垂直方向に結合する
mergeCell(table, false, 0, 1, 2);
//セルを水平方向に結合する
mergeCell(table, true, 0, 3, 4);
//結果ファイルを保存する
document.saveToFile("MergeTable.docx",FileFormat.Docx_2013);
document.dispose(); }
//セルを結合する際に重複した値を削除する
public static void mergeCell(Table table, boolean isHorizontalMerge, int index, int start, int end) {
if (isHorizontalMerge) {
//テーブルから特定のセルを取得する
TableCell firstCell = table.get(index, start);
//セルからテキストを取得する
String firstCellText = getCellText(firstCell);
for (int i = start + 1; i <= end; i++) {
TableCell cell1 = table.get(index, i);
//テキストが最初のセルと同じかどうかを確認する
if (firstCellText.equals(getCellText(cell1))) {
//「はい」の場合、セル内のすべての段落をクリアする
cell1.getParagraphs().clear(); }
}
//セルを水平方向に結合する
table.applyHorizontalMerge(index, start, end); }
else {
TableCell firstCell = table.get(start, index);
String firstCellText = getCellText(firstCell);
for (int i = start + 1; i <= end; i++) {
TableCell cell1 = table.get(i, index);
if (firstCellText.equals(getCellText(cell1))) {
cell1.getParagraphs().clear();
}
}
//セルを垂直方向に結合する
table.applyVerticalMerge(index, start, end);
}
}
public static String getCellText(TableCell cell) {
StringBuilder text = new StringBuilder();
//セルのすべての段落をループする
for (int i = 0; i < cell.getParagraphs().getCount(); i++) {
//すべての段落のテキストを取得し、StringBuilder に追加する
text.append(cell.getParagraphs().get(i).getText().trim()); }
return text.toString();
}
}
一時ライセンスを申請する
結果ドキュメントから評価メッセージを削除したい場合、または機能制限を取り除く場合は、についてこのメールアドレスはスパムボットから保護されています。閲覧するにはJavaScriptを有効にする必要があります。にお問い合わせ、30 日間有効な一時ライセンスを取得してください。