上傳excel (xlsx) 使用EPPlus套件 C# mvc

  • 801
  • 0

上傳excel (xlsx) 使用EPPlus套件

<form action="@Url.Action("Upload")" method="post" enctype="multipart/form-data">
    <label for="file">Filename:</label>
    <input type="file" name="file" id="file" />
    <input type="submit" />
</form>

 

[HttpPost]
        public ActionResult Upload(HttpPostedFileBase file)
        {
            if (file.ContentLength > 0)
            {
                //我是存檔

                //var fileName = Path.GetFileName(file.FileName);
                //var path = Path.Combine(Server.MapPath("~/FileUploads"), fileName);
                //file.SaveAs(path);

                //以下是讀檔

                 using (var excel = new ExcelPackage(file.InputStream))
                {
                    var tbl = new DataTable();
                    var ws = excel.Workbook.Worksheets.First();
                    var hasHeader = true;  // adjust accordingly
                                           // add DataColumns 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));

                    // add DataRows to DataTable
                    int startRow = hasHeader ? 2 : 1;
                    for (int rowNum = startRow; rowNum <= ws.Dimension.End.Row; rowNum++)
                    {
                        var wsRow = ws.Cells[rowNum, 1, rowNum, ws.Dimension.End.Column];
                        DataRow row = tbl.NewRow();
                        foreach (var cell in wsRow)
                            row[cell.Start.Column - 1] = cell.Text;
                        tbl.Rows.Add(row);
                    }
                    var msg = String.Format("DataTable successfully created from excel-file. Colum-count:{0} Row-count:{1}",
                                            tbl.Columns.Count, tbl.Rows.Count);
            
                }

            }
            return RedirectToAction("Upload");
        }