我希望有人能帮我想出一个算法。
我对 Apache POI 还是很陌生,我被分配提出一个关于如何读取模板 (Excel) 并从数据本身中提取标题/列名的算法。
必须考虑以下事项:
非常欢迎任何想法和建议。如果您有进一步的说明,请告诉我。
最佳答案
(我对 Apache 一无所知,但对 Excel 互操作工作有些了解)
如果要检测的工作表是您的,我建议命名这些标题单元格。 (要在 Excel 中命名一个单元格,屏幕左上角有一个字段,通常会出现单元格坐标(如“A1”或“B2”等等......)。在那个地方输入一个名称,然后你将能够通过代码通过其名称识别该单元格。('Worksheet.Range("Name")' 是您通过代码获取这些单元格的地方)
要管理名称,请转到“插入 - 名称”或“公式 - 名称管理器”,具体取决于 Excel 的版本。
(就个人而言,我从不通过没有命名标题的代码使用工作表,然后我使用“偏移”来获取与这些标题对应的数据单元格 - 这使我可以在以后自由编辑工作表而不会破坏代码)
如果工作表不是您的,那么您需要找出数据的范围。 (最后一行和最后一列)
然后检查包含所有已填充列的第一行,其中没有一个为空白。那是一个可能的水平标题。
以及检查包含所有填充行的第一列。那是一个可能的垂直标题。
您还可以搜索完全空白的行和/或列以查找位于某些数据之后的标题,以防工作表包含多个水平标题或垂直标题。
您可以使用这些单元格的一些格式属性(例如 Range.Interior 或 Range.Font)来识别它们是否是标题(通常标题具有不同的格式、颜色、边框等)。
如果您确定没有数字标题,我的意思是,所有标题都包含文本,请检查单元格中的数据类型。如果都是字符串,则标题概率会增加。
即便如此,这是一件棘手的事情,如果工作表不遵循某种模式,有时其中一个可能会欺骗您的代码并带来错误的结果。如果允许,我建议在处理完成后添加人工验证以确认结果。
关于excel - 如何区分数据与 Excel 文件中的列/标题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15517285/