Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.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# 使用.NET解析/刮取Excel文件_C#_Asp.net_Vb.net_Winforms - Fatal编程技术网

C# 使用.NET解析/刮取Excel文件

C# 使用.NET解析/刮取Excel文件,c#,asp.net,vb.net,winforms,C#,Asp.net,Vb.net,Winforms,嗨,我正在尝试解析一个excel文件。它的结构非常复杂。我知道的可能方式是 使用Office简介库 使用OLEDB提供程序并读取数据集中的excel文件 但问题在于它的复杂性,如某些列、单元格或行为空白等 最好的方法是什么 提前感谢。我让我的用户先将Excel电子表格保存为CSV文件。然后他们将CSV文件上传到我的应用程序。这使得解析变得更加简单。就我个人而言,我更喜欢使用OLEDB方式,这在最好的情况下有点笨重,或者您可以使用第三方库,它投入了时间/精力/精力来访问数据 SyncFusio

嗨,我正在尝试解析一个excel文件。它的结构非常复杂。我知道的可能方式是

  • 使用Office简介库
  • 使用OLEDB提供程序并读取数据集中的excel文件
但问题在于它的复杂性,如某些列、单元格或行为空白等

最好的方法是什么


提前感谢。

我让我的用户先将Excel电子表格保存为CSV文件。然后他们将CSV文件上传到我的应用程序。这使得解析变得更加简单。

就我个人而言,我更喜欢使用OLEDB方式,这在最好的情况下有点笨重,或者您可以使用第三方库,它投入了时间/精力/精力来访问数据


SyncFusion为此提供了一个非常好的库。

我自己使用OLEDB读取上传的Excel文件,它不会出现任何实际问题(除了字段中的null,而不是空格,可以使用IsDBNull进行检查)。此外,第三方开源工具,如NPOI和Excel2007ReadWrite()也很有用

我已经彻底评估了这两个第三方工具,它们都非常稳定,易于集成。我建议NPOI用于Excel 2003文件,Excel2007ReadWrite用于Excel 2007文件。

我可以推荐(我认为是根据LGPL许可的)。它同时加载.xls和.xlsx文件,并允许您将电子表格作为数据集,每个工作表都是一个单独的数据表。据我所知,从我使用它的场景来看,它尊重空行、空单元格等。试试看,你是否认为它能处理你的“非常复杂”的结构。[我确实注意到网站上有一篇负面评论,但其他评论都是正面的。如果工作表被重命名,我在阅读.xlsx时遇到了一个问题]


我过去也使用过OLEDB方法,但请注意,这在尝试推断前几行中的数据类型时存在实际问题。如果某个列的数据类型发生了更改,那么很可能会错误地推断出该列。更糟糕的是,当它确实出错时,它通常会返回null作为值,这使得很难(或不可能)从前六行或前七行之后更改的数据类型中分辨出真正的null值。

听起来您对手头的任务有很好的理解。您必须编写业务逻辑,以理清电子表格格式的复杂性,并提取所需的数据

在我看来,VTSO/Interop是最好的平台策略,原因有二:

  • 访问电子表格数据只是解决方案所需工作的一小部分。所以,如果使用OLEDB在数据访问方面节省了一点时间,那么就整个项目范围而言,它可能是无关紧要的
  • 您可能需要仔细检查各个单元格的内容,并考虑上下文信息(如格式)。通过互操作,可以完全查看单元格内容、上下文和其他图纸级上下文信息,如命名范围和列表。假设您在解码电子表格时不需要此类信息是一种风险