チュートリアル

簡単にライブラリーを使用するためのチュートリアルコレクション

チュートリアル».NET»Spire.XLS for .NET»変換»C#/VB.NET:フォーマットされた Excel データを Word テーブルに変換する方法
2022-11-01

C#/VB.NET:フォーマットされた Excel データを Word テーブルに変換する方法

会社の毎月の支出に関する 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

C#/VB.NET:フォーマットされた Excel データを Word テーブルに変換する方法

一時ライセンスを申請する

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

Read 596 times