【发布时间】:2016-07-04 08:27:41
【问题描述】:
我知道这个问题已经被问过很多次了。但我无法从其中任何人那里获得太多帮助。
我不想将 excel 转换为数据表,但我希望将其转换为对象列表并发送到服务器端进行处理。
如果它有超过 2K 行,它应该会抛出一个错误。目前我正在做的事情是这样的:
using (var excel = new ExcelPackage(hpf.InputStream))
{
var ws = excel.Workbook.Worksheets["Sheet1"];
for (int rw = 4; rw <= ws.Dimension.End.Row; rw++)
{
if (ws.Cells[rw, 1].Value != null)
{
int headerRow = 2;
GroupMembershipUploadInput gm = new GroupMembershipUploadInput();
for (int col = ws.Dimension.Start.Column; col <= ws.Dimension.End.Column; col++)
{
var s = ws.Cells[rw, col].Value;
if (ws.Cells[headerRow, col].Value.ToString().Equals("Existing Constituent Master Id"))
{
gm.cnst_mstr_id = (ws.Cells[rw, col].Value ?? (Object)"").ToString();
}
else if (ws.Cells[headerRow, col].Value.ToString().Equals("Prefix of the constituent(Mr, Mrs etc)"))
{
gm.cnst_prefix_nm = (ws.Cells[rw, col].Value ?? (Object)"").ToString();
}
else if (ws.Cells[headerRow, col].Value.ToString().Equals("First Name of the constituent(Mike)"))
{
gm.cnst_first_nm = (ws.Cells[rw, col].Value ?? (Object)"").ToString();
}
.....................
.....................
}
}
iUploadedCnt = iUploadedCnt + 1; //Increase the count by 1
}
if (lgl.GroupMembershipUploadInputList.Count < 2003) //Check for the uploaded list count
{
//throw the error
}
但这种方法似乎很慢。
excel 到列表的转换对我来说似乎很慢。例如,当我上传超过 2k 条记录时,列表首先转换为列表,然后检查计数是否超过 2003。这个过程肯定比较慢。
如何以更快/更好的方式实现它?
【问题讨论】:
-
“慢”是什么意思?读取excel很慢?或者发送到服务器很慢?顺便提一句。我没有看到任何发送到服务器的代码。
-
我建议将问题的标题更改为“提高将大文件转换为 excel 的性能”之类的内容,因此不要误导您的问题在于转换本身。
-
@x... excel 到列表的转换对我来说似乎很慢,当我上传超过 2k 条记录时,列表首先转换为列表,然后检查计数是否超过 2003。这个过程比较慢。
-
@Veverke 感谢您的建议。
-
如何使用 Stopwatch 类并逐行测量,哪一行慢?
标签: c# excel performance epplus