C# 从httppostedfilebase Excel文件读取单个单元格值

C# 从httppostedfilebase Excel文件读取单个单元格值,c#,asp.net-mvc,excel,C#,Asp.net Mvc,Excel,我有一个excel文件,客户端将其作为httppostedfilebase发送到服务器,我需要知道如何从该文件中读取值 [HttpPost] public ActionResult ShowExcelFile(GetExcel model) { var file = model.Files[0]; FileInfo info = new FileInfo(file.FileName); var fileName = Pat

我有一个excel文件,客户端将其作为httppostedfilebase发送到服务器,我需要知道如何从该文件中读取值

    [HttpPost]
    public ActionResult ShowExcelFile(GetExcel model)
    {
        var file = model.Files[0]; 
        FileInfo info = new FileInfo(file.FileName);
        var fileName = Path.GetFullPath(file.FileName);
        if (file != null && file.ContentLength > 0)
        {
            using (ExcelPackage package = new ExcelPackage(info))
            {
                //Read some cell value, how?
            }
        } 
        return View("ShowExcelFile");
    }
我的模型:

public class GetExcel
{

    public List<HttpPostedFileBase> Files { get; set; }

    public GetExcel()
    {
        Files = new List<HttpPostedFileBase>();
    }
}
公共类GetExcel
{
公共列表文件{get;set;}
公共GetExcel()
{
文件=新列表();
}
}
我的看法是:

@using (Html.BeginForm("ShowExcelFile", "ShowExcel", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
     @Html.TextBoxFor(m => m.Files, new { type = "file", name = "Files" })<br />
     <input type="submit" value="Upload file" />
}
@使用(Html.BeginForm(“showcelfile”、“showcelf”、FormMethod.Post、new{enctype=“multipart/formdata”}))
{
@Html.TextBoxFor(m=>m.Files,新的{type=“file”,name=“Files”})
}

我现在真的不知道怎么做,我试过Excel数据阅读器,但它不能读取公式值。据我所知,您使用的是EPPlus库,我不想从客户端发送的Excel文件中读取单元格值。要获得值,您需要这样编写smth

public void Upload(HttpPostedFileBase file)
{
      package.Load(file.InputStream);

     var worksheet = package.Workbook.Worksheets.First();
     var cellValue = worksheet.Cells[rowIndex, columnIndex].Value;
     var formulaValue = worksheet.Cells[rowIndex, columnIndex].Formula;
}

让我们将其放入控制器操作u中,以获取文件:

 [AcceptVerbs(HttpVerbs.Post)]
    public JsonResult ShowExcelFile()
    {
        // For getting the file that is Uploadeded.
        HttpPostedFileBase fileUpload = Request.Files["Files"];
        byte[] data;
        using (Stream inputStream = fileUpload.InputStream)
        {
            MemoryStream memoryStream = inputStream as MemoryStream;
            if (memoryStream == null)
            {
                memoryStream = new MemoryStream();
                inputStream.CopyTo(memoryStream);
                 data = memoryStream.ToArray();

                return Json(data, JsonRequestBehavior.AllowGet);
            }

        }

        return  Json(new { }, JsonRequestBehavior.AllowGet);
    }

关于如何实现控制器和视图,有几个问题。例如,您的ActionResult需要
列表
,但视图正在发布
HttpPostedFileBase

但是,除此之外,在
包的内部使用
,尝试:

ExcelWorksheet worksheet = package.Workbook.Worksheets[1];
worksheet.Select(new ExcelAddress("A1")); //there is more than one way to set this
string cellVal = (string)worksheet.SelectedRange.Value; 

我得到FileNotFoundException。它试图查找的路径不存在于您的
ShowExcelFile
中的断点。
model.Files[0]
null吗?如果是,那是因为您没有在视图中发布
列表
。修复后,您应该能够读取路径。我已经获取了Model.Files[0]文件。问题是如何读取它以及如何从中获取单元格值?@Ni3这里的问题是,问题并不十分清楚。并且没有关于用于读取的EPPlus包的信息。您需要使用电子表格将该字节数据转换为DataTable@Ni3假设使用这样的怪物(不是免费的,对吧?)。EPPlus将满足他的大部分需求。问题是当我使用包时,文件的路径不正确