Excelテーブルの形式を残してWordにコピーする方法

Wordの.DocドキュメントもExcelの.Xlsドキュメントも、日常の仕事には不可欠なファイルとして、人々は毎日それらを使っています。そして、常にExcelの内容をWordに導入するとか、または逆があります。今回はExcelテーブルの形式を残して、Wordにコピーする方法を紹介します。

これを実現するには、Spire.Officeというコンポーネントが必要です。Spire.Officeとは、エンタープライズ級のOfficeコンポーネントであり、Spire.Doc、Spire.XLS、 Spire.Spreadsheet、Spire.Presentation、Spire.PDF、Spire.DataExport、Spire.OfficeViewer、Spire.PDFViewer、Spire.DocViewerとSpire.BarCodeなどのコンポーネントを含まれています。それを使用すると、.NETアプリケーションで、Officeドキュメント、PDFドキュメントの表示、操作、変換、印刷、バーコードの作成、データのインポートとエクスポートなどの作業を行うことができます。ExcelテーブルをWordにコピーするには、Spire.DocとSpire.Xlsが使われます。

まずは、Spire.Officeをダウンロードしてインストールします、それからVisual Studioを開き、新しいプロジェクトを作成して、参照にSpire.Doc.dllとSpire.Xls.dllを追加します。必要とする名前空間は以下のようになります:

using Spire.Doc;

using Spire.Doc.Documents;

using Spire.Doc.Fields;

using Spire.Xls;

そして詳細な手順を紹介します:

ステップ1 システムからExcelドキュメントをロードして1番目のワークシートを取得する

Workbook workbook = new Workbook();

workbook.LoadFromFile("DatatableSample.xlsx");

Worksheet sheet = workbook.Worksheets[0];

ステップ2 新しいWordドキュメントを作成してテーブルを添加し、その行数と列数はExcelのテーブルと一致にする

Document doc = new Document();

//テーブルを添加する

Table table = doc.AddSection().AddTable(true);

//行数と列数を設置する

table.ResetCells(sheet.LastRow, sheet.LastColumn);

ステップ3  ExcelテーブルのデータをWordテーブルに書き込み、カスタムメソッドCopyStyle()を使用して、Excelテーブルの形式をWordテーブルにコピーする

for (int r = 1; r <= sheet.LastRow; r++)

            {

                for (int c = 1; c <= sheet.LastColumn; c++)

                {

                    CellRange xCell = sheet.Range[r, c];

                    TableCell wCell = table.Rows[r - 1].Cells[c - 1];

                    //データをWordテーブルに書き込む

                    TextRange textRange = wCell.AddParagraph().AppendText(xCell.NumberText);

                    //フォーマットをWordテーブルにコピーする

                    CopyStyle(textRange, xCell, wCell);

                }

            }

カスタムメソッドCopyStyle( TextRange wTextRange, CellRangexCell, TableCell wCell)は以下になります:

パラメーター:

wTextRange: Wordテーブルにあるテキスト

xCell: Excelテーブルにあるセル

wCell: Wordテーブルにあるセル

 

private static void CopyStyle(TextRangewTextRange, 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;

                }

            }

ステップ4 ドキュメントを保存する

doc.SaveToFile("result.docx", Spire.Doc.FileFormat.Docx);

実行の結果:

f:id:uha_noki:20210929185920p:plain

完全なコードをまとめます:

using Spire.Doc;

using Spire.Doc.Fields;

using Spire.Doc.Documents;

using Spire.Xls;

using System.Drawing;

 

namespace Excelテーブルの形式を残してWordにコピーする

{

    class Program

    {

        static void Main(string[] args)

        {

            //Excelドキュメントをロードする

            Workbook workbook = new Workbook();

            workbook.LoadFromFile("sample.xlsx");

            Worksheet sheet = workbook.Worksheets[0];

            //新しいWordドキュメントを作成する

            Document doc = new Document();

            //テーブルをWordドキュメントに添加する

            Table table = doc.AddSection().AddTable(true);

            //行数と列数を設置する

            table.ResetCells(sheet.LastRow, sheet.LastColumn);

            for (int r = 1; r <= sheet.LastRow; r++)

            {

                for (int c = 1; c <= sheet.LastColumn; c++)

                {

                    CellRange xCell = sheet.Range[r, c];

                    TableCell wCell = table.Rows[r - 1].Cells[c - 1];

                    //データをWordテーブルに書き込む

                    TextRange textRange = wCell.AddParagraph().AppendText(xCell.NumberText);

                    //フォーマットをWordテーブルにコピーする

                    CopyStyle(textRange, xCell, wCell);

                }

            }

            //Wordテーブルの内容に応じて列幅を自動的に調整する

            table.AutoFit(AutoFitBehaviorType.AutoFitToContents);

            //ドキュメントを保存して開く

            doc.SaveToFile("result.docx", Spire.Doc.FileFormat.Docx);

            System.Diagnostics.Process.Start("result.docx");

        }

        private static void CopyStyle(TextRange wTextRange, CellRange xCell, TableCell wCell)

        {

            //Excelセルのフォント形式をWordテーブルにコピーする

            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;

            //Excelセルの背景色をWordテーブルにコピーする

            wCell.CellFormat.BackColor = xCell.Style.Color;        

            //Excelセルのテキスト配置をWordにコピーする

            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;

            }

        }

    }

}

以上は今回のExcelテーブルの形式を残してWordにコピーする方法でした、お助けになると幸いです、ではまた!