gpt4 book ai didi

excel - 链接工作表名称和 XML 文件的正确方法

转载 作者:行者123 更新时间:2023-12-04 20:30:07 25 4
gpt4 key购买 nike

我继承了一个使用 XML 函数读取 *.xlsx 文件的电子表格模块。该应用程序使用工作表名称映射数据,并且模块的那部分非常损坏。

我没有一个月的时间来查找和阅读 Office Open XML 格式的规范,因此我在快速查看了一些示例文件后编写了一个快速破解:

  • 打开xl/workbook.xml和循环 /workbook/sheets :
  • name 获取姓名.
  • r:id 获取 ID .
  • 使用文件顺序作为显示顺序。
  • 打开xl/_rels/workbook.xml.rels和循环 /RelationshipsType="http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet 过滤:
  • 通过 Id 映射到名称.
  • 通过 Target 映射到文件.

  • 这个算法正确吗?

    最佳答案

    这是一篇较旧的帖子,OP 可能已经继续,但如果其他人对此感兴趣,我发现了什么。
    我在编写一个简单的解析器来进行一些 XLSX 按摩时也遇到了这个问题,并且找不到文档来指示 XML 文件名映射到 workbook.xml 中定义的工作表的确切方式。 .
    这是我发现的:
    似乎有三种方法可以确定这一点;我在下面说明了 2,OP 将是第三个。
    首先,根据我所见,OP 的解决方案确实应该有效,并且可能是正确的方法,因为引用 ID 和文件之间的关系在 .rels 中维护。文件。我采取了不同的方法,事后看来,我应该使用 OPs 解决方案,但当时我并不确切知道这些关系是如何运作的。

    鉴于 xl/workbook.xml 的这段摘录文件,它是从 Excel 生成的 XLSX 文件的片段,其中我:

  • 添加了 3 张纸(包含一些内容,以便我可以在 XML 文件中区分它们)然后保存。
  • 删除第二张表,然后再次保存。
  • 将新的第二张(最初是第三张)移到第一张前面并第三次重新保存。
  • <sheets>
    <sheet name="Third Sheet" sheetId="3" r:id="rId1"/>
    <sheet name="First Sheet" sheetId="1" r:id="rId2"/>
    </sheets>
    在提取的 XML 文件中,XLSX 工作表映射根据我最初添加到工作表中的内容列出如下:
    xl/worksheets/sheet1.xml ---> sheetId="3" Third Sheet r:id="rid1"
    xl/worksheets/sheet2.xml ---> sheetId="1" First Sheet r:id="rid2"
    因此,看起来工作表名称可以这样映射:
  • sheet 的位置索引 + 1 sheets 下的元素xl/workbook.xml 中的元素文件匹配工作表文件名上的尾随 ID。
  • id 属性的尾随编号( rid1rid3 )与工作表文件名上的尾随 ID 匹配。

  • PSA:
    不要像我一样,最初假设 sheetID属性映射到工作表文件名,这是不正确的。此外,使用 OP 的解决方案,因为它更正确并且依赖于硬引用而不是我的来推断引用。

    关于excel - 链接工作表名称和 XML 文件的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52290551/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com