C#/VB.NET: Word를 Excel로 변환

2023-07-21 02:17:29

NuGet을 통해 설치됨

PM> Install-Package Spire.Office

관련된 링크들

Word와 Excel은 완전히 다른 두 가지 파일 형식입니다. Word 문서는 에세이, 편지를 쓰거나 보고서를 작성하는 데 사용되며 Excel 문서는 데이터를 표 형식으로 저장하거나 차트를 만들거나 수학 계산을 수행하는 데 사용됩니다. Excel은 Word의 원래 레이아웃에 따라 내용을 거의 렌더링할 수 없기 때문에 복잡한 Word 문서를 Excel 스프레드시트로 변환하지 않는 것이 좋습니다.

그러나 Word 문서가 주로 테이블로 구성되어 있고 Excel에서 테이블 데이터를 분석하려는 경우 Spire.Office for .NET 를 사용하여 다음을 수행할 수 있습니다 convert Word to Excel 하면서 좋은 가독성을 유지합니다.

Spire.Office for .NET 설치

먼저 Spire.Office for .NET 패키지에 포함된 DLL 파일을 .NET 프로젝트의 참조로 추가해야 합니다. DLL 파일은 다음에서 다운로드할 수 있습니다 이 링크 또는 NuGet을 통해 설치됩니다.

PM> Install-Package Spire.Office

C# 및 VB.NET에서 Word를 Excel로 변환

이 시나리오는 실제로 Spire.Office 패키지의 두 라이브러리를 사용합니다. Spire.Doc for .NET과 Spire.XLS for .NET입니다. 전자는 Word 문서에서 내용을 읽고 추출하는 데 사용되며 후자는 Excel 문서를 만들고 특정 셀에 데이터를 쓰는 데 사용됩니다. 이 코드 예제를 쉽게 이해할 수 있도록 특정 기능을 수행하는 다음 세 가지 사용자 지정 메서드를 만들었습니다.

  • ExportTableInExcel() - Word 테이블의 데이터를 지정된 Excel 셀로 내보냅니다.
  • CopyContentInTable() - Word의 표 셀에서 Excel 셀로 내용을 복사합니다.
  • CopyTextAndStyle() - Word 단락에서 서식이 있는 텍스트를 Excel 셀로 복사합니다.

다음 단계는 Spire.Office for .NET를 사용하여 전체 Word 문서에서 워크시트로 데이터를 내보내는 방법을 보여줍니다.

  • Word 파일을 로드할 문서 개체를 만듭니다.
  • Worbbook 개체를 만들고 "WordToExcel"이라는 워크시트를 추가합니다.
  • Word 문서의 모든 섹션을 탐색하고 특정 섹션 아래의 모든 문서 개체를 탐색한 다음 문서 개체가 단락인지 표인지 확인합니다.
  • 문서 개체가 문단인 경우 CoypTextAndStyle() 메서드를 사용하여 Excel의 지정된 셀에 문단을 작성합니다.
  • 문서 개체가 테이블인 경우 ExportTableInExcel() 메서드를 사용하여 Word에서 Excel 셀로 테이블 데이터를 내보냅니다.
  • 셀 내의 데이터가 셀 경계를 초과하지 않도록 Excel에서 행 높이와 열 너비를 자동으로 맞춥니다.
  • Workbook.SaveToFile() 메서드를 사용하여 통합 문서를 Excel 파일로 저장합니다.
  • C#
  • VB.NET
using Spire.Doc;
    using Spire.Doc.Documents;
    using Spire.Doc.Fields;
    using Spire.Xls;
    using System;
    using System.Drawing;
    
    namespace ConvertWordToExcel
    {
        class Program
        {
            static void Main(string[] args)
            {
                //Create a Document object
                Document doc = new Document();
    
                //Load a Word file
                doc.LoadFromFile(@"C:\Users\Administrator\Desktop\Invoice.docx");
    
                //Create a Workbook object
                Workbook wb = new Workbook();
    
                //Remove the default worksheets
                wb.Worksheets.Clear();
    
                //Create a worksheet named "WordToExcel"
                Worksheet worksheet = wb.CreateEmptySheet("WordToExcel");
                int row = 1;
                int column = 1;
    
                //Loop through the sections in the Word document
                foreach (Section section in doc.Sections)
                {
                    //Loop through the document object under a certain section
                    foreach (DocumentObject documentObject in section.Body.ChildObjects)
                    {
                        //Determine if the object is a paragraph
                        if (documentObject is Paragraph)
                        {
                            CellRange cell = worksheet.Range[row, column];
                            Paragraph paragraph = documentObject as Paragraph;
                            //Copy paragraph from Word to a specific cell
                            CopyTextAndStyle(cell, paragraph);
                            row++;
                        }
    
                        //Determine if the object is a table
                        if (documentObject is Table)
                        {
                            Table table = documentObject as Table;
                            //Export table data from Word to Excel
                            int currentRow = ExportTableInExcel(worksheet, row, table);
                            row = currentRow;
                        }
                    }
                }
    
                //Auto fit row height and column width
                worksheet.AllocatedRange.AutoFitRows();
                worksheet.AllocatedRange.AutoFitColumns();
    
                //Wrap text in cells
                worksheet.AllocatedRange.IsWrapText = true;
    
                //Save the workbook to an Excel file
                wb.SaveToFile("WordToExcel.xlsx", ExcelVersion.Version2013);
            }
    
            //Export data from Word table to Excel cells
            private static int ExportTableInExcel(Worksheet worksheet, int row, Table table)
            {
                CellRange cell;
                int column;
                foreach (TableRow tbRow in table.Rows)
                {
                    column = 1;
                    foreach (TableCell tbCell in tbRow.Cells)
                    {
                        cell = worksheet.Range[row, column];
                        cell.BorderAround(LineStyleType.Thin, Color.Black);
                        CopyContentInTable(tbCell, cell);
                        column++;
                    }
                    row++;
                }
                return row;
            }
    
            //Copy content from a Word table cell to an Excel cell
            private static void CopyContentInTable(TableCell tbCell, CellRange cell)
            {
                Paragraph newPara = new Paragraph(tbCell.Document);
                for (int i = 0; i < tbCell.ChildObjects.Count; i++)
                {
                    DocumentObject documentObject = tbCell.ChildObjects[i];
                    if (documentObject is Paragraph)
                    {
                        Paragraph paragraph = documentObject as Paragraph;
                        foreach (DocumentObject cObj in paragraph.ChildObjects)
                        {
                            newPara.ChildObjects.Add(cObj.Clone());
                        }
                        if (i < tbCell.ChildObjects.Count - 1)
                        {
                            newPara.AppendText("\n");
                        }
                    }
                }
                CopyTextAndStyle(cell, newPara);
            }
    
            //Copy text and style of a paragraph to a cell
            private static void CopyTextAndStyle(CellRange cell, Paragraph paragraph)
            {
                RichText richText = cell.RichText;
                richText.Text = paragraph.Text;
                int startIndex = 0;
                foreach (DocumentObject documentObject in paragraph.ChildObjects)
                {
                    if (documentObject is TextRange)
                    {
                        TextRange textRange = documentObject as TextRange;
                        string fontName = textRange.CharacterFormat.FontName;
                        bool isBold = textRange.CharacterFormat.Bold;
                        Color textColor = textRange.CharacterFormat.TextColor;
                        float fontSize = textRange.CharacterFormat.FontSize;
                        string textRangeText = textRange.Text;
                        int strLength = textRangeText.Length;
                        ExcelFont font = cell.Worksheet.Workbook.CreateFont();
                        font.Color = textColor;
                        font.IsBold = isBold;
                        font.Size = fontSize;
                        font.FontName = fontName;
                        int endIndex = startIndex + strLength;
                        richText.SetFont(startIndex, endIndex, font);
                        startIndex += strLength;
                    }
                    if (documentObject is DocPicture)
                    {
                        DocPicture picture = documentObject as DocPicture;
                        cell.Worksheet.Pictures.Add(cell.Row, cell.Column, picture.Image);
                        cell.Worksheet.SetRowHeightInPixels(cell.Row, 1, picture.Image.Height);
                    }
                }
                switch (paragraph.Format.HorizontalAlignment)
                {
                    case HorizontalAlignment.Left:
                        cell.Style.HorizontalAlignment = HorizontalAlignType.Left;
                        break;
                    case HorizontalAlignment.Center:
                        cell.Style.HorizontalAlignment = HorizontalAlignType.Center;
                        break;
                    case HorizontalAlignment.Right:
                        cell.Style.HorizontalAlignment = HorizontalAlignType.Right;
                        break;
                }
            }
        }
    }

C#/VB.NET: Convert Word to Excel

임시 면허 신청

생성된 문서에서 평가 메시지를 제거하거나 기능 제한을 제거하려면 다음을 수행하십시오 30일 평가판 라이선스 요청 자신을 위해.

또한보십시오