是否可以在Web浏览器上打开和编辑Excel文件?

时间:2015-10-13 11:29:50

标签: c# asp.net excel

我将MVC4用于Web应用程序,并希望在Web浏览器上打开具有可编辑功能的Excel文件。要求是最终用户Excel格式没有修复,但我们的数据库列是固定的,我想在我们的数据库中保存Excel参数。

这可能吗?

2 个答案:

答案 0 :(得分:4)

正如瓦莱里奥卡萨诺所暗示的,你可能会自己得到一些东西。但这取决于您需要多少编辑以及电子表格的复杂程度。

要从Excel文件中读取数据,您可以使用像EPPlus这样的.Net组件。它非常快速且易于使用,可让您轻松提取所需的大部分数据。

但是要在网页中显示和编辑数据,您需要更多内容。有一些Web(基于HTML / JS)组件可以让您在看起来像Excel的表格中显示表格数据。例如,查看Handsontable。将它与EPPlus一起使用,您应该能够从Excel文件中读出数据,将其显示在可能进行一些编辑的网页中,最后您可以将这些数据提交回服务器并生成新的Excel文件再次使用EPPlus。

这需要一些编码,但绝对可行。

现在,这可能不支持公式而不支持数字/图表,但只要您的文件只包含数据和简单格式,就应该没问题。

答案 1 :(得分:1)

使用EPPlus library,您可以尝试以下代码。 path是服务器上excel文件的相对路径。第一个foreach循环用于标题部分,第二个for循环用于表格的其余部分。大多数代码都是自我解释的。

    private DataTable getDataTableFromExcel(string path)
    {
        using (var pck = new OfficeOpenXml.ExcelPackage())
        {
            using (var stream = File.OpenRead(path))
            {
                pck.Load(stream);
            }
            var ws = pck.Workbook.Worksheets.First();
            DataTable dt = new DataTable();
            bool hasHeader = true;
            int headercol = 1;
            int rownumber = 1;
            try
            {
                foreach (var firstRowCell in ws.Cells[1, 1, 1, ws.Dimension.End.Column])
                {
                    dt.Columns.Add(headercol.ToString());
                    headercol++;
                }
                var startRow = hasHeader ? 2 : 1;

                for (var rowNum = startRow; rowNum <= ws.Dimension.End.Row; rowNum++)
                {
                    var wsRow = ws.Cells[rowNum, 1, rowNum, 38]; //last parameter is colums count, here i fixed it to 38 
                    var row = dt.NewRow();
                    foreach (var cell in wsRow)
                    {
                        row[cell.Start.Column - 1] = cell.Text;
                    }
                    dt.Rows.Add(row);
                    rownumber++;
                }
                return dt;
            }
            catch (Exception x)
            {
               // throw new Exception(x + " on row " + rownumber);
                return null;//Dont use null, But Log your exception here. 
            }

        }
    }