Blazor Wasm 使用 npoi / returnedXML 打开 excel 时出现性能问题

发布于 2025-01-09 22:48:54 字数 1252 浏览 4 评论 0原文

在 WebAssembly 项目中,我目前在使用 NPOI 或 ClosedXML 读取 XLSX 文件时遇到性能问题

。目标是在将 XLSX 文件发送到后端之前对其进行前端验证。

async Task ImportExcelFile(InputFileChangeEventArgs e)
{
    dataTable = new DataTable();

    MemoryStream memoryStream = new();

    await e.File.OpenReadStream().CopyToAsync(memoryStream);

    memoryStream.Position = 0;

    XSSFWorkbook xsswb = new(memoryStream);
    ISheet sheet = xsswb.GetSheetAt(0);
    IRow hr = sheet.GetRow(0);
    var rows = new List<string>();

    int cc = hr.LastCellNum;

    for (var j = 0; j < cc; j++)
    {
        ICell cell = hr.GetCell(j);
        dataTable.Columns.Add(cell.ToString());
    }

    for (var j = (sheet.FirstRowNum + 1); j <= sheet.LastRowNum; j++)
    {
        var r = sheet.GetRow(j);
        for (var i = r.FirstCellNum; i < cc; i++)
        {
            rows.Add(r.GetCell(i)?.ToString());
        }

        if (rows.Count > 0)
        {
            dataTable.Rows.Add(rows.ToArray());
        }
        rows.Clear();
    }
}

上传 1K 行需要大约 6/7 秒才能运行此行 (110 KO) 上传 13K 行需要 30/40 秒才能运行此行 (1 MB),

    XSSFWorkbook xsswb = new(memoryStream);

我不确定是否要在前端保持验证,或者只是将流发送到后端并在此处进行验证。

在导航器端运行一次需要这么长时间,这正常吗?

On a project WebAssembly i'm currently struggling with performance issues while reading XLSX file with NPOI or ClosedXML

The goal is to have a front end validation of the XLSX file before sending it to the back.

async Task ImportExcelFile(InputFileChangeEventArgs e)
{
    dataTable = new DataTable();

    MemoryStream memoryStream = new();

    await e.File.OpenReadStream().CopyToAsync(memoryStream);

    memoryStream.Position = 0;

    XSSFWorkbook xsswb = new(memoryStream);
    ISheet sheet = xsswb.GetSheetAt(0);
    IRow hr = sheet.GetRow(0);
    var rows = new List<string>();

    int cc = hr.LastCellNum;

    for (var j = 0; j < cc; j++)
    {
        ICell cell = hr.GetCell(j);
        dataTable.Columns.Add(cell.ToString());
    }

    for (var j = (sheet.FirstRowNum + 1); j <= sheet.LastRowNum; j++)
    {
        var r = sheet.GetRow(j);
        for (var i = r.FirstCellNum; i < cc; i++)
        {
            rows.Add(r.GetCell(i)?.ToString());
        }

        if (rows.Count > 0)
        {
            dataTable.Rows.Add(rows.ToArray());
        }
        rows.Clear();
    }
}

Uploading an 1K rows takes like 6/7 seconds to run this line (110 KO)
Uploading an 13K rows takes between 30/40 seconds to run this line (1 MB)

    XSSFWorkbook xsswb = new(memoryStream);

I'm not sure with that to keep validation on front or to just send the stream to the back end and validate it here.

Is that normal it take so much time once ran on navigator side ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文