自动将 CSV 转换为 Excel,并将格式设置为 table

Automated way to convert CSV to Excel, and format as a table

我正在使用 Power Automate 处理 Excel 文件 - 单选项卡 Excel 文件中的数据被格式化为 table,这使得它更容易在电源自动化。

数据来源的系统生成一个 CSV 文件,我正在尝试找出一个中间层解决方案来将 CSV 文件转换为 Excel 文件,并将数据格式化为table.

我查看了 Power Automate 解决方案(任何解决方案似乎都需要 Premium 连接器),并且我查看了 PowerShell - 将 CSV 转换为 Excel 没问题,但格式为 table好像有问题。

我对其他解决方案持开放态度,但我更愿意使用 Microsoft 堆栈中的某些东西并避开其他 vendors/third 方。

如评论所述,如果您安装并导入模块 ImportExcel,那么将导入的 CSV 数据格式化为 table.

并不难
Import-CSV -Path 'X:\theInput.csv' | Export-Excel -TableName 'WhatEver' -TableStyle Medium13 -Path 'X:\'theOutput.xlsx'

风格Medium13就是一个例子。还有很多样式。您可以找到 TableStyles 枚举 here


使用 Excel COM 对象也应该可以做到这一点。

为此,在新 sheet 中加载 CSV 数据后,您需要从 table 列和单元格创建一个范围对象,并将该范围添加到 sheet s ListObjects 集合。这将 return 一个 ListObject 对象,您可以在变量中捕获它。
然后,您可以使用 $myListObject.TableStyle = "TableStyleMedium9"

在此对象上设置 .TableStyle 属性

但是,这需要您在使用 ImportExcel 模块时不需要的地方安装 Excel。

我最近不得不解决这个确切的问题,我只使用 O365 云工具实现了一个完全自动化的解决方案。

Csv 通过电子邮件发送给我,这触发了在 SharePoint 中创建 csv 文件的流程。 然后使用 运行s 一个 excel 宏来将 headers 设置为没有空格的格式,这对下一步很重要。

function main(workbook: ExcelScript.Workbook) {
    let selectedSheet = workbook.getActiveWorksheet();
    // Set range A1:H1 on selectedSheet
    selectedSheet.getRange("A1:H1").setValues([["Model", "Serial", 
    "AssignedTo", "LastCheckin", "WarrantyExpiry", "State", "Substate", 
    "DisposalReason"]]);
}

然后 运行 另一个针对它的宏将数据格式化为具有可变大小的 table,具体取决于导出的天数。

function main(workbook: ExcelScript.Workbook) {
    // Get the current worksheet.
    let selectedSheet = workbook.getActiveWorksheet();
    
    // Create a table with the used cells.
    let usedRange = selectedSheet.getUsedRange();
    let newTable = selectedSheet.addTable(usedRange, true);
}

图 1. 如何使用 Power Automate 中的 Excel 宏 Excel Macro