Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MVC 5如何使用EPPlus(OfficeOpenXml)Excel软件包上载Excel文件并读取行,直到最后填充的数据行_C#_Excel_Model View Controller_Epplus - Fatal编程技术网

C# MVC 5如何使用EPPlus(OfficeOpenXml)Excel软件包上载Excel文件并读取行,直到最后填充的数据行

C# MVC 5如何使用EPPlus(OfficeOpenXml)Excel软件包上载Excel文件并读取行,直到最后填充的数据行,c#,excel,model-view-controller,epplus,C#,Excel,Model View Controller,Epplus,我有一个MVC文件上载解决方案,它上载Excel文件,我的Excel软件包有一个问题,它使用Dimension.end.row属性将我的Excel文档行直接读取到文件的末尾,我希望读取到最后填充的行,而不是整个电子表格行,因为它使用空引用错误弹出我的代码,Excel来自外部源,它是一个锁定文件,大约有7000行,但只有大约3000行填充了数据,Dimension.End.Row属性读取整个7000行,因此当我循环并映射行和列时,在上一次填充的数据行3001之后,它具有空值。如何才能使其仅读取ex

我有一个MVC文件上载解决方案,它上载Excel文件,我的Excel软件包有一个问题,它使用Dimension.end.row属性将我的Excel文档行直接读取到文件的末尾,我希望读取到最后填充的行,而不是整个电子表格行,因为它使用空引用错误弹出我的代码,Excel来自外部源,它是一个锁定文件,大约有7000行,但只有大约3000行填充了数据,Dimension.End.Row属性读取整个7000行,因此当我循环并映射行和列时,在上一次填充的数据行3001之后,它具有空值。如何才能使其仅读取excel文件中填充的行,就像我说过的,我不能修改此文件,因为它是锁定的只读文件,我只能读取并上载它。请看下面我的代码

