我有一些非常大的Excel文件,需要从Web浏览器中打开。加载这些大文件需要几分钟时间。是否可能只打开包含单个工作表(单个选项卡)的Excel文件中的一个工作表?我需要使用C# / asp.net MVC实现此操作。
我有一些非常大的Excel文件,需要从Web浏览器中打开。加载这些大文件需要几分钟时间。是否可能只打开包含单个工作表(单个选项卡)的Excel文件中的一个工作表?我需要使用C# / asp.net MVC实现此操作。
我假设您已经在服务器上有Excel工作簿,只想将单个工作表发送给客户端。用户是否会编辑工作表?他们会上传回来吗?
假设这只是一份报告,那么为什么不使用OpenXML SDK读取工作簿,提取相关的工作表并将其发送回客户端呢?这就是评论中@Jim所建议的。您可以在此处获取SDK:Microsoft Office的Open XML SDK 2.0。但是,我不确定它是否适用于“旧”的Excel格式。我假设您需要将模板工作簿保存为新的Office格式(xslx)。
即使通过Interop,您也无法“告诉”Excel只需要一个工作表。有很多解释,例如公式、引用和它们之间的链接,这使得任务变得不可能。
如果您只想从工作表中读取数据,可能OLEDB数据提供程序是最好的选择。以下是一个完整的示例:使用OLEDB数据提供程序读取Excel文件
否则,在执行任何操作之前,您将需要将整个工作簿加载到内存中。
您的问题稍微不太清楚电子表格存储在哪里。
如果它存储在您控制的服务器上,请处理它,提取所需的工作表,并创建其他大小较小的工作表(或可能以不同格式保存它们)。
如果它们不在您控制的服务器上,请使用C#下载文件,然后进行类似的提取工作表的过程,再打开它。
话虽如此,我处理过一些相对较大的电子表格(大约20MB左右),并没有真正遇到整个电子表格处理的问题。
那么瓶颈在哪里?是您的网络还是可能是运行的机器?
使用第三方组件。
我们多年来一直在与服务器端Excel生成进行斗争,但最终失败了。
我们购买了第三方组件,所有问题都解决了。
请看StackOverflow上的这个问题:
我认为您可以在服务器上打开工作簿(在ASP.NET MVC应用程序中),并仅处理您想要的特定工作表。然后,您可以使用NPOI将这样的工作表发送给用户。
以下帖子向您展示了如何在ASP.NET MVC应用程序中执行此操作: