Microsoft Excelは大量のデータを保存するために、Microsoft Wordはリッチテキスト文書を作成するために広く使用されています。あなたがWord文書に書式付きテキスト、画像、および他の要素を挿入するために、Word文書にExcelワークブックの情報を追加する必要があることがありますオケージョン。この記事では、無料の Free Spire.Office for Java の助けを借りて、JavaアプリケーションでExcelワークブックをWord文書形式に変換する方法を学びます。
- ExcelをPDFに変換し、そのPDFをWordに変換する
- ExcelをHTMLに変換し、そのHTMLをWordに変換する
- 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を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のワークシート上のすべてのデータを抽出し、それらを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のワークブックを変換する方法についてもっと知りたい場合は、Spire.XLS Forumに移動してください。