使用以下自定义查询创建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=""" 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>
理想情况下,我想了解规范如何存储此信息的信息(因为我想在浏览器的前端手动编辑它),尽管任何允许我生成此信息的解决方案都是完美的。
答案 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-开放包装公约)。