验证 XLSX 文件中的空字段 - (EPPlus) ASP.NET
Validate empty fields in XLSX file - (EPPlus) ASP.NET
我正在使用 ExcelPackage 在 C# 中导入 XLSX 文件。我在 Ex 导入中进行了一些验证:数字、文本以及字段是否为空。
注意:如果我的文件中的所有列都已填满,则导入成功。
应用程序的一个需求是验证工作表中是否有空字段。
示例:在 {A2:C2} 范围内。
其中A2为整型,B2为字符串,C2为浮点型
1 | A2 | B2 | C2 |
2 | | house1 | 50,8 |
3 | 50 | house2 | 50,0 |
我需要抛出一个异常,说明该文件包含空字段。
问题是读取A2字段时被忽略,而B2字段"Assumes"A2的地方,即A2字段是第一个单元格所以必须读取,即使它是空的,并且如果你抛出异常说明它包含空字段。
所以我的问题是:我需要 "force" 字段,即使它们是空的,如果它们是 则抛出异常。 我该怎么做?
我的代码是这样的:
public static List<ModularCostCapacitor> ReadFlieAndBuildModularCostsCapacitors(HttpPostedFile upLoad)
{
var fileOriginalName = upLoad.FileName;
var fileOriginalExtension = Path.GetExtension(fileOriginalName);
int rowNum = 0;
if (fileOriginalExtension.ToUpper().Equals("XLS") || fileOriginalExtension.ToUpper().Equals("XSLX"))
{
try
{
using (var excel = new ExcelPackage(upLoad.InputStream))
{
var ws = excel.Workbook.Worksheets.First();
var hasHeader = true;
int startRow = hasHeader ? 2 : 1;
for (rowNum = startRow; rowNum <= ws.Dimension.End.Row; rowNum++)
{
var wsRow = ws.Cells[rowNum, 1, rowNum, ws.Dimension.End.Column];
int i = 0;
foreach (var cell in wsRow)
{
switch (i)
{
case 0:
if (ValidateCellsXLSX(cell.Text))
{
// ...
}
break;
case 1:
if (!String.IsNullOrEmpty(cell.Text))
{
// ...
}
break;
case 2:
if (ValidateCellsXLSX(cell.Text))
{
// ...
}
break;
case 3:
if (ValidateCellsXLSX(cell.Text))
{
// ...
}
break;
case 4:
if (ValidateCellsXLSX(cell.Text))
{
// ...
}
break;
case 5:
if (ValidateCellsXLSX(cell.Text))
{
// ...
}
break;
case 6:
if (ValidateCellsXLSX(cell.Text))
{
// ...
}
break;
default:
break;
}
i++;
}
}
}
}
catch (Exception ex)
{
throw ex;
}
}
验证码:
public static bool ValidateCellsXLSX(string cell)
{
Regex regex = new Regex(@"[;!*#&@?()'$~^<>ºª%\{}A-Za-z]");
string validString = cell.Replace("%", "").Replace("R$", "").Replace("-", "");
Match match = regex.Match(validString);
if (String.IsNullOrEmpty(cell))
{
throw new Exception("File contains empty fields";);
}
else if (match.Success)
{
throw new Exception("File contains invalid characters");
}
return true;
}
你能检查一下吗?这些家伙似乎有了答案。他们的方法不同,但您可能会有所了解 https://www.codeproject.com/Questions/561817/DetectingplusEmpypluscellplusinplusExcelplusRange
我正在使用 ExcelPackage 在 C# 中导入 XLSX 文件。我在 Ex 导入中进行了一些验证:数字、文本以及字段是否为空。
注意:如果我的文件中的所有列都已填满,则导入成功。
应用程序的一个需求是验证工作表中是否有空字段。
示例:在 {A2:C2} 范围内。
其中A2为整型,B2为字符串,C2为浮点型
1 | A2 | B2 | C2 |
2 | | house1 | 50,8 |
3 | 50 | house2 | 50,0 |
我需要抛出一个异常,说明该文件包含空字段。
问题是读取A2字段时被忽略,而B2字段"Assumes"A2的地方,即A2字段是第一个单元格所以必须读取,即使它是空的,并且如果你抛出异常说明它包含空字段。
所以我的问题是:我需要 "force" 字段,即使它们是空的,如果它们是 则抛出异常。 我该怎么做?
我的代码是这样的:
public static List<ModularCostCapacitor> ReadFlieAndBuildModularCostsCapacitors(HttpPostedFile upLoad)
{
var fileOriginalName = upLoad.FileName;
var fileOriginalExtension = Path.GetExtension(fileOriginalName);
int rowNum = 0;
if (fileOriginalExtension.ToUpper().Equals("XLS") || fileOriginalExtension.ToUpper().Equals("XSLX"))
{
try
{
using (var excel = new ExcelPackage(upLoad.InputStream))
{
var ws = excel.Workbook.Worksheets.First();
var hasHeader = true;
int startRow = hasHeader ? 2 : 1;
for (rowNum = startRow; rowNum <= ws.Dimension.End.Row; rowNum++)
{
var wsRow = ws.Cells[rowNum, 1, rowNum, ws.Dimension.End.Column];
int i = 0;
foreach (var cell in wsRow)
{
switch (i)
{
case 0:
if (ValidateCellsXLSX(cell.Text))
{
// ...
}
break;
case 1:
if (!String.IsNullOrEmpty(cell.Text))
{
// ...
}
break;
case 2:
if (ValidateCellsXLSX(cell.Text))
{
// ...
}
break;
case 3:
if (ValidateCellsXLSX(cell.Text))
{
// ...
}
break;
case 4:
if (ValidateCellsXLSX(cell.Text))
{
// ...
}
break;
case 5:
if (ValidateCellsXLSX(cell.Text))
{
// ...
}
break;
case 6:
if (ValidateCellsXLSX(cell.Text))
{
// ...
}
break;
default:
break;
}
i++;
}
}
}
}
catch (Exception ex)
{
throw ex;
}
}
验证码:
public static bool ValidateCellsXLSX(string cell)
{
Regex regex = new Regex(@"[;!*#&@?()'$~^<>ºª%\{}A-Za-z]");
string validString = cell.Replace("%", "").Replace("R$", "").Replace("-", "");
Match match = regex.Match(validString);
if (String.IsNullOrEmpty(cell))
{
throw new Exception("File contains empty fields";);
}
else if (match.Success)
{
throw new Exception("File contains invalid characters");
}
return true;
}
你能检查一下吗?这些家伙似乎有了答案。他们的方法不同,但您可能会有所了解 https://www.codeproject.com/Questions/561817/DetectingplusEmpypluscellplusinplusExcelplusRange