验证Web应用程序中的excel文件

时间:2013-12-04 15:18:06

标签: c# excel validation

我的任务是允许用户上传excel文件并验证文件中的数据。

我已经研究了在用户提交excel文件(在javascript中)之前如何验证数据的方法,但看起来你不能这样做。

似乎唯一的方法是将此文件发布到服务器并在服务器上进行验证。

这似乎是时间密集的。截至目前,我们并不知道这些文件有多大,所以我们真的不想让我们的服务器陷入困境。

有没有好办法呢?

另外,我没有在服务器上保存excel文件,我只关心其中的数据。

这是一个ASP .NET应用程序。

2 个答案:

答案 0 :(得分:0)

tools to parse excel files in javascript,所以它是可行的,但您需要提供更多信息。是什么使有效的文件?是否有特定格式,或者您只是想看看它是否会在Excel中打开?

答案 1 :(得分:-1)

这种验证绝对应该在服务器端完成。即使有客户端验证,您也不能相信它或假设它正常运行并且无论如何都希望重新验证服务器端。

如果文件可能很大并且验证可能需要很长时间(超过几分钟),那么您将需要异步执行此类任务。作为一般建筑指南,我过去做过如下:

有两个数据库表来保存电子表格数据。一个用于数据本身(记录级别),一个用于上载电子表格(文件级别)的总体状态。像这样:

Spreadsheets
----------
ID
User
Status
DateUploaded
DateProcessed
etc.

SpreadsheetRecords
----------
ID
SpreadsheetID
SomeValueFromTheData
TheNextValueFromTheData
etc.
ValidationMessage
  1. 用户上传电子表格,该电子表格会转换为强类型数据并在某处保留。这在Web应用程序中处理请求时立即在线发生(同步)。如果失败,则文件本身无效,无法通过业务逻辑运行,并向用户显示错误。您可以使用任意数量的技术/库/工具将电子表格转换为内存中的对象,具体取决于电子表格的格式。 (例如,谷歌搜索“在C#中将OpenXML转换为DataTable”可能是一个开始的地方。)
  2. 向用户显示一条响应,表明上传成功并开始处理。此时,电子表格中的所有“记录”都保存在表格中,并链接到另一个表格中的记录,该记录保持处理状态,与之关联的用户等。任何时候用户重新加载页面他们只看到处理的当前状态。这部分很大程度上取决于UI。我以前拥有的是一个页面,用户可以在其中查看以前上传的状态。他们可以批量上传,系统将依次处理每个文件,例如。
  3. 后台进程(在我的情况下是Windows服务)不断轮询Spreadsheets表,查找处于“挂起”状态并“处理”该数据的新记录。这就是“验证”发生的地方,这可能意味着任何事情,具体取决于业务规则。对于SpreadsheetRecords中的每条记录,执行业务逻辑并存储结果(例如,如果在ValidationMessage中出现错误,则会出现错误。)
  4. 当处理完成该数据中的所有记录时,请使用状态更新Spreadsheets中的记录。 (通过,失败等)此时,您可以通过电子邮件或网站上的某些通知(例如Facebook的通知栏等)通知用户处理已完成。
  5. 当用户再次检查页面以查看处理状态时,他们可以看到处理结果,包括有关数据中特定记录的任何特定错误消息。
  6. 当然,这一切都非常高级。这里有很多假设需要针对您自己的设置/架构进行调整。重点是整个事物的异步性质。完全可以同步完成所有这些操作,这样就省去了告诉用户它已经开始并在完成时通知它们的步骤。但是对于类似这样的事情的同步处理存在超时(或至少呈现糟糕的用户体验)的风险,用于长时间运行的任务。