使用 C# 从 Excel 转换为 HTML 时无法获得正确的行格式

问题描述 投票:0回答:1

我用 C# 开发了一个脚本,用于将一些 Excel 工作表转换为 HTML。但是,在 HTML 中,我将所有单元格放在一行中。我希望它们像在 Excel 中一样。我的 C# 代码:

string ExcelToHTML()
{
    string excelFile = @"myexcelfilepath.xlsx";
    StringBuilder html = new StringBuilder();
    FileInfo file = new FileInfo(excelFile);

    using (ExcelPackage package = new ExcelPackage(file))
    {
        foreach (ExcelWorksheet worksheet in package.Workbook.Worksheets)
        {
            
            html.Append("<h1>" + worksheet.Name + "</h1>\n"); //Header

            html.Append("<table border='1'>\n");
            
            ConvertSheetToHtml(worksheet, html);
            
            html.Append("</table>\n");

            html.Append("<br/>\n");
        }
    }

    string htmlFile = @"C:\pathToMyHTMLFile.html";
    File.WriteAllText(htmlFile, html.ToString());
    Console.WriteLine("HTML file has been generated at: " + htmlFile);

    return html.ToString();
}

void ConvertSheetToHtml(ExcelWorksheet worksheet, StringBuilder html)
{
   
    bool newRow = true;

    // Iterate through rows
    foreach (var row in worksheet.Cells)
    {
        if (newRow)
        {
            htmlContent.Append("<tr>"); // Start row
            newRow = false; // Reset the flag
        }

        // Iterate through cells
        foreach (var cell in row)
        {
            string cellData = cell.Text;

            
            if (cell.Style.Font.Bold) //checking if cell is bold
            {
                html.Append("<b>" + cellData + "</b>"); 
            }
            else
            {
                html.Append("<td>" + cellData + "</td>"); // Data cell
            }
        }

        newRow = true; // Set the flag for the next row
    }

    html.Append("</tr>\n");
}

我获取 html Lookout 的方式是:

    <tr><td>ex1</td></tr>
    <tr><td>ex2</td></tr>
    <tr><td>ex3</td></tr>

我想要的方式是:(假设“ex1”和“ex2”在Excel中的同一行)

<h1>Sheet 1</h1>
<table border = '1'>
<tr><td>ex1</td><td>ex2</td></tr>
<tr><td>ex3</td><td>ex4</td></tr>
</table>

<line break> 

<h1>Sheet 2</h1>
<table border = '1'>
<tr><td>sx1</td><td>sx2</td></tr>
<tr><td>sx3</td><td>sx4</td></tr>
</table>

所以如果 Excel 1 行有 10 列,我希望它们在 HTML 中也一样。目前,我为每个数据单元格获取一个新行。或者,如果我在函数中以新行结束该行,我会从 1 行中的列中获取 1 个工作表的所有数据单元格

c# html excel cell
1个回答
0
投票

您应该使用工作表的 .Rows 属性。 还可以简化。

void ConvertSheetToHtml(ExcelWorksheet worksheet, StringBuilder html)
{
    // Iterate through rows
    foreach (var row in worksheet.Rows)
    {
        htmlContent.Append("<tr>"); // Start row

        // Iterate through cells
        foreach (var cell in row)
        {
            string cellData = cell.Text;
                
            if (cell.Style.Font.Bold) //checking if cell is bold
            {
                html.Append("<b>" + cellData + "</b>"); 
            }
            else
            {
                html.Append("<td>" + cellData + "</td>"); // Data cell
            }
        }

        html.Append("</tr>\n"); // End row
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.