我将MVC4用于Web应用程序,并希望在Web浏览器上打开具有可编辑功能的Excel文件。要求是最终用户Excel格式没有修复,但我们的数据库列是固定的,我想在我们的数据库中保存Excel参数。
这可能吗?
答案 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.
}
}
}