0
0

More than 1 year has passed since last update.

JavaでExcelをWordに変換する方法

Last updated at Posted at 2022-11-11

Microsoft Excelは大量のデータを保存するために、Microsoft Wordはリッチテキスト文書を作成するために広く使用されています。あなたがWord文書に書式付きテキスト、画像、および他の要素を挿入するために、Word文書にExcelワークブックの情報を追加する必要があることがありますオケージョン。この記事では、無料の Free Spire.Office for Java の助けを借りて、JavaアプリケーションでExcelワークブックをWord文書形式に変換する方法を学びます。

【依存関係の追加】

この方法は、無料のFree Spire.Office for Javaが必要ですので、先にjarファイルをインポートしてください。

1. Maven

Maven を使用している場合、プロジェクトの pom.xml ファイルに以下のコードを追加することで、簡単にアプリケーションに JAR ファイルをインポートすることができます。

<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.free</artifactId>
        <version>5.3.1</version>
    </dependency>
</dependencies>

2. 公式サイトよりJarファイルをダウンロード

まず、Free Spire.Doc for Java の公式サイトよりzipファイルをダウンロードします。zipファイルを解凍し、libフォルダの下にあるSpire.Doc.jarファイルを依存関係としてプロジェクトにインポートしてください。

ExcelをPDFに変換し、そのPDFをWordに変換する

Spire.Officeを使って、Excelワークブック全体をPDFに変換し、そのPDFをWord文書として保存することができます。このように、ExcelからWordへの変換は数行のコードで済みます。

詳細な手順は以下の通りです。

  • Workbook クラスオブジェクトを作成し、Workbook.loadFromFile() メソッドでExcelドキュメントを読み込みます。
  • Workbook.getConverterSetting() メソッドが返す ConverterSetting クラスの下のメソッドを使用して、ExcelワークブックをPDFに変換するオプションを設定します。
  • Workbook.saveToFile() メソッドを使用して、Excelワークブック全体をPDFに変換します。
  • PdfDocument クラスのオブジェクトを作成し、PdfDocument.loadFromFile() メソッドを使って変換されたPDFファイルを読み込みます。
  • PdfDocument.saveToFile() メソッドを使用して、PDFファイルをWordドキュメントに変換します。

Java

import com.spire.pdf.PdfDocument;
import com.spire.xls.*;

import java.nio.file.Files;
import java.nio.file.Path;

public class convertExcelToWord {

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

        //Workbookクラスのインスタンスを作成し、Excelワークブックを読み込む
        Workbook workbook = new Workbook();
        workbook.loadFromFile("在庫・受注情報.xlsx");

        //ExcelからPDFへの変換オプションを設定する
        workbook.getConverterSetting().setSheetFitToPage(true);

        //ExcelワークブックをPDF文書に保存する
        String path = "PDF.pdf";
        workbook.saveToFile(path, com.spire.xls.FileFormat.PDF);

        //PdfDocumentクラスのインスタンスを作成し、変換されたPDF文書を読み込む
        PdfDocument pdf = new PdfDocument();
        pdf.loadFromFile(path);

        //PDF文書をWord文書に保存する
        pdf.saveToFile("ExcelからWordへの変換.docx", com.spire.pdf.FileFormat.DOCX);
        Files.delete(Path.of(path));
    }
}

【変換されたWord文書】

ExcelをPDFに変換し、そのPDFをWordに変換する

ExcelをHTMLに変換し、そのHTMLをWordに変換する

また、Spire.Officeを使用して、特定のExcelワークシートをHTMLファイルに変換し、このHTMLファイルをWord文書として保存することも可能です。

以下は、その詳細な手順です。

  • Workbook クラスのオブジェクトを作成し、Workbook.loadFromFile() メソッドでExcelファイルを読み込む。
  • Workbook.getWorksheets().get() メソッドで、特定のワークシートを取得します。
  • ExcelからHTMLへの変換オプションを設定します。
  • Worksheet.saveToHtml() メソッドを使用して、ExcelファイルをHTMLファイルに保存します。
  • Document クラスのインスタンスを作成し、Document.loadFromFile() メソッドで変換されたHTMLを読み込みます。
  • Document.saveToFile() メソッドを使用してWord文書を保存します。

Java

import com.spire.doc.Document;
import com.spire.doc.FileFormat;
import com.spire.doc.documents.XHTMLValidationType;
import com.spire.xls.Workbook;
import com.spire.xls.Worksheet;

