在C#中解释Excel文件

我最近进行了一个小项目,我必须过滤Excel文件的表格内容。 我打算在这个项目中使用C#和EPPLUS,并将input的Excel表转换为一个Datatable来处理所有的数据查询。

但是,我从客户端获得的Excel文件是可疑的格式,其中表格遍布表格中的填充描述和空格之间的空白处。 每个Excel文件似乎都有自己的数据排列方式,下面是我迄今为止看到的一个例子:

在这里输入图像说明

我只做了一些将Excel表格转换为C#的实验,但是从目前为止我所看到的系统基本上是从单元格A1开始逐行迭代数据。 有没有办法在这个迭代过程中检测表,并将它们从标题/说明/空行分开? 我想简单地检查表格边框以确定是否有表格,但是对于schemeD,一些Excel文件甚至没有设置表格边界。

我打算告诉客户这个,所以我们可以就Excel文件的标准格式达成一致,但这是我的第一个解释Excel文件的工作,所以我也有一个小的元问题:这样做是正确的吗? 我假设这些不同的Excel格式可能是由于业务select(即来自不同部门),所以对于那些过去遇到这种问题的人来说,说服客户改变他们现在的方法还是应该跟他们目前的合作?

正如评论中提到的那样,如果“表格”仅仅是散乱的细胞群,那真是一团糟。 你将不得不拿出一些非常精心的AI来尝试检测可能的各种情况。

如果不愿意让客户改变他们的做法,但他们愿意调整一点,我会build议使用真正的ExcelTables 。 有了这个,excel已经通过客户端或者你应用表格的方式为你完成了工作。 例如,以下是工作表中的两个随机表格:

在这里输入图像说明

请注意,我只是复制/粘贴相同的单元格,但我然后通过右上angular的button格式化为表格。 这不仅仅是使它看起来不错 – 它实际上创build了一个可以在EPPlus中直接引用的ExcelTable对象。 这里是一些将演示:

 public void Detect_Tables_Test() { //http://stackoverflow.com/questions/37901408/interpreting-an-excel-file-in-c-sharp var fileInfo = new FileInfo(@"c:\temp\DetectTablesTest.xlsx"); using (var pck = new ExcelPackage(fileInfo)) { var workbook = pck.Workbook; var worksheet = workbook.Worksheets.First(); var tables = worksheet.Tables; tables.ToList().ForEach(table => { Console.WriteLine($"{{Name: {table.Name}, Address: {table.Address}, Columns: {table.Columns.Count}}}"); }); } } 

在输出中给出了这个:

 {Name: 'Table1', Address: 'G10:I20', Columns: 3} {Name: 'Table2', Address: 'A1:C11', Columns: 3} 

所以,现在你可以使用行/列地址作为参考来获取数据,查找上面的描述行等等。