#Powerquery 利用M函数合并文件(CSV、Text、Xlsx)
在日常工作中,我们往往会遇到多个文件需要合并的情况,本文一起探讨一下利用M函数合并文件的案例。
由于需要合并的文件的格式不同,也需要选择不同的M函数来进行合并,本文将分享三个格式的合并案例。
首先介绍一下合并步骤,
1:对新建一个新查询,数据源选择为目标文件的路径。
2:点击转化数据
3:添加一个自定义列
4:利用M函数合并
=Csv.Document([Content],[Delimiter=",", Encoding=936])
5:展开对应TABLE数据即可完成全部操作,合并XLSX以及TEXT格式的文件也是同理可得。
解析:此处主要利用两个M函数进行合并操作
Csv.Document
Csv.Document函数说明:
Csv.Document函数:返回CSV文档的内容作为表
表达式:function(source as any, optional columns as any, optional delimiteras any, optional extraValues as nullable, optional encoding as nullableTextEncoding Type) as table
说明:此函数在使用时需要为其指定四个参数
source是CSV或TXT文件的内容,可以是任意数据类型
columns是可选参数,是要导入的字段个数,如果要导入CSV或TXT文件中的所有字段,则可以省略columns
delimiter是分隔符,为可选参数,如果未指定则使用逗号作为分隔符
extraValues是可选参数,有关extraValues的支持值,请参阅ExtraValues.Type,一般不用
encoding是编码类型,是可选参数
=Csv.Document([Content],[Delimiter=",", Encoding=936]) #CSV文件默认值为936,CSV合并M函数
=Csv.Document(File.Contents(TXT文件路径),[Delimiter=" ", Columns=字段个数,Encoding=1200)#中文TXT文件默认值为1200,TXT合并M函数
无论文件的后缀名是CSV还是TXT,这两类文件都属于文本文件。构成文本文件的内容有两部分,一个是数据内容,另一个是字段与字段间的分隔符。CSV和TXT两种文本文件最大的区别在于他们的分隔符不同。CSV文件固定用“,”进行分隔,而TXT文件的分隔符可以自由设定为任意字符串,但通常情况下默认的TXT文件的分隔符为制表符,也就是按下Tab键时生成的字符。除此之外,为了正确显示中文字符,文本文件中还需要考虑文字编码因素。在Excel中默认的中文CSV文件的文字编码为“936”,而默认的中文TXT文件的文字编码为“1200”。
因为此处是合并csv文件,一般分隔符为",",代码 [Delimiter=",", Encoding=936] , 合并txt文件,此处分割符为 " ",Encoding=1200。
Excel.workbook函数说明:
Excel.Workbook函数:从Excel工作簿返回工作表的记录
表达式:function(workbook as binary, optional useHeaders as nullablelogical, optional delayTypes as nullable logical) as table
说明:此函数可以将二进制的Excel文件信息转换为表数据,函数需要三个参数
workbook是必选参数,是要导入Excel文件的二进制信息,一般使用File.Contents函数可以将指定路径下的Excel文件保存为二进制信息
useHeaders是可选参数,一般使用null
delayTypes是可选参数,一般使用true
=Excel.Workbook([content])
其他操作同上
总结
利用M函数合并文件,需要根据目标的文件格式,选择不同的M函数,在合并CSV和TXT的文件时,需要注意分隔符和编码格式,来避免展开乱码的问题,而标准XLSX的格式则不需要,直接M函数展开即可。
以上,期待下次的分享。