import java.nio.file.Files;
import java.nio.file.Path;

public class convertExcelToWord {

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

        //Workbookクラスのインスタンスを作成し、Excelワークブックを読み込む
        Workbook workbook = new Workbook();
        workbook.loadFromFile("在庫・受注情報.xlsx");

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

        //ExcelからHTMLへの変換オプションを設定する
        worksheet.getAllocatedRange().autoFitColumns();
        worksheet.getAllocatedRange().autoFitRows();

        //ExcelワークシートをHTMLに保存する
        String path = "HTML.html";
        worksheet.saveToHtml(path);

        //Documentクラスのインスタンスを作成し、変換されたHTMLファイルを読み込む
        Document document = new Document();
        document.loadFromFile(path, FileFormat.Html, XHTMLValidationType.None);

        //HTMLファイルをWordドキュメントに保存する
        document.saveToFile("ExcelからWordへの変換2.docx",FileFormat.Docx_2013);
        Files.delete(Path.of(path));
    }
}

【変換されたWord文書】

ExcelをHTMLに変換し、そのHTMLをWordに変換する

Excelのワークシート上のすべてのデータを抽出し、それらをWordに追加する

Spire.Officeを使用して、Excelワークブック上のデータ、画像、スタイルをすべてExtractし、すべての要素をワードテーブルに追加することができます。

詳細は以下の通りです。

  • Workbook クラスオブジェクトを作成し、Workbook.loadFromFile() メソッドでExcelファイルを読み込みます。
  • Workbook.getWorksheets().get() メソッドで特定のワークシートを取得する。
  • Document オブジェクトを作成し、それにセクションを追加します。
  • Section.addTable() メソッドで表を追加します。
  • ExcelPicture.getPicture() メソッドでExcelから画像を取り出し、画像の高さと幅を取得します。
  • Wordの表のセルに画像を追加し、画像の幅と高さを設定します。
  • ワークシート内のマージされたセルを検出し、カスタムメソッド mergeCells() を使用してワードテールの対応するセルをマージします。
  • CellRange.getValue() メソッドを使用して特定のExcelセルの値を取得し、TableCell.addParagraph().appendText() メソッドを使用してWordの表のセルにそれを追加します。
  • カスタムメソッド copyStyle() を使用して、ExcelからWordの表にフォントスタイルとセルスタイルをコピーします。
  • Document.saveToFile() メソッドでドキュメントを保存します。

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.Paragraph;
import com.spire.doc.documents.VerticalAlignment;
import com.spire.doc.fields.DocPicture;
import com.spire.doc.fields.TextRange;
import com.spire.xls.*;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;

public class convertExcelToWord {

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

        //Workbookクラスのインスタンスを作成し、Excelワークブックを読み込む
        Workbook workbook = new Workbook();
        workbook.loadFromFile("在庫・受注情報1.xlsx");

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

        //Documentクラスのインスタンスを作成し、それにセクションを追加する
        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);

                //ワークシートセルの値を取得し、Wordの表のセルに追加する
                TextRange textRange = wCell.addParagraph().appendText(xCell.getValue());

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

        //Excelから画像を抽出する
        ExcelPicture pic = sheet.getPictures().get(0);
        BufferedImage loImage = pic.getPicture();
        ImageIO.write(loImage,"png",new File("画像.png"));

        //画像を読み込み、その幅と高さを取得する
        File file = new File("画像.png");
        FileInputStream inputStream = new FileInputStream(file);
        BufferedImage image = ImageIO.read(file);
        int width= image.getWidth();
        int height = image.getHeight();

        //ワードテーブルのセルに画像を追加し、幅と高さを設定する
        Paragraph paragraph = table.getRows().get(0).getCells().get(0).getParagraphs().get(0);
        DocPicture picture = paragraph.appendPicture(inputStream);
        picture.setWidth(width);
        picture.setHeight(height);

        //ドキュメントを保存する
        doc.saveToFile("ExcelからWordへの変換3.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;
        }
    }
}

【変換されたWord文書】

Excelのワークシート上のすべてのデータを抽出し、それらをWordに追加する

この記事を読むと、ExcelワークブックをWord文書に変換する方法を知ることができます。あなたはまだいくつかの問題があるか、またはExcelのワークブックを変換する方法についてもっと知りたい場合は、Spire.XLS Forumに移動してください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0