【问题标题】:EPPlus File Load Issue with MonoMono 的 EPPlus 文件加载问题
【发布时间】:2014-11-07 23:53:10
【问题描述】:

我正在使用以下代码通过 EPPlus 库将 excel 文件读入数据表:

public static DataTable GetDataTableFromExcel(string path)
    {
        DataTable tbl = new DataTable();
        using (var pck = new ExcelPackage())
        {
            using (var stream = File.OpenRead(path))
            {
                pck.Load(stream);                    
            }

            //GET FIRST SHEET IN EXCEL FILE
            var ws = pck.Workbook.Worksheets.First();

            bool hasheader = true; // adjust it accordingly( i've mentioned that this is a simple approach)

            //ADD COLUMNS (SCHEMA) TO DATATABLE
            foreach (var firstrowcell in ws.Cells[1, 1, 1, ws.Dimension.End.Column])
            {
                tbl.Columns.Add(hasheader ? firstrowcell.Text : string.Format("column {0}", firstrowcell.Start.Column));
            }

            //IF THE EXCEL SHEET HAS FIRST ROW AS COLUMN NAMES THAN START FROM 2nd ROW Else FROM FIRST ROW
            var startrow = hasheader ? 2 : 1;

            for (var rownum = startrow; rownum <= ws.Dimension.End.Row; rownum++)
            {
                //ws.Cells[rownum, 1, rownum, ws.Dimension.End.Column].Style.Numberformat.Format = "General";
                var wsrow = ws.Cells[rownum, 1, rownum, ws.Dimension.End.Column];
                var row = tbl.NewRow();
                foreach (var cell in wsrow)
                {
                    if (cell.Start.Column > 20)
                        continue;
                    if (cell.Start.Column == 20)
                    {
                        DateTime dt = new DateTime(1947, 1, 1);
                        DateTime.TryParse(cell.Value.ToString(), out dt);

                        if (dt == new DateTime(0001, 1, 1))
                        {
                            long serialDate = long.Parse(cell.Value.ToString());
                            DateTime result = DateTime.FromOADate(serialDate);
                            row[cell.Start.Column - 1] = result.ToString();
                        }
                        else
                            row[cell.Start.Column - 1] = cell.Value;
                    }
                    else
                        row[cell.Start.Column - 1] = cell.Text;
                }
                tbl.Rows.Add(row);
            }

        }
        return tbl;
    } 

在我的应用程序中,我选择了一个 excel 文件,然后使用 EPPlus 将 Excel 转换为 DataTable,如果我选择一个新文件,则将数据表加载到 GridView 中 - 将调用上述方法并将数据加载到 GridView 中。

但这不适用于 Mono。这适用于.Net,但是当我从浏览按钮选择不同的文件时,使用相同的代码,第一个文件会一次又一次地加载。 要加载新文件,我必须关闭应用程序并再次运行。

方法代码有什么问题吗? 我需要在某处关闭/卸载 EP 代码中的 excel 吗?

问候,

【问题讨论】:

  • 这看起来像是发送到方法中的任何路径的问题,而不是实际方法本身的问题。您是否调试过正在发送的路径?它们是相同的,还是不同的?
  • 非常感谢您的回复。我得到了这个问题。我正在使用 app.config 文件并在运行时对其进行修改以保存文件路径并从 app.config 获取路径以将文件加载到网格中。要获得 app.config 中的新更改,我们必须重新加载应用程序。
  • 您应该将其作为答案,以便搜索相同问题的人可以看到您为解决该问题所做的工作。
  • 我把它作为答案。谢谢。

标签: excel mono epplus


【解决方案1】:

非常感谢您的回复。我得到了这个问题。我正在使用 app.config 文件并在运行时对其进行修改以保存文件路径并从 app.config 获取路径以将文件加载到网格中。要获得 app.config 中的新更改,我们必须重新加载应用程序。

【讨论】:

    猜你喜欢
    • 2016-01-12
    • 2011-07-27
    • 1970-01-01
    • 2016-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多