MVC 5 如何使用 EPPlus (OfficeOpenXml) ExcelPackage 上传 Excel 文件并读取行直到最后填充的数据行
MVC 5 How to upload Excel file and read rows till the last populated data row using EPPlus (OfficeOpenXml) ExcelPackage
我有一个上传 Excel 文件的 MVC 文件上传解决方案,我遇到了 Excel 包的问题,它读取我的 Excel 文档行直到最后使用 Dimension.End.Row 属性 的文件,我想读取到最后填充的行而不是整个电子表格行,因为它用空引用错误轰炸了我的代码,Excel 来自一个外部源,它是一个锁定文件,大约有 7000 行,但只有大约 3000 行填充了数据,Dimension.End.Row 属性 读取整个 7000因此,当我循环遍历并映射行和列时,在 wards 上最后填充的数据行 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");
你可以这样做;
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);
}
您可以尝试如下操作:
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());
}
}
}
}
参考:http://sforsuresh.in/reading-excel-file-using-epplus-package/
我有一个上传 Excel 文件的 MVC 文件上传解决方案,我遇到了 Excel 包的问题,它读取我的 Excel 文档行直到最后使用 Dimension.End.Row 属性 的文件,我想读取到最后填充的行而不是整个电子表格行,因为它用空引用错误轰炸了我的代码,Excel 来自一个外部源,它是一个锁定文件,大约有 7000 行,但只有大约 3000 行填充了数据,Dimension.End.Row 属性 读取整个 7000因此,当我循环遍历并映射行和列时,在 wards 上最后填充的数据行 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");
你可以这样做;
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);
}
您可以尝试如下操作:
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());
}
}
}
}
参考:http://sforsuresh.in/reading-excel-file-using-epplus-package/