C#에서 HTML 테이블을 Excel 워크시트로 내보내는 쉬운 단계

Syncfusion Excel (XlsIO) Library은 사용자가 다양한 데이터 소스의 데이터를 C# 및 VB.NET의 Excel 워크시트로 내보낼 수 있는 .NET Excel 라이브러리입니다. 이 라이브러리를 사용하면 HTML 테이블도 Excel 워크시트로 내보낼 수 있습니다. 이 기능은 HTML 문서에서 데이터를 추출하여 관리해야 할 때 유용합니다.

이 작업을 수행하기 위한 쉬운 단계를 찾고 있다면 올바른 위치에 있습니다.

HTML 테이블이 있는 웹 페이지가 있는 시나리오를 고려하십시오. 각 웹 페이지에서 데이터를 검색하려면 페이지의 테이블을 수동으로 복사해야 할 수 있습니다. 이 프로세스를 자동화하기 위해 XlsIO는 웹 페이지의 HTML 테이블을 Excel 워크시트로 내보내는 지원을 제공합니다. 이렇게 하면 작업이 간단해지고 시간도 절약됩니다. 내보내기에는 테이블 형식도 포함됩니다.

XlsIO를 사용하여 C#에서 웹 페이지의 HTML 테이블을 Excel 워크시트로 내보내는 방법을 살펴보겠습니다.

HTML 테이블 내보내기



ImportHtmlTable 메서드는 HTML 파일을 로드하고 파일의 모든 테이블을 워크시트로 가져옵니다. 이 가져오기 작업에는 HTML 파일 내에 정의된 테이블 형식이 포함됩니다.

시연을 위해 Syncfusion XlsIO 라이브러리를 사용하여 HTML 테이블을 Excel 워크시트로 내보내는 ASP.NET Core 애플리케이션을 만들겠습니다.

1단계: ASP.NET Core 프로젝트를 만듭니다.

2단계: 보기를 추가합니다. 이름을 ExportHtmlTables.cshtml로 지정합니다. 다음 샘플 코드를 추가합니다. 이 코드에는 HTML DIV의 HTML 테이블, 숨겨진 필드 및 내보내기 버튼이 포함되어 있습니다. 이 버튼에는 HTML 문자열이 서버로 전송될 수 있도록 HTML DIV의 콘텐츠를 숨겨진 필드에 복사하는 jQuery 클릭 이벤트 핸들러가 할당되었습니다.

