Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用c#asp.net/MVC在web浏览器上从一个巨大的excel文件打开一个工作表(单个选项卡)_C#_Asp.net_Asp.net Mvc_Excel - Fatal编程技术网

使用c#asp.net/MVC在web浏览器上从一个巨大的excel文件打开一个工作表(单个选项卡)

使用c#asp.net/MVC在web浏览器上从一个巨大的excel文件打开一个工作表(单个选项卡),c#,asp.net,asp.net-mvc,excel,C#,Asp.net,Asp.net Mvc,Excel,我有巨大的excel文件,我必须从web浏览器打开。加载大文件需要几分钟的时间。是否可以从包含多个工作表的excel文件中一次打开一个工作表(单个选项卡)?我必须使用C#/asp.net MVC来完成这项工作您的问题对于电子表格的存储位置有点不清楚 如果它位于您控制的服务器上,则处理它,提取您需要的图纸,并创建其他尺寸较小的图纸。(或者可能以其他格式保存。) 如果它们不在您控制的服务器上,请使用C#下载该文件,然后在打开之前执行类似的提取工作表的过程 话虽如此,我已经处理过一些较大的电子表格(大

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

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

如果它位于您控制的服务器上,则处理它,提取您需要的图纸,并创建其他尺寸较小的图纸。(或者可能以其他格式保存。)

如果它们不在您控制的服务器上,请使用C#下载该文件,然后在打开之前执行类似的提取工作表的过程

话虽如此,我已经处理过一些较大的电子表格(大约20MB),并且作为一个整体处理整个电子表格并没有什么问题


那么瓶颈在哪里呢?您的网络或您正在运行的机器?

使用第三方组件。
多年来,我们一直在与服务器端Excel的生成进行斗争,但已被击败。

我们购买了第三方组件,所有问题都解决了。

看看StackOverflow中的这个问题:

我认为您可以在服务器上(在ASP.NET MVC应用程序中)打开工作簿,只处理所需的特定工作表。然后,您可以使用NPOI将此类工作表发送给用户

下面的帖子向您展示了如何使用ASP.NET MVC应用程序来实现这一点:


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

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

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

如果您只想显示数据,可以通过ADO.NET/OLEDB收集数据,获取XML并使用Xslt转换为HTML。这很简单,而且有很多文档和示例


请注意,浏览器和计算机对大型数据集的响应会变慢。我必须设定上限。如果达到限制,我会通知用户截断的结果,否则,用户会认为计算机已“锁定”。

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

假设这只是一个报告,那么为什么不使用OpenXMLSDK来阅读工作簿、提取有问题的工作表并将其发送回客户机呢?这就是@Jim在评论中的建议。您可以在此处获取SDK:。但是,我不确定它是否能与“旧”excel格式一起使用。我假设您需要以新的Office格式(xslx)保存模板工作簿。

您不能对Excel“说”,即使通过互操作,您也不能只想要一张工作表。有很多解释,比如公式、引用和它们之间的链接,这使得任务不可能完成

如果您只想从工作表中读取数据,那么OLEDB数据提供程序可能是您的最佳选择。以下是一个完整的示例:


否则,您需要先将整个工作簿加载到内存中,然后再对其执行任何操作。

如果需要在客户端打开该文件,则服务器与之无关。您可以使用OpenXML格式SDK提取特定的电子表格,并将其作为自己的工作簿提供给客户端。我不确定“从包含许多电子表格的excel文件中一次打开一个电子表格”是什么意思,但您可以查看OpenXML的用法,看看它是否适合您:为了清楚起见,我稍微修改了我的问题。谢谢你到目前为止的回复。。。如果一个客户端需要上传一个excel文件,而你需要在服务器端阅读它,我建议你试试。如果这是您想要做的(您的问题还不清楚),并且您想要更多信息,请向我发送一个msgBTW,当您在服务器上处理它时,不要使用Excel automation API来执行此操作。它是为桌面应用程序设计的,在服务器环境中不能正常工作。@AMissico为什么?无论如何,祝服务器端Excel好运。我肯定这是死胡同。它永远不会工作,原因很简单-Excel是客户端应用程序。因为你只是扔掉了单词和句子片段。Excel自动化是“客户端应用程序”。Excel工作簿是“数据存储”。他希望为数据服务,而不是自动使用Excel检索数据。所以,您的答案和问题无关。@AMissico Excel OleDb提供程序远不理想。全球化是万恶之源。小数点和千位分隔符是美国非美国用户面临的最大问题。这不是关于技术的讨论。我只是解释我的反对票。提供答案。不要乱说。