使用c#asp.net / MVC从Web浏览器的巨大Excel文件中打开单个工作表(单个选项卡)

我有巨大的Excel文件,我必须从网页浏览器打开。 加载大文件需要几分钟的时间。 是否可以从包含许多工作表的Excel文件中一次打开一个工作表(单个选项卡)? 我必须使用C#/ asp.net MVC来做到这一点

我假设你有在服务器上的Excel工作簿,只是想发送一个工作表到客户端。 用户然后编辑工作表? 他们会上传回来吗?

假设这只是一个报告,那么为什么不使用OpenXML sdk来读取工作簿,将有问题的表格提取出来并发送回客户端呢? @Jim在评论中暗示了这一点。 您可以在这里获得SDK: 用于Microsoft Office的Open XML SDK 2.0 。 但是,我不确定它是否能够使用“旧”的Excel格式。 我假设您需要将模板工作簿保存为新的Office格式(xslx)。

您的问题对于电子表格的存储位置略有不清。

如果它位于您控制的服务器上,则对其进行处理,提取您需要的纸张,然后创build尺寸较小的其他纸张。 (或者可能将它们保存为不同的格式)。

如果它们不在您控制的服务器上,请使用C#下载该文件,然后在打开它之前通过类似的方式提取表单。

话虽如此,我已经处理了一些较大的电子表格(20MB左右),并没有真正有问题处理整个电子表格。

那么瓶颈在哪里呢? 您的networking或可能是您正在运行的机器?

使用第三方组件。
我们正在与服务器端Excel一代打了多年,并已被击败。
我们买了第三方组件,所有的问题都没有了。

从你的问题来看,你似乎想通过使用(打开)来自一个工作表而不是整个工作簿的数据来提高加载时间。 如果是这种情况,只需要数据,那么使用OLEDB提供程序使用ADO.NET访问工作簿。 (您可以使用线程来加载每个工作表来提高加载性能,例如,在三个工作表中加载三个大数据集需要17秒,在单独的线程中加载每个工作表,在5秒钟内加载相同的数据集。

从经验来看,性能开始真正受到40MB或更高的工作簿的影响。 特别是,如果工作簿包含许多公式。 我最大的120MB工作簿需要几分钟才能加载。 使用OLEDB访问,我可以在几秒钟内加载,访问和处理相同的数据。

如果您希望客户端在Excel中打开数据,请通过ADO.NET / OLEDEDB收集数据,使用Xslt获取XML并转换为XMLSS。 这很简单,有很多文件和样品。

如果您只想呈现数据,请通过ADO.NET / OLEDEDB收集数据,使用Xslt获取XML并转换为HTML。 这很简单,有很多文件和样品。

请注意,浏览器和计算机对于大型数据集变得无法响应。 我必须设定限制上限。 如果有限制,我通知用户截断的结果,否则,用户认为计算机被“locking”。

看看这个问题在StackOverflow中:

从C#创buildExcel(.XLS和.XLSX)文件

我想你可以在服务器上打开你的工作簿(在ASP.NET MVC应用程序中),只处理你想要的特定工作表。 然后,您可以使用NPOI将这样的工作表发送给用户。

以下文章向您展示了如何使用ASP.NET MVC应用程序来实现这一点:

在C#中创buildExcel电子表格.XLS和.XLSX

你不能对Excel说“甚至是通过Interop你只需要一张工作表”。 有很多解释,如公式,引用和它们之间的联系,这使得任务变得不可能。

如果您只想从工作表读取数据,也许OLEDB数据提供程序是您的最佳select。 这里是一个完整的例子: 使用OLEDB数据提供者读取excel文件

否则,在执行任何操作之前,都需要将整个工作簿加载到内存中。