基于其他文件拆分Excel文件

发布于 2025-02-13 17:21:53 字数 190 浏览 1 评论 0原文

我有2个Excel文件。寻找使用Office脚本和电源自动化的解决方案。

文件1:包含存储日期的主文件(列a =商店,B =产品,C列到Z列包含销售数据)。

文件2:带有帐户管理器的存储列表(列a =客户经理,列B =商店)

如何在多个文件中将文件1拆分(每个客户经理1)?

谢谢!

问候, 汉斯

I have 2 Excel files. Looking for a solution using Office script and Power automate.

File 1: master file containing store date (column A = store, column B = product, column C to Z contains sales data).

File 2: store list with an account manager (column A = account manager, column B = store)

How can i split file 1 in multiple files (1 per account manager)?

Thanks!

Regards,
Hans

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

自由如风 2025-02-20 17:21:53

您可以使用参数并在Office脚本中返回值以在功率自动流量中传递往返和Excel Workbook的数据。这些样本可能会为您提供帮助:

基本上,您创建的流程应该看起来像这样:

您的流程将运行一个脚本以获取列表Manager/Store列表配对中的配对。对于每个经理,第二个脚本将在文件1上运行,该脚本将接收客户经理负责的商店(从第一个脚本返回并在第二个脚本中作为参数发送)为了寻找匹配行。然后,该脚本将返回匹配文件1中的商店列表参数的行。接下来,将在您所需的位置创建模板文件的副本,另一个脚本将运行以添加从上一个脚本返回的行中的行中文件。

以下是我创建的脚本以自动化此工作流程,但是您可以以多种方式这样做。

获取经理和存储对:

 function main(workbook: ExcelScript.Workbook): AccountManager[]{
    let worksheet = workbook.getWorksheet("Account Manager Data");

    //gets the first table in the worksheet
    let table = worksheet.getTables()[0];


    let numRows = table.getRowCount();
    let tableValues = table.getRangeBetweenHeaderAndTotal().getValues();
    let managerColumn = table.getColumnByName("Account Manager").getIndex();
    let storeColumn = table.getColumnByName("Store").getIndex();
    let managerMap: Map<string, string[]> = new Map();
    let managerArray: AccountManager[] = []

    //iterate through table and add manager/store pair to managerArray
    for (let i=0; i<numRows; i++){
      let managerName = ""+tableValues[i][managerColumn]
      if (!managerMap.has(managerName)){
        managerMap.set(managerName, [""+tableValues[i][storeColumn]])
      }
      else{
        managerMap.get(managerName).push("" + tableValues[i][storeColumn]);
      }
    }

    managerMap.forEach(function (value, key){
      managerArray.push({manager: key, stores: value})
    });

    return managerArray; 
}

interface AccountManager{
  manager: string
  stores: string[]
}

获取商店数据脚本:

function main(workbook: ExcelScript.Workbook, store: string[]): (string|boolean|number)[][] {
    let table = workbook.getWorksheet("Store Data").getTables()[0];
    let numRows = table.getRowCount();
    let tableValues = table.getRangeBetweenHeaderAndTotal().getValues();
    let storeColumn = table.getColumnByName("Store").getIndex();
    let store_Data: (string|boolean|number)[][] = [];
    store_Data.push(table.getHeaderRowRange().getValues()[0])
    for (let j=0; j< store.length; j++){
      for (let i =0; i<numRows; i++){
        if (store[j] === tableValues[i][storeColumn].toString().trim()){
            store_Data.push(tableValues[i]);
        }
      }
    }
    console.log(store_Data)
    
    return store_Data
}

将数据添加到存储特定的工作簿脚本:

function main(workbook: ExcelScript.Workbook, store_Data: string[][]) {
  let selectedSheet = workbook.getWorksheet("Sheet1");

  let table_Range =selectedSheet.getRange("A1").getResizedRange(store_Data.length-1, store_Data[0].length-1)
  table_Range.setValues(store_Data);
  let table = workbook.addTable(table_Range, true);
}

希望这会有所帮助,并让我知道您是否有任何疑问!

You can use parameters and return values in an Office Script to pass data to and from and Excel workbook in a Power Automate Flow. These samples may help you:

Basically, your Flow that you create should look something like this:
Power Automate Flow to create separate workbooks from a table in a master file

Your Flow will run a script to get the list of manager/store list pairings in File 2. For each manager, a second script will run on File 1 that will take the stores that the account manager is responsible for (returned from the first script and sent as a parameter in the second script) in order to look for the matching rows. Then, that script will return the rows matching the store list parameter in File 1. Next, a copy of a template file will be created in your desired location, and another script will run to add the rows returned from the previous script to that new file.

Below are the scripts I created to automate this workflow, but you could do so in a variety of ways.

Get Manager and Store Pairs:

 function main(workbook: ExcelScript.Workbook): AccountManager[]{
    let worksheet = workbook.getWorksheet("Account Manager Data");

    //gets the first table in the worksheet
    let table = worksheet.getTables()[0];


    let numRows = table.getRowCount();
    let tableValues = table.getRangeBetweenHeaderAndTotal().getValues();
    let managerColumn = table.getColumnByName("Account Manager").getIndex();
    let storeColumn = table.getColumnByName("Store").getIndex();
    let managerMap: Map<string, string[]> = new Map();
    let managerArray: AccountManager[] = []

    //iterate through table and add manager/store pair to managerArray
    for (let i=0; i<numRows; i++){
      let managerName = ""+tableValues[i][managerColumn]
      if (!managerMap.has(managerName)){
        managerMap.set(managerName, [""+tableValues[i][storeColumn]])
      }
      else{
        managerMap.get(managerName).push("" + tableValues[i][storeColumn]);
      }
    }

    managerMap.forEach(function (value, key){
      managerArray.push({manager: key, stores: value})
    });

    return managerArray; 
}

interface AccountManager{
  manager: string
  stores: string[]
}

Get Store Data Script:

function main(workbook: ExcelScript.Workbook, store: string[]): (string|boolean|number)[][] {
    let table = workbook.getWorksheet("Store Data").getTables()[0];
    let numRows = table.getRowCount();
    let tableValues = table.getRangeBetweenHeaderAndTotal().getValues();
    let storeColumn = table.getColumnByName("Store").getIndex();
    let store_Data: (string|boolean|number)[][] = [];
    store_Data.push(table.getHeaderRowRange().getValues()[0])
    for (let j=0; j< store.length; j++){
      for (let i =0; i<numRows; i++){
        if (store[j] === tableValues[i][storeColumn].toString().trim()){
            store_Data.push(tableValues[i]);
        }
      }
    }
    console.log(store_Data)
    
    return store_Data
}

Add Data to Store Specific Workbooks Script:

function main(workbook: ExcelScript.Workbook, store_Data: string[][]) {
  let selectedSheet = workbook.getWorksheet("Sheet1");

  let table_Range =selectedSheet.getRange("A1").getResizedRange(store_Data.length-1, store_Data[0].length-1)
  table_Range.setValues(store_Data);
  let table = workbook.addTable(table_Range, true);
}

Hope this helps and let me know if you have any questions!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文