ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
Python自动化办公应用大全 Excel 2021函数公式学习大典 Kutools for Office 套件发布 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 87|回复: 2

[求助] csv格式文件读取的列数

[复制链接]

TA的精华主题

TA的得分主题

发表于 2025-12-4 16:57 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
Csv.Document,读取的时候,需要设置[Columns = 15]。但假如我有很多个csv文件一起读取,而且列数不尽相同,怎么能够动态获取呀?哪位高手知道这个,谢谢了

Csv.Document.png

TA的精华主题

TA的得分主题

发表于 2025-12-4 21:56 来自手机 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
let
    Source = Folder.Files("你的文件夹路径"),
    // 读取所有文件但不指定列数
    ProcessEachFile = Table.AddColumn(Source, "Data", each
        Csv.Document(
            [Content],
            [Delimiter=",", Encoding=TextEncoding.Utf8, QuoteStyle=QuoteStyle.Csv]
        )
    ),
    // 找到最大列数
    #"Added MaxColumns" = Table.AddColumn(
        ProcessEachFile,
        "ColumnCount",
        each Table.ColumnCount([Data])
    ),
    maxColumns = List.Max(#"Added MaxColumns"[ColumnCount]),
   
    // 为所有表格添加缺失的列(如果需要)
    StandardizedData = Table.AddColumn(
        #"Added MaxColumns",
        "StandardData",
        each
            let
                current = [Data],
                currentCols = Table.ColumnNames(current),
                missingCols = maxColumns - List.Count(currentCols),
                // 如果有缺失列,添加空列
                result = if missingCols > 0 then
                    let
                        newCols = List.Transform(
                            {1..missingCols},
                            each "Column" & Text.From(Table.ColumnCount(current) + _)
                        ),
                        addColumns = List.Accumulate(
                            newCols,
                            current,
                            (state, colName) => Table.AddColumn(state, colName, each null)
                        )
                    in
                        addColumns
                else
                    current
            in
                result
    ),
   
    // 提升标题(如果CSV有标题行)
    PromotedData = Table.AddColumn(
        StandardizedData,
        "PromotedData",
        each
            let
                data = [StandardData],
                promoted = Table.PromoteHeaders(data, [PromoteAllScalars=true])
            in
                promoted
    ),
   
    // 展开数据
    #"Expanded PromotedData" = Table.ExpandTableColumn(
        PromotedData,
        "PromotedData",
        List.Distinct(List.Transform({1..maxColumns}, each "Column" & Text.From(_)))
    ),
   
    result = #"Removed Columns" // 继续清理数据
in
    result

TA的精华主题

TA的得分主题

发表于 2025-12-4 21:56 来自手机 | 显示全部楼层
let
    Source = Folder.Files("你的文件夹路径"),
    // 添加自定义列处理每个文件
    ProcessEachFile = Table.AddColumn(Source, "Data", each
        let
            csv = Csv.Document(
                [Content],
                [Delimiter=",", Encoding=TextEncoding.Utf8]
            ),
            // 获取实际列数
            columnCount = Table.ColumnCount(csv),
            // 动态生成列名
            promotedHeaders = Table.PromoteHeaders(
                Table.TransformColumns(
                    csv,
                    {"Column1", each if _ = null then "" else _}
                ),
                [PromoteAllScalars=true]
            )
        in
            promotedHeaders
    ),
    // 展开数据
    #"Expanded Data" = Table.ExpandTableColumn(
        ProcessEachFile,
        "Data",
        List.Distinct(List.Combine(List.Transform(ProcessEachFile[Data], each Table.ColumnNames(_))))
    ),
    // 删除不需要的列
    #"Removed Columns" = Table.RemoveColumns(#"Expanded Data",{"Content"}),
   
    result = #"Removed Columns"
in
    result
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2025-12-5 12:52 , Processed in 0.025268 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表