@{Html.BeginForm("ImportHtmlTable", "ImportHtmlTable", FormMethod.Post);
    {
        <div class="Common">
            <div class="tablediv">
                <div class="rowdiv">
                    <p>
                        Essential XlsIO supports exporting HTML tables into Excel worksheets. The <b>ImportHtmlTable</b> method loads an HTML file and exports all the tables in the file to the worksheet.
                    </p>
                    <b>Features:</b>
                    <br />
                    <ul>
                        <li>Imports HTML table</li>
                        <li>Imports with table formatting </li>
                    </ul>
                    <br />
                    <div id="cssStyle">
                        <style type="text/css">
                            th {
                                color:rgb(0,0,0);
                                font-family:Tahoma, sans-serif;
                                font-size:10pt;
                                white-space:nowrap;
                                background-color:rgb(255,174,33);
                                border-top:solid;
                                border-top-width: thin;
                                border-bottom:solid;
                                border-bottom-width:thin;
                                border-left:solid;
                                border-left-width:thin;
                                border-right:solid;
                                border-right-width:thin;
                                border-top-color:rgb(0,0,0);
                                border-bottom-color:rgb(0,0,0);
                                border-left-color:rgb(0,0,0);
                                border-right-color:rgb(0,0,0);
                                font-weight:bold;
                                vertical-align:bottom;
                            }

                            td {
                                color:rgb(0,0,0);
                                font-family:Tahoma, sans-serif;
                                font-size:10pt;
                                white-space:nowrap;
                                background-color:rgb(239,243,247);
                                border-left:solid;
                                border-left-width:thin;
                                border-right:solid;
                                border-right-width:thin;
                                border-top-color:rgb(0,0,0);
                                border-bottom-color:rgb(0,0,0);
                                border-bottom:solid;
                                border-bottom-width:thin;
                                border-left-color:rgb(0,0,0);
                                border-right-color:rgb(0,0,0);
                                vertical-align:bottom;
                            }
                        </style>
                    </div>
                    <div id="Grid">
                        <table cellspacing="0" width="500" style="table-layout:fixed;border-collapse:collapse;width:500pt">
                            <tr>
                                <th class="X64" style="text-align:left;">
                                    <span>CustomerID</span>
                                </th>
                                <th class="X64" style="text-align:left;">
                                    <span>CompanyName</span>
                                </th>
                                <th class="X64" style="text-align:left;">
                                    <span>ContactName</span>
                                </th>
                                <th class="X64" style="text-align:left;">
                                    <span>Phone</span>
                                </th>
                            </tr>
                            <tr height="25">
                                <td class="X65" style="text-align:left;">
                                    <span>ALFKI</span>
                                </td>
                                <td class="X65" style="text-align:left;">
                                    <span>Alfreds Futterkiste</span>
                                </td>
                                <td class="X65" style="text-align:left;">
                                    <span>Maria Anders</span>
                                </td>

                                <td class="X65" style="text-align:left;">
                                    <span>030-0074321</span>
                                </td>
                            </tr>
                            <tr height="25">
                                <td class="X65" style="text-align:left;">
                                    <span>ANATR</span>
                                </td>
                                <td class="X65" style="text-align:left;">
                                    <span>Ana Trujillo Emparedados</span>
                                </td>
                                <td class="X65" style="text-align:left;">
                                    <span>Ana Trujillo</span>
                                </td>
                                <td class="X65" style="text-align:left;">
                                    <span>(5) 555-4729</span>
                                </td>
                            </tr>
                            <tr height="25">
                                <td class="X65" style="text-align:left;">
                                    <span>ANTON</span>
                                </td>
                                <td class="X65" style="text-align:left;">
                                    <span>Antonio Moreno Taquería</span>
                                </td>
                                <td class="X65" style="text-align:left;">
                                    <span>Antonio Moreno</span>
                                </td>
                                <td class="X65" style="text-align:left;">
                                    <span>(5) 555-3932</span>
                                </td>
                            </tr>
                            <tr height="25">
                                <td class="X65" style="text-align:left;">
                                    <span>AROUT</span>
                                </td>
                                <td class="X65" style="text-align:left;">
                                    <span>Around the Horn</span>
                                </td>
                                <td class="X65" style="text-align:left;">
                                    <span>Thomas Hardy</span>
                                </td>
                                <td class="X65" style="text-align:left;">
                                    <span>(171) 555-7788</span>
                                </td>
                            </tr>
                            <tr height="25">
                                <td class="X65" style="text-align:left;">
                                    <span>BERGS</span>
                                </td>
                                <td class="X65" style="text-align:left;">
                                    <span>Berglunds snabbköp</span>
                                </td>
                                <td class="X65" style="text-align:left;">
                                    <span>Christina Berglund</span>
                                </td>
                                <td class="X65" style="text-align:left;">
                                    <span>0921-12 34 65</span>
                                </td>
                            </tr>
                            <tr height="25">
                                <td class="X65" style="text-align:left;">
                                    <span>BLAUS</span>
                                </td>
                                <td class="X65" style="text-align:left;">
                                    <span>Blauer See Delikatessen</span>
                                </td>
                                <td class="X65" style="text-align:left;">
                                    <span>Hanna Moos</span>
                                </td>
                                <td class="X65" style="text-align:left;">
                                    <span>0621-08460</span>
                                </td>
                            </tr>

                        </table>
                    </div>
                    </div>
                    <br />
                    <input name="tableHTML" id="tbl" hidden="hidden"/>
                    <div class="rowdiv">
                        <div class="celldiv">
                            <input id="ExportTbl" class="buttonStyle" type="submit" name="button" value="Export" onclick="exportHTML()" style="width:125px;" />
                        </div>
                    </div>
                </div>
        </div>
        Html.EndForm();
    } }

        <script type="text/javascript">
                function exportHTML() {
                    let value = "<html>" + document.getElementById("cssStyle").innerHTML + "<body>" + document.getElementById("Grid").innerHTML + "</body></html>";
                    value = value.replace("<tbody>", "");
                    value = value.replace("</tbody>", "");
                    document.getElementById("tbl").setAttribute("value", value);
            }
        </script>

