WPS Query之消失的区域

前言

不管是Wps Query(下文简称WQ)还是Power Query(下文简称PQ)用户可能遇到消失的区域问题,大概现象就是:

网页或客户端导出的xlsx文件,在wq或pq导入时内容显示不全。如果使用WPS表格打开,或者重新打开保存一次就变得正常。

复现问题

不管使用WQ还是PQ打开单个xlsx文件,它们都会自动生成一段基本一致的代码:

let
    源 = Excel.Workbook(File.Contents("E:\OneDrive\wq&pq测试文件.xlsx"), null, true),
    导航 = 源{[Name = "正常"]}[Data],
    提升的标题 = Table.PromoteHeaders(导航, [PromoteAllScalars = true]),
    修改列类型 = Table.TransformColumnTypes(提升的标题, {{"A1", type text}, {"B1", type text}, {"C1", type text}, {"D1", type text}})
in
    修改列类型
👋

截止12.1.0.25860版本,WPS并未开放WQ编辑器(未完成开发),用户可以使用VBA/JSA接口读取到查询内容,或者使用FindM工具查看。

下面是作者创建的一个测试文件来模拟可能存在的异常情况,并使用WQ和PQ分别测试了六种情况(按工作表顺序展示)。

dimension

之所以出现该问题,问题在于dimension,在Open XML规范中描述如下:

dimension (Worksheet Dimensions)
This element specifies the used range of the worksheet. It specifies the row and column bounds of used cells inthe worksheet. This is optional and is not required. Used cells include cells with formulas, text content, and cellformatting. When an entire column is formatted, only the first cell in that column is considered used.
[Example:
<dimension ref="A1:C2"/>
end example]

意思是该元素表示“已使用区域”,但某些网站或软件并不会正确的设置该值,比如它们可能始终设置为:<dimension ref="A1"/>。此时就会出现上一小节图片的情况。

Excel.Workbook函数

如果用户希望解决该问题,需要关注Excel.Workbook函数。由于WQ处于灰度测试中并没有文档,此处引用PQ文档-Excel.Workbook

Excel.Workbook(
    workbook as binary,
    optional useHeaders as any,
    optional delayTypes as nullable logical
) as table

在对useHeaders参数的描述中如此说:

如果为 useHeaders 指定了记录(且 delayTypes 为 null),可以提供以下记录字段:
...省略部分内容...
InferSheetDimensions:可以是 null 或逻辑 (true/false) 值,该值指示是否应通过读取工作表本身来推断包含数据的工作表区域,而不是从文件中读取维度元数据来推断。 在维度元数据不正确的情况下,这非常有用。 请注意,此选项仅支持 Open XML Excel 文件,而不支持旧版 Excel 文件。 默认值:false。

简单的说就是:InferSheetDimensions默认使用dimension来推测工作表区域。再换句话说:你可以指定InferSheetDimensionstrue让PQ通过实际内容推测工作表区域。

解决问题

至此已经解决了该问题,但由于WQ不支持编辑器,当前还无法解决这个问题。

👋

用户虽然可以读取WQ代码,但如果尝试通过VBA/JSA接口创建或覆写WQ代码,可能无法成功(能执行成功,但运行异常)。

PQ完整代码与截图:

后记

  • Excel.Workbook还有其它需要关注的问题,如表格重复问题。当用户尝试创建自己的PQ模板时,请务必多多测试。

  • 希望官方能够平衡这种兼容,能够让用户无感的切换。尤其是以后开放编辑器以后,用户可以通过编辑代码来弥补这种默认代码无法读取的问题。

江苏省
浏览 110
收藏
6
分享
6 +1
1
+1
全部评论 1
 
麻辣君
打卡学习
· 云南省
1
回复