会社の毎月の支出に関する Word レポートを作成するときは、Excel の財務データをそのレポートにコピーできます。これにより、別の Excel ドキュメントを開くことなく、レポート内の関連データを直接表示できます。この記事では、Spire.Office for .NET を使用して、C# および VB.NET でプログラムによってフォーマットされた Excel データを Word テーブルに変換する方法を紹介します。
Spire.Office for .NET をインストールします
まず、Spire.Office for .NET パッケージに含まれている DLL ファイルを .NET プロジェクトの参照として追加する必要があります。DLL ファイルは、このリンクからダウンロードするか、NuGet を介してインストールできます。
PM> Install-Package Spire.Office
フォーマットされた Excel データを Word テーブルに変換する
Spire.Office for .NET を使用してフォーマットされた Excel データを Word テーブルにエクスポートする手順を次に示します。
- Workbook オブジェクトを作成し、Workbook.LoadFromFile() メソッドを使用してサンプルドキュメントをロードします。
- Workbook.Worksheets[index] プロパティを通じて、特定のワークシートを取得します。
- Document オブジェクトを作成し、セクションを追加します。
- Section.AddTable() メソッドを使用してテーブルを追加します。
- ワークシート内のマージセルを検出し、カスタム・メソッド MergeCells() を使用して Word tale 内の対応するセルをマージします。
- CellRange.Value プロパティを使用して特定の Excel セルの値を取得し、TableCell.AddParagraph().AppendText() メソッドを使用して Word テーブルのセルに追加します。
- カスタムメソッド CopyStyle() を使用して、Excel から Word テーブルにフォントスタイルとセルスタイルをコピーします。
- Document.SaveToFile() メソッドを使用して、Word ファイルに保存します。
- C#
- VB.NET
using Spire.Doc;
using Spire.Doc.Documents;
using Spire.Doc.Fields;
using Spire.Xls;
namespace ConvertExcelToWord
{
internal class Program
{
static void Main(string[] args)
{
//Excelファイルをダウンロードする
Workbook workbook = new Workbook();
workbook.LoadFromFile(@"C:\Users\Administrator\Desktop\sample.xlsx");
//最初のシートを取得する
Worksheet sheet = workbook.Worksheets[0];
//Wordドキュメントを作成する
Document doc = new Document();
Section section = doc.AddSection();
section.PageSetup.Orientation = PageOrientation.Landscape;
//テーブルを追加する
Table table = section.AddTable(true);
table.ResetCells(sheet.LastRow, sheet.LastColumn);
//セルをマージする
MergeCells(sheet, table);
for (int r = 1; r <= sheet.LastRow; r++)
{
//行の高さを設定する
table.Rows[r - 1].Height = (float)sheet.Rows[r - 1].RowHeight;
for (int c = 1; c <= sheet.LastColumn; c++)
{
CellRange xCell = sheet.Range[r, c];
TableCell wCell = table.Rows[r - 1].Cells[c - 1];
//ExcelからWordテーブルにデータをエクスポートする
TextRange textRange = wCell.AddParagraph().AppendText(xCell.NumberText);
//ExcelからフォントとセルスタイルをWordにコピーする
CopyStyle(textRange, xCell, wCell);
}
}
//Wordファイルに保存する
doc.SaveToFile("ExportToWord.docx", Spire.Doc.FileFormat.Docx);
}
//次の条件を満たす場合は、セルをマージする
private static void MergeCells(Worksheet sheet, Table table)
{
if (sheet.HasMergedCells)
{
//Excelからマージされたセル範囲を取得する
CellRange[] ranges = sheet.MergedCells;
//Wordテーブル内の対応するセルをマージする
for (int i = 0; i < ranges.Length; i++)
{
int startRow = ranges[i].Row;
int startColumn = ranges[i].Column;
int rowCount = ranges[i].RowCount;
int columnCount = ranges[i].ColumnCount;
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.CharacterFormat.TextColor = xCell.Style.Font.Color;
wTextRange.CharacterFormat.FontSize = (float)xCell.Style.Font.Size;
wTextRange.CharacterFormat.FontName = xCell.Style.Font.FontName;
wTextRange.CharacterFormat.Bold = xCell.Style.Font.IsBold;
wTextRange.CharacterFormat.Italic = xCell.Style.Font.IsItalic;
//背景色をコピーする
wCell.CellFormat.BackColor = xCell.Style.Color;
//水平方向の配置をコピーする
switch (xCell.HorizontalAlignment)
{
case HorizontalAlignType.Left:
wTextRange.OwnerParagraph.Format.HorizontalAlignment = HorizontalAlignment.Left;
break;
case HorizontalAlignType.Center:
wTextRange.OwnerParagraph.Format.HorizontalAlignment = HorizontalAlignment.Center;
break;
case HorizontalAlignType.Right:
wTextRange.OwnerParagraph.Format.HorizontalAlignment = HorizontalAlignment.Right;
break;
}
//垂直方向の配置をコピーする
switch (xCell.VerticalAlignment)
{
case VerticalAlignType.Bottom:
wCell.CellFormat.VerticalAlignment = VerticalAlignment.Bottom;
break;
case VerticalAlignType.Center:
wCell.CellFormat.VerticalAlignment = VerticalAlignment.Middle;
break;
case VerticalAlignType.Top:
wCell.CellFormat.VerticalAlignment = VerticalAlignment.Top;
break;
}
}
}
}
Imports Spire.Doc
Imports Spire.Doc.Documents
Imports Spire.Doc.Fields
Imports Spire.Xls
Namespace ConvertExcelToWord
Friend Class Program
static void Main(string() args)
{
'Excelファイルをダウンロードする
Dim workbook As Workbook = New Workbook()
workbook.LoadFromFile("C:\Users\Administrator\Desktop\sample.xlsx")
'最初のシートを取得する
Dim sheet As Worksheet = workbook.Worksheets(0)
'Wordドキュメントを作成する
Document doc = New Document()
Dim section As Section = doc.AddSection()
section.PageSetup.Orientation = PageOrientation.Landscape
'テーブルを追加する
Dim table As Table = section.AddTable(True)
table.ResetCells(sheet.LastRow, sheet.LastColumn)
'セルをマージする
MergeCells(sheet, table)
Dim r As Integer
For r = 1 To sheet.LastRow Step r + 1
'行の高さを設定する
table.Rows(r - 1).Height = CType(sheet.Rows(r - 1).RowHeight, single)
Dim c As Integer
For c = 1 To sheet.LastColumn Step c + 1
Dim xCell As CellRange = sheet.Range(r,c)
Dim wCell As TableCell = table.Rows(r - 1).Cells(c - 1)
'ExcelからWordテーブルにデータをエクスポートする
Dim textRange As TextRange = wCell.AddParagraph().AppendText(xCell.NumberText)
'ExcelからフォントとセルスタイルをWordにコピーする
CopyStyle(textRange, xCell, wCell)
Next
Next
'Wordファイルに保存する
doc.SaveToFile("ExportToWord.docx", Spire.Doc.FileFormat.Docx)
}
'次の条件を満たす場合は、セルをマージする
private static void MergeCells(Worksheet sheet, Table table)
{
if (sheet.HasMergedCells)
{
'Excelからマージされたセル範囲を取得する
Dim ranges() As CellRange = sheet.MergedCells
'Wordテーブル内の対応するセルをマージする
Dim i As Integer
For i = 0 To ranges.Length- 1 Step i + 1
Dim startRow As Integer = ranges(i).Row
Dim startColumn As Integer = ranges(i).Column
Dim rowCount As Integer = ranges(i).RowCount
Dim columnCount As Integer = ranges(i).ColumnCount
if (rowCount > 1 And columnCount > 1)
{
Dim j As Integer
For j = startRow To startRow + rowCount Step j + 1
table.ApplyHorizontalMerge(j - 1, startColumn - 1, startColumn - 1 + columnCount - 1)
Next
table.ApplyVerticalMerge(startColumn - 1, startRow - 1, startRow - 1 + rowCount -1)
}
if (rowCount > 1 And columnCount = 1)
{
table.ApplyVerticalMerge(startColumn - 1, startRow - 1, startRow - 1 + rowCount -1)
}
if (columnCount > 1 And rowCount = 1)
{
table.ApplyHorizontalMerge(startRow - 1, startColumn - 1, startColumn - 1 + columnCount - 1)
}
Next
}
}
' ExcelセルスタイルをWordテーブルにコピーする
private static void CopyStyle(TextRange wTextRange, CellRange xCell, TableCell wCell)
{
'フォントスタイルをコピーする
wTextRange.CharacterFormat.TextColor = xCell.Style.Font.Color
wTextRange.CharacterFormat.FontSize = CType(xCell.Style.Font.Size, single)
wTextRange.CharacterFormat.FontName = xCell.Style.Font.FontName
wTextRange.CharacterFormat.Bold = xCell.Style.Font.IsBold
wTextRange.CharacterFormat.Italic = xCell.Style.Font.IsItalic
'背景色をコピーする
wCell.CellFormat.BackColor = xCell.Style.Color
'水平方向の配置をコピーする
Select Case xCell.HorizontalAlignment
Case HorizontalAlignType.Left
wTextRange.OwnerParagraph.Format.HorizontalAlignment = HorizontalAlignment.Left
Exit For
Case HorizontalAlignType.Center
wTextRange.OwnerParagraph.Format.HorizontalAlignment = HorizontalAlignment.Center
Exit For
Case HorizontalAlignType.Right
wTextRange.OwnerParagraph.Format.HorizontalAlignment = HorizontalAlignment.Right
Exit For
End Select
'垂直方向の配置をコピーする
Select Case xCell.VerticalAlignment
Case VerticalAlignType.Bottom
wCell.CellFormat.VerticalAlignment = VerticalAlignment.Bottom
Exit For
Case VerticalAlignType.Center
wCell.CellFormat.VerticalAlignment = VerticalAlignment.Middle
Exit For
Case VerticalAlignType.Top
wCell.CellFormat.VerticalAlignment = VerticalAlignment.Top
Exit For
End Select
}
End Class
一時ライセンスを申請する
結果ドキュメントから評価メッセージを削除したい場合、または機能制限を取り除く場合は、についてこのメールアドレスはスパムボットから保護されています。閲覧するにはJavaScriptを有効にする必要があります。にお問い合わせ、30 日間有効な一時ライセンスを取得してください。