使用Power Query 方式处理:
导入数据后,打开高级编辑器,增加以下代码
源 = Excel.Workbook(File.Contents("C:\Users\Administrator\Desktop\示例.xlsx"), null, true),
Sheet1_Sheet = 源{[Item="Sheet1",Kind="Sheet"]}[Data],
更改的类型 = Table.TransformColumnTypes(Sheet1_Sheet,{{"Column1", type any}, {"Column2", type any}, {"Column3", type any}, {"Column4", type any}, {"Column5", type any}, {"Column6", type any}}),
//上面的为自动生成,下面为新增内容:
表=更改的类型, //重命名,避免因为步骤名称不对,下面代码错误
第一个日期 = Date.From(表{0}[Column1]),
年 = Date.Year(第一个日期),
月 = Date.Month(第一个日期),
该月天数 = Date.DaysInMonth(第一个日期),
日期所在行 = List.Transform({Date.Day(第一个日期)..该月天数}, (x)=>List.PositionOf(表[Column1],#date(年,月,x)) ),
去掉找不到的行 = List.Select(日期所在行, each _ >-1),
合并表格 = Table.Combine(List.Transform({0..List.Count(去掉找不到的行)-1},
(x)=>let
临时表=if x< List.Count(去掉找不到的行)-1 then
Table.FirstN(Table.RemoveFirstN(表,去掉找不到的行{x}+1),去掉找不到的行{x+1}-去掉找不到的行{x}-1)
else
Table.RemoveFirstN(表,去掉找不到的行{x}+1),
修改标题 = Table.ReplaceMatchingRows(临时表,{{ 临时表{0}, 临时表{0} & [Column1="公司"] }}) ,
删空行 = Table.SelectRows(修改标题, each [Column1]<>null),
转置 = Table.Transpose(删空行),
删空列 = Table.SelectRows(转置, each [Column1]<>null),
转置恢复 = Table.Transpose(删空列),
提升的标题 = Table.PromoteHeaders(转置恢复, [PromoteAllScalars=true])
in
提升的标题
)),
合并后标题 = Table.ColumnNames(合并表格),
替换的值 = Table.ReplaceValue(合并表格,null,0,Replacer.ReplaceValue,合并后标题)
in
替换的值
示例文件
处理结果:
最后选中第一列,右击——组合依据,依次对后面每一列添加求和聚合函数:
最后一步暂时没试出来怎么实现自动组合求和(也就是如何在标题名称不固定的情况下,如何写Table.Group方法!)