이 코드는 다음 스크린샷에 표시된 웹 페이지를 만듭니다.

HTML 테이블이 있는 입력 웹 페이지

3단계: 컨트롤러 클래스 ExportHtmlTableController.cs에서 Excel 문서를 만듭니다.

4단계: 숨겨진 필드로 구문 분석된 HTML 문자열이 이제 클릭 이벤트로 전달됩니다. 그런 다음 HTML 문자열을 스트림으로 변환하고 ImportHtmlTable 메서드를 사용하여 로드한 다음 Excel 워크시트로 내보냅니다. 내보내는 동안 시작 행과 열을 지정해야 합니다. 워크시트로 내보낸 후 행과 열을 자동으로 맞추고 출력 Excel 파일로 저장합니다.

다음 코드 예제에서는 XlsIO를 사용하여 HTML 테이블이 있는 웹 페이지를 C#의 Excel 워크시트로 내보내는 방법을 보여줍니다.

public ActionResult ImportHtmlTable(string button, string tableHTML)
{
    if (button == null)
        return View();

    MemoryStream ms = new MemoryStream();

    // The instantiation process consists of two steps.
    // Step 1: Instantiate the spreadsheet creation engine.
    using (ExcelEngine excelEngine = new ExcelEngine())
    {

        // Step 2 : Instantiate the Excel application object.
        IApplication application = excelEngine.Excel;
        application.DefaultVersion = ExcelVersion.Excel2016;

        // A workbook is created.
        IWorkbook workbook = application.Workbooks.Create(1);

        // The first worksheet object in the worksheets collection is accessed.
        IWorksheet worksheet = workbook.Worksheets[0];

        byte[] byteArray = Encoding.UTF8.GetBytes(tableHTML);

        MemoryStream file = new MemoryStream(byteArray);

        // Imports HTML table into the worksheet from first row and first column.
        worksheet.ImportHtmlTable(file, 1, 1);

        worksheet.UsedRange.AutofitColumns();
        worksheet.UsedRange.AutofitRows();

        workbook.SaveAs(ms);
        ms.Position = 0;
    }

    return File(ms, "Application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "Export-HTML-Table.xlsx");
}

참고: 이 ImportHtmlTable 메서드를 사용하여 디스크에서 HTML 파일을 로드하여 HTML 테이블을 Excel 워크시트로 내보낼 수도 있습니다. 이를 위해 HTML 파일을 가져오는 동안 시작 행 및 열 값을 지정해야 합니다. 다음 코드 예제를 참조하십시오.

//Exports HTML tables to the worksheet from first row and first column.
worksheet.ImportHtmlTable("Import-HTML-Table.html", 1, 1);

다음 스크린샷은 HTML 테이블이 있는 웹 페이지에서 내보낸 Excel 파일의 출력입니다.

HTML 테이블이 있는 Excel 문서

GitHub 샘플



this GitHub page에서 C#의 Excel 워크시트로 HTML 테이블을 내보내는 예제를 다운로드할 수 있습니다.

마무리



보시다시피 Syncfusion Excel (XlsIO) Library은 HTML 테이블을 C#에서 Excel로 쉽게 내보낼 수 있는 지원을 제공합니다. 잠시 시간을 내어 documentation 을 자세히 살펴보십시오. 여기에서 data table s, collection objects , a grid view , data columnCSV 과 같은 다른 가져오기 옵션 및 기능을 모두 코드 샘플과 함께 찾을 수 있습니다.

XlsIO 라이브러리를 사용하여 Excel 데이터를 PDF , image , data table , CSV , TSV , HTML , collections of objects , ODS , 7, 91610 형식 및 7, 91610 형식으로 내보낼 수 있습니다.

Excel 라이브러리를 처음 사용하는 경우 JSON을 따르는 것이 좋습니다.

이미 Syncfusion 사용자이십니까? 제품 설정 Getting Started guide을 다운로드할 수 있습니다. 아직 Syncfusion 사용자가 아닌 경우 30일 무료 평가판 here을 다운로드할 수 있습니다.

이러한 기능에 대해 궁금한 점이 있으면 아래 의견 섹션에 알려주십시오. here, support forum 또는 Direct-Trac을 통해 문의하실 수도 있습니다. 기꺼이 도와드리겠습니다!

좋은 웹페이지 즐겨찾기