チュートリアル

簡単にライブラリーを使用するためのチュートリアルコレクション

チュートリアル»Java»Spire.XLS for Java»変換»Java:フォーマットされた Excel データを Word テーブルにエクスポートする方法
2022-10-31

Java:フォーマットされた Excel データを Word テーブルにエクスポートする方法

Word でレポートを作成するときは、Excel からデータをコピーして Word に貼り付ける必要があることがよくあります。これにより、Excel ドキュメントを開くことなく、読者が Word でデータを直接参照できます。この記事では、Spire.Office for Java を使用してフォーマットされた Excel データを Word テーブルにエクスポートする方法を紹介します。

Spire.Office for Java をインストールします

まず、Spire.Office 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.office</artifactId>
        <version>7.10.4</version>
    </dependency>
</dependencies>

フォーマットされた Excel データを Word テーブルにエクスポートする方法

Spire.Office for Java を使用してフォーマットされた Excel データを Word テーブルにエクスポートする手順を次に示します。

  • Workbook オブジェクトを作成し、Workbook.loadFromFile() メソッドを使用して Excel サンプルファイルをロードします。
  • Workbook.getWorksheets().get() メソッドを使用して特定のワークシートを取得します。
  • Document オブジェクトを作成し、セクションを追加します。
  • Section.addTable() メソッドを使用してテーブルを追加します。
  • ワークシート内の結合セルを検出し、カスタム・メソッド mergeCells() を使用して Word tale 内の対応するセルを結合します。
  • CellRange.getValue() メソッドを使用して特定の Excel セルの値を取得し、TableCell.addParagraph().appendText() メソッドを使用して Word テーブルのセルに追加します。
  • カスタムメソッド copyStyle() を使用して、Excel から Word テーブルにフォントスタイルとセルスタイルをコピーします。
  • Document.saveToFile() メソッドを使用して、Word ファイルに保存します。
  • Java
import com.spire.doc.*;
import com.spire.doc.FileFormat;
import com.spire.doc.documents.HorizontalAlignment;
import com.spire.doc.documents.PageOrientation;
import com.spire.doc.documents.VerticalAlignment;
import com.spire.doc.fields.TextRange;
import com.spire.xls.*;

public class ExportExcelToWord {

    public static void main(String[] args) {

        //Excelファイルをダウンロードする
        Workbook workbook = new Workbook();
        workbook.loadFromFile("C:/Users/Administrator/Desktop/sample.xlsx");

        //最初のシートを取得する
        Worksheet sheet = workbook.getWorksheets().get(0);

        //Wordドキュメントを作成する
        Document doc = new Document();
        Section section = doc.addSection();
        section.getPageSetup().setOrientation(PageOrientation.Landscape);

        //テーブルを追加する
        Table table = section.addTable(true);
        table.resetCells(sheet.getLastRow(), sheet.getLastColumn());

        //セルをマージする
        mergeCells(sheet, table);

        for (int r = 1; r <= sheet.getLastRow(); r++) {

            //行の高さを設定する
            table.getRows().get(r - 1).setHeight((float) sheet.getRowHeight(r));

            for (int c = 1; c <= sheet.getLastColumn(); c++) {
                CellRange xCell = sheet.getCellRange(r, c);
                TableCell wCell = table.get(r - 1, c - 1);

                //特定のExcelセルの値を取得してWordテーブルセルに追加する
                TextRange textRange = wCell.addParagraph().appendText(xCell.getValue());

                //ExcelからフォントとセルスタイルをWordにコピーする
                copyStyle(textRange, xCell, wCell);
            }
        }

        // Wordファイルに保存する
        doc.saveToFile("ExportToWord.docx", FileFormat.Docx);
    }

    //マージされた領域がある場合は、セルをマージする
    private static void mergeCells(Worksheet sheet, Table table) {
        if (sheet.hasMergedCells()) {

            //Excelからマージされたセル範囲を取得する
            CellRange[] ranges = sheet.getMergedCells();
            for (int i = 0; i < ranges.length; i++) {
                int startRow = ranges[i].getRow();
                int startColumn = ranges[i].getColumn();
                int rowCount = ranges[i].getRowCount();
                int columnCount = ranges[i].getColumnCount();

                // Wordテーブルの対応するセルを結合する
                if (rowCount > 1 && columnCount > 1) {
                    for (int j = startRow; j <= startRow + rowCount ; j++) {
                        table.applyHorizontalMerge(j - 1, startColumn - 1, startColumn - 1 + columnCount - 1);
                    }
                    table.applyVerticalMerge(startColumn - 1, startRow - 1, startRow - 1 + rowCount - 1 );
                }
                if (rowCount > 1 && columnCount == 1 ) {
                     table.applyVerticalMerge(startColumn - 1, startRow - 1, startRow - 1 + rowCount - 1);
                }
                if (columnCount > 1 && rowCount == 1 ) {
                    table.applyHorizontalMerge(startRow - 1, startColumn - 1,  startColumn - 1 + columnCount-1);
                }
            }
        }
    }

    // ExcelセルスタイルをWordテーブルにコピーする
    private static void copyStyle(TextRange wTextRange, CellRange xCell, TableCell wCell) {

        //フォントスタイルをコピーする
        wTextRange.getCharacterFormat().setTextColor(xCell.getStyle().getFont().getColor());
        wTextRange.getCharacterFormat().setFontSize((float) xCell.getStyle().getFont().getSize());
        wTextRange.getCharacterFormat().setFontName(xCell.getStyle().getFont().getFontName());
        wTextRange.getCharacterFormat().setBold(xCell.getStyle().getFont().isBold());
        wTextRange.getCharacterFormat().setItalic(xCell.getStyle().getFont().isItalic());

        //背景色をコピーする
        wCell.getCellFormat().setBackColor(xCell.getStyle().getColor());

        //水平方向の配置をコピーする
        switch (xCell.getHorizontalAlignment()) {
            case Left:
                wTextRange.getOwnerParagraph().getFormat().setHorizontalAlignment(HorizontalAlignment.Left);
                break;
            case Center:
                wTextRange.getOwnerParagraph().getFormat().setHorizontalAlignment(HorizontalAlignment.Center);
                break;
            case Right:
                wTextRange.getOwnerParagraph().getFormat().setHorizontalAlignment(HorizontalAlignment.Right);
                break;
        }
        
        //垂直方向の配置をコピーする
        switch (xCell.getVerticalAlignment()) {
            case Bottom:
                wCell.getCellFormat().setVerticalAlignment(VerticalAlignment.Bottom);
                break;
            case Center:
                wCell.getCellFormat().setVerticalAlignment(VerticalAlignment.Middle);
                break;
            case Top:
                wCell.getCellFormat().setVerticalAlignment(VerticalAlignment.Top);
                break;
        }
    }
}

Java:フォーマットされた Excel データを Word テーブルにエクスポートする方法

一時ライセンスを申請する

結果ドキュメントから評価メッセージを削除したい場合、または機能制限を取り除く場合は、についてこのメールアドレスはスパムボットから保護されています。閲覧するにはJavaScriptを有効にする必要があります。にお問い合わせ、30 日間有効な一時ライセンスを取得してください。

Read 745 times