Word と Excel ファイルは、使用目的と機能において異なります。Word はエッセイ、メール、手紙、書籍、履歴書、学術論文などのテキスト文書を作成するために主に使用され、テキストのフォーマットが重要です。Excel はデータの保存、テーブルやグラフの作成、複雑な計算を行うために使用されます。
複雑な Word ファイルを Excel スプレッドシートに変換することはお勧めできません。なぜなら、Excel は Word と同じように内容を表示することができないからです。ただし、Wordドキュメントが主にテーブルで構成されており、Excel でテーブルデータを分析したい場合は、Spire.Office for Java を使用して Word を Excel に変換することができます。このコード例では、良好な読みやすさを保ちながら、Word ドキュメントを Excel ファイルに変換します。
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>8.12.0</version>
</dependency>
</dependencies>
Java で Word ドキュメントを Excel ファイルに変換する方法
このシナリオでは、Spire.Office パッケージ内の2つのライブラリ、Spire.Doc for Java と Spire.XLS for Java を使用します。前者は Word ドキュメントからコンテンツを読み取り、抽出するために使用され、後者は Excel ドキュメントを作成し、特定のセルにデータを書き込むために使用されます。このコード例を理解しやすくするために、次の3つのカスタムメソッドを作成しました。
- exportTableInExcel() - Word のテーブルから指定された Excel セルにデータをエクスポートします。
- copyContentInTable() - Word のテーブルセルのコンテンツを Excel のセルにコピーします。
- copyTextAndStyle() - Word の段落からフォーマット付きテキストを Excel のセルにコピーします。
以下の手順は、Spire.Office for Java を使用して Word ドキュメントからワークシートにデータをエクスポートする方法を示しています。
- Document のオブジェクトを作成して Word ファイルをロードします。
- Workbook オブジェクトを作成し、「WordToExcel」という名前のワークシートを追加します。
- Word ドキュメント内のすべてのセクションをトラバースし、特定のセクションの下にあるすべてのドキュメントオブジェクトをトラバースし、ドキュメントオブジェクトが段落かテーブルかを判定します。
- ドキュメントオブジェクトが段落である場合は、coypTextAndStyle() メソッドを使用して指定されたセルに段落を Excel に書き込みます。
- ドキュメントオブジェクトがテーブルである場合は、exportTableInExcel() メソッドを使用して Word から Excel セルにテーブルデータをエクスポートします。
- Excel 内の行の高さと列の幅を自動調整し、セル内のデータがセルの境界を超えないようにします。
- Workbook.saveToFile() メソッドを使用してワークブックを Excel ファイルに保存します。
- Java
import com.spire.doc.*;
import com.spire.doc.documents.Paragraph;
import com.spire.doc.fields.DocPicture;
import com.spire.doc.fields.TextRange;
import com.spire.xls.*;
import java.awt.*;
public class ConvertWordToExcel {
public static void main(String[] args) {
// ドキュメントオブジェクトを作成します
Document doc = new Document();
// Wordファイルをロードします
doc.loadFromFile("サンプル.docx");
// ワークブックオブジェクトを作成します
Workbook wb = new Workbook();
// デフォルトのワークシートを削除します
wb.getWorksheets().clear();
// "WordToExcel"という名前のワークシートを作成します
Worksheet worksheet = wb.createEmptySheet("WordToExcel");
int row = 1;
int column = 1;
// Wordドキュメント内のセクションをループします
for (int i = 0; i < doc.getSections().getCount(); i++) {
// 特定のセクションを取得します
Section section = doc.getSections().get(i);
// 特定のセクションの下にあるドキュメントオブジェクトをループします
for (int j = 0; j < section.getBody().getChildObjects().getCount(); j++) {
// 特定のドキュメントオブジェクトを取得します
DocumentObject documentObject = section.getBody().getChildObjects().get(j);
// オブジェクトが段落かどうかを判断します
if (documentObject instanceof Paragraph) {
CellRange cell = worksheet.getCellRange(row, column);
Paragraph paragraph = (Paragraph) documentObject;
// Wordから特定のセルに段落をコピーします
copyTextAndStyle(cell, paragraph);
row++;
}
// オブジェクトがテーブルかどうかを判断します
if (documentObject instanceof Table) {
Table table = (Table) documentObject;
// WordからExcelにテーブルデータをエクスポートします
int currentRow = exportTableInExcel(worksheet, row, table);
row = currentRow;
}
}
}
// セル内のテキストを折り返します
worksheet.getAllocatedRange().isWrapText(true);
// 行の高さと列の幅を自動調整します
worksheet.getAllocatedRange().autoFitRows();
worksheet.getAllocatedRange().autoFitColumns();
worksheet.setColumnWidth(1, 30);
// ワークブックをExcelファイルに保存します
wb.saveToFile("output/WordをExcelに変換.xlsx", ExcelVersion.Version2016);
}
// WordのテーブルからExcelのセルにデータをエクスポートします
private static int exportTableInExcel(Worksheet worksheet, int row, Table table) {
CellRange cell;
int column;
for (int i = 0; i < table.getRows().getCount(); i++) {
column = 1;
TableRow tbRow = table.getRows().get(i);
for (int j = 0; j < tbRow.getCells().getCount(); j++) {
TableCell tbCell = tbRow.getCells().get(j);
cell = worksheet.getCellRange(row, column);
cell.borderAround(LineStyleType.Thin, Color.BLACK);
copyContentInTable(tbCell, cell);
column++;
}
row++;
}
return row;
}
// WordのテーブルセルからExcelのセルにコンテンツをコピーします
private static void copyContentInTable(TableCell tbCell, CellRange cell) {
Paragraph newPara = new Paragraph(tbCell.getDocument());
for (int i = 0; i < tbCell.getChildObjects().getCount(); i++) {
DocumentObject documentObject = tbCell.getChildObjects().get(i);
if (documentObject instanceof Paragraph) {
Paragraph paragraph = (Paragraph) documentObject;
for (int j = 0; j < paragraph.getChildObjects().getCount(); j++) {
DocumentObject cObj = paragraph.getChildObjects().get(j);
newPara.getChildObjects().add(cObj.deepClone());
}
if (i < tbCell.getChildObjects().getCount() - 1) {
newPara.appendText("\n");
}
}
}
copyTextAndStyle(cell, newPara);
}
// 段落のテキストとスタイルをセルにコピーします
private static void copyTextAndStyle(CellRange cell, Paragraph paragraph) {
RichText richText = cell.getRichText();
richText.setText(paragraph.getText());
int startIndex = 0;
for (int i = 0; i < paragraph.getChildObjects().getCount(); i++) {
DocumentObject documentObject = paragraph.getChildObjects().get(i);
if (documentObject instanceof TextRange) {
TextRange textRange = (TextRange) documentObject;
String fontName = textRange.getCharacterFormat().getFontName();
boolean isBold = textRange.getCharacterFormat().getBold();
Color textColor = textRange.getCharacterFormat().getTextColor();
float fontSize = textRange.getCharacterFormat().getFontSize();
String textRangeText = textRange.getText();
int strLength = textRangeText.length();
ExcelFont font = new ExcelFont(cell.getWorksheet().getWorkbook().createFont());
font.setColor(textColor);
font.isBold(isBold);
font.setSize(fontSize);
font.setFontName(fontName);
int endIndex = startIndex + strLength;
richText.setFont(startIndex, endIndex, font);
startIndex += strLength;
}
if (documentObject instanceof DocPicture) {
DocPicture picture = (DocPicture) documentObject;
cell.getWorksheet().getPictures().add(cell.getRow(), cell.getColumn(), picture.getImage());
cell.getWorksheet().setRowHeightInPixels(cell.getRow(), 1, picture.getImage().getHeight());
}
}
switch (paragraph.getFormat().getHorizontalAlignment()) {
case Left:
cell.setHorizontalAlignment(HorizontalAlignType.Left);
break;
case Center:
cell.setHorizontalAlignment(HorizontalAlignType.Center);
break;
case Right:
cell.setHorizontalAlignment(HorizontalAlignType.Right);
break;
}
}
}
一時ライセンスを申請する
結果ドキュメントから評価メッセージを削除したい場合、または機能制限を取り除く場合は、についてこのメールアドレスはスパムボットから保護されています。閲覧するにはJavaScriptを有効にする必要があります。にお問い合わせ、30 日間有効な一時ライセンスを取得してください。