XLSX文件中查询定义的位置

时间:2017-11-21 12:12:01

标签: javascript excel zip oledb xlsx

使用以下自定义查询创建xlsx文件后(从typicode.com加载来自jsonplaceholder服务的数据)

let
    Source = Json.Document(Web.Contents("https://jsonplaceholder.typicode.com/posts")),
    #"Converted to Table" = Table.FromList(Source, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
    #"Expanded Column1" = Table.ExpandRecordColumn(#"Converted to Table", "Column1", {"userId", "id", "title", "body"}, {"userId", "id", "title", "body"})
in
    #"Expanded Column1"

并解压缩我希望上面的字符串(查询定义)可以在某种形式的结果文件夹结构中找到。目标是以编程方式替换URL,但不知何故我能找到的唯一查询定义是

<connection id="1" keepAlive="1" name="Query - posts" description="Connection to the 'posts' query in the workbook." type="5" refreshedVersion="6" background="1" saveData="1">
    <dbPr connection="Provider=Microsoft.Mashup.OleDb.1;Data Source=$Workbook$;Location=posts;Extended Properties=&quot;&quot;" command="SELECT * FROM [posts]"/>
</connection>

虽然我不建议任何人下载&amp;从陌生人那里运行办公室文件,我确实将xlsx上传到nofile.io

我希望formula上有一些queryTable属性,但查询表定义看起来像

<queryTable xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" name="ExternalData_1" connectionId="1" autoFormatId="16" applyNumberFormats="0" applyBorderFormats="0" applyFontFormats="0" applyPatternFormats="0" applyAlignmentFormats="0" applyWidthHeightFormats="0">
   <queryTableRefresh nextId="5">
      <queryTableFields count="4">
         <queryTableField id="1" name="userId" tableColumnId="5" />
         <queryTableField id="2" name="id" tableColumnId="2" />
         <queryTableField id="3" name="title" tableColumnId="3" />
         <queryTableField id="4" name="body" tableColumnId="4" />
      </queryTableFields>
   </queryTableRefresh>
</queryTable>

理想情况下,我想了解规范如何存储此信息的信息(因为我想在浏览器的前端手动编辑它),尽管任何允许我生成此信息的解决方案都是完美的。

1 个答案:

答案 0 :(得分:1)

尽管这是一篇过时的文章,但我添加了对“开放规范”的引用,这些引用准确地详细说明了如何以Excel(.xlsx)Office Open XML文件格式找到查询信息。如前所述,customXml\item[x].xml部分将包含DataMashup格式信息。这些包装和零件数据的规格可在以下两个链接中找到:

[MS-QDEFF]: Query Definition File Format

[MS-QDEIF]: Query Definition Interoperability Format

要注意的一件事是,顶级二进制流(在base64解码DataMashup元素的值之后)在每个Package的开头都有一个4字节版本字段(为0),在每个Package之前都有一个4字节大小的字段。 ,权限和元数据片段。提取每件物品后,就可以将其用作独立的PK Zip包装(实际上是OPC-开放包装公约)。