excel - 如何区分数据与 Excel 文件中的列/标题

标签 excel apache file-io

我希望有人能帮我想出一个算法。

我对 Apache POI 还是很陌生,我被分配提出一个关于如何读取模板 (Excel) 并从数据本身中提取标题/列名的算法。

必须考虑以下事项:

  • 一张 Excel 文件中可以有多个标题/列名。
  • 标题本质上可以是水平的和/或垂直的。这意味着一张表中可能混合有垂直和水平标题。
  • 标题不一定必须位于文件的第一行。那里可能有介绍或横幅图片。
  • 系统必须允许任何类型的 Excel 格式,因此无法控制单元格的格式、命名约定等。
  • 一些标题本质上是字母数字,这意味着它也包含数字。
  • 一些单元格被合并为特定标题腾出空间。

  • 非常欢迎任何想法和建议。如果您有进一步的说明,请告诉我。

    最佳答案

    (我对 Apache 一无所知,但对 Excel 互操作工作有些了解)

    如果要检测的工作表是您的,我建议命名这些标题单元格。 (要在 Excel 中命名一个单元格,屏幕左上角有一个字段,通常会出现单元格坐标(如“A1”或“B2”等等......)。在那个地方输入一个名称,然后你将能够通过代码通过其名称识别该单元格。('Worksheet.Range("Name")' 是您通过代码获取这些单元格的地方)

    要管理名称,请转到“插入 - 名称”或“公式 - 名称管理器”,具体取决于 Excel 的版本。

    (就个人而言,我从不通过没有命名标题的代码使用工作表,然后我使用“偏移”来获取与这些标题对应的数据单元格 - 这使我可以在以后自由编辑工作表而不会破坏代码)

    如果工作表不是您的,那么您需要找出数据的范围。 (最后一行和最后一列)
    然后检查包含所有已填充列的第一行,其中没有一个为空白。那是一个可能的水平标题。
    以及检查包含所有填充行的第一列。那是一个可能的垂直标题。

    您还可以搜索完全空白的行和/或列以查找位于某些数据之后的标题,以防工作表包含多个水平标题或垂直标题。

    您可以使用这些单元格的一些格式属性(例如 Range.Interior 或 Range.Font)来识别它们是否是标题(通常标题具有不同的格式、颜色、边框等)。

    如果您确定没有数字标题,我的意思是,所有标题都包含文本,请检查单元格中的数据类型。如果都是字符串,则标题概率会增加。

    即便如此,这是一件棘手的事情,如果工作表不遵循某种模式,有时其中一个可能会欺骗您的代码并带来错误的结果。如果允许,我建议在处理完成后添加人工验证以确认结果。

    关于excel - 如何区分数据与 Excel 文件中的列/标题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15517285/

    相关文章:

    java - 在 Windows 和 Linux 操作系统下访问 Java 应用程序中的外部文件

    file-io - 在 Octave 中保存和加载矩阵的最快文件格式?

    python - 如何将三列合并为两列,一列是分类的,另一列是数字的? ( python Pandas )

    c# - 使用 C# 创建的 UTF-8 CSV 文件在 Excel 中显示字符

    PHP file_get_contents() 函数

    java - Apache Helix 资源平衡器(案例 : each resource on independent node)

    php - 当我构建(配置)phpspreadsheet的源代码时,由于找不到apxs并且未构建apache,因此出现错误

    c++ - 有没有一种可移植的方法可以将标准输入重定向到 C++ 中的字符串?

    MySQL ODBC 导入失败

    excel - 选中复选框时写入复选框旁边的单元格