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