[HttpPost]
    public ActionResult Upload(FormCollection formCollection)
    {
        if (Request != null)
        {
            HttpPostedFileBase file = Request.Files["UploadedFile"];
            if ((file != null && file.ContentLength > 0 && !string.IsNullOrEmpty(file.FileName)))
            {
                string fileName = file.FileName;
                string fileContentType = file.ContentType;
                byte[] filebytes = new byte[file.ContentLength];
                var data = file.InputStream.Read(filebytes, 0, Convert.ToInt32(file.ContentLength));

                var suppleirList = new List<CleanSupplierClaim>();

                using (var package = new ExcelPackage(file.InputStream))
                {
                    var currentSheet = package.Workbook.Worksheets;
                    var workSheet = currentSheet.First();
                    var noOfColumns = workSheet.Dimension.End.Column;
                    var noOfRows = workSheet.Dimension.End.Row;// Here is where my issue is

                    for (int rowIterator = 5; rowIterator < noOfRows; rowIterator++)
                    {
                        var claim = new CleanSupplierClaim();

                        claim.Action = workSheet.Cells[rowIterator, 1].ToString();
                        claim.Line_Number = workSheet.Cells[rowIterator, 2].Value.ToString();
                        claim.Total_Claim = workSheet.Cells[rowIterator, 3].Value.ToString();
                        claim.ClaimReference = workSheet.Cells[rowIterator, 4].Value.ToString();
                        claim.Supplier_Claim = workSheet.Cells[rowIterator, 5].Value.ToString();
                        claim.Currency = workSheet.Cells[rowIterator, 6].Value.ToString();

                        suppleirList.Add(claim);
                    }



                }
            }
        }
        return View("Index");
[HttpPost]
公共操作结果上载(FormCollection FormCollection)
{
if(请求!=null)
{
HttpPostedFileBase file=Request.Files[“UploadedFile”];
如果((file!=null&&file.ContentLength>0&&!string.IsNullOrEmpty(file.FileName)))
{
字符串文件名=file.fileName;
字符串fileContentType=file.ContentType;
byte[]filebytes=新字节[file.ContentLength];
var data=file.InputStream.Read(filebytes,0,Convert.ToInt32(file.ContentLength));
var supplierlist=新列表();
使用(var package=new ExcelPackage(file.InputStream))
{
var currentSheet=package.Workbook.Worksheets;
var工作表=currentSheet.First();
var noOfColumns=workSheet.Dimension.End.Column;
var noOfRows=workSheet.Dimension.End.Row;//这里是我的问题所在
for(int-rowditerator=5;rowditerator
您可以这样做

for (int rowIterator = 5; rowIterator < noOfRows; rowIterator++)
{
      if(workSheet.Cells[rowIterator, 1] == null)//can this be null?
      {
        break; //if it's null exit from the for loop
      }

      var claim = new CleanSupplierClaim();

      claim.Action = workSheet.Cells[rowIterator, 1].ToString();
      claim.Line_Number = workSheet.Cells[rowIterator, 2].Value.ToString();
      claim.Total_Claim = workSheet.Cells[rowIterator, 3].Value.ToString();
      claim.ClaimReference = workSheet.Cells[rowIterator, 4].Value.ToString();
      claim.Supplier_Claim = workSheet.Cells[rowIterator, 5].Value.ToString();
      claim.Currency = workSheet.Cells[rowIterator, 6].Value.ToString();

      suppleirList.Add(claim);
  }
for(int-rowditerator=5;rowditerator
您可以这样做

for (int rowIterator = 5; rowIterator < noOfRows; rowIterator++)
{
      if(workSheet.Cells[rowIterator, 1] == null)//can this be null?
      {
        break; //if it's null exit from the for loop
      }

      var claim = new CleanSupplierClaim();

      claim.Action = workSheet.Cells[rowIterator, 1].ToString();
      claim.Line_Number = workSheet.Cells[rowIterator, 2].Value.ToString();
      claim.Total_Claim = workSheet.Cells[rowIterator, 3].Value.ToString();
      claim.ClaimReference = workSheet.Cells[rowIterator, 4].Value.ToString();
      claim.Supplier_Claim = workSheet.Cells[rowIterator, 5].Value.ToString();
      claim.Currency = workSheet.Cells[rowIterator, 6].Value.ToString();

      suppleirList.Add(claim);
  }
for(int-rowditerator=5;rowditerator
您可以尝试以下方法:

public void readXLS(string FilePath)
{
    FileInfo existingFile = new FileInfo(FilePath);
    using (ExcelPackage package = new ExcelPackage(existingFile))
    {
        //get the first worksheet in the workbook
        ExcelWorksheet worksheet = package.Workbook.Worksheets[1];
        int colCount = worksheet.Dimension.End.Column;  //get Column Count
        int rowCount = worksheet.Dimension.End.Row;     //get row count
        for (int row = 1; row <= rowCount; row++)
        {
            for (int col = 1; col <= colCount; col++)
            {
                Console.WriteLine(" Row:" + row + " column:" + col + " Value:" + worksheet.Cells[row, col].Value.ToString().Trim());
            }
        }
    }
}
public void readXLS(字符串文件路径)
{
FileInfo existingFile=新FileInfo(FilePath);
使用(ExcelPackage=新的ExcelPackage(现有文件))
{
//获取工作簿中的第一个工作表
Excel工作表=package.Workbook.Worksheets[1];
int colCount=worksheet.Dimension.End.Column;//获取列计数
int rowCount=worksheet.Dimension.End.Row;//获取行数

对于(int row=1;row您可以尝试以下操作:

public void readXLS(string FilePath)
{
    FileInfo existingFile = new FileInfo(FilePath);
    using (ExcelPackage package = new ExcelPackage(existingFile))
    {
        //get the first worksheet in the workbook
        ExcelWorksheet worksheet = package.Workbook.Worksheets[1];
        int colCount = worksheet.Dimension.End.Column;  //get Column Count
        int rowCount = worksheet.Dimension.End.Row;     //get row count
        for (int row = 1; row <= rowCount; row++)
        {
            for (int col = 1; col <= colCount; col++)
            {
                Console.WriteLine(" Row:" + row + " column:" + col + " Value:" + worksheet.Cells[row, col].Value.ToString().Trim());
            }
        }
    }
}
public void readXLS(字符串文件路径)
{
FileInfo existingFile=新FileInfo(FilePath);
使用(ExcelPackage=新的ExcelPackage(现有文件))
{
//获取工作簿中的第一个工作表
Excel工作表=package.Workbook.Worksheets[1];
int colCount=worksheet.Dimension.End.Column;//获取列计数
int rowCount=worksheet.Dimension.End.Row;//获取行数

对于(In行=1;行在中间可以有空行),这意味着在1-3000之间,没有空格,数据填充在文件中直到3000行,从3001到7000是一个空白单元格,然后返回NULL并轰击应用程序,我需要读到最后一个填充行,对于这个特定的Excel表,是3000。中间有空行,这意味着在1-3000之间,没有空格,数据填充在文件中直到3000行,从3001到7000是一个空白单元格,然后返回空和BO。