【问题标题】:Google Sheets - Create SKU that automates content into separate columnsGoogle 表格 - 创建 SKU,将内容自动分成单独的列
【发布时间】:2021-01-21 13:29:46
【问题描述】:

我想在我的 Google 表格 CSV 中创建一个列 (SKU),当在每个单元格中手动输入数据时,它将自动填写其他 3 列(标题、颜色、大小)中的内容。

我创建了一个示例 CSV,其中突出显示了必要的列。

Column B - Product titleColumn I - ColourColumn K - SizeColumn N - SKU

SKU 输入示例(手动输入 N 列)

L24-1-000C-2-150

分配给每个部分的值细分:

L24 = Lightweight trainersS24 = Sandals

1 = Blue2 = Red

000 = 0 150 = 1.5

输出(在 B、I 和 K 列中自动生成)

'Lightweight trainers', 'Blue', '0'

'Sandals', 'Red', '1.5'

链接到 CSV

https://docs.google.com/spreadsheets/d/1E6NypRcWk4kR7WGsyEzt7Uuja8dU7SaszT9lvJPpHcg/edit?usp=sharing

【问题讨论】:

  • 您是否有一个查找部分,您在其中定义了所有这些部分及其对应部分?
  • 我目前只有示例,但这些示例在电子表格的第二个选项卡中突出显示。

标签: function google-sheets automation sku


【解决方案1】:

请试试这个:

B1:=arrayformula(IF(A1:A="Handle","Title",IF(INDEX(SPLIT(N1:N, "-"),,1)="L32","Lightweight Trainers", IF(INDEX(SPLIT(N1:N, "-"),,1)="S24","Sandals", "Boots"))))

I1:=arrayformula(IF(A1:A="Handle","Option1 Value",IF(LEN(INDEX(SPLIT(N1:N, "-"),,2))>1,"Multicoloured",IF(INDEX(SPLIT(N1:N, "-"),,2)=1,"Blue",IF(INDEX(SPLIT(N1:N, "-"),,2)=2,"Red",IF(INDEX(SPLIT(N1:N, "-"),,2)="C","Cream",))))))

K1:=arrayformula(IF(A1:A="Handle","Option2 Value",MID(N1:N,LEN(N1:N) - 2,3)))

【讨论】:

  • 这对 B 列和 I 列非常有效,谢谢!不过,我不确定 K 列。
  • 我理解正确,你想显示000、100、150、200、250而不是0、1、1.5、2、2.5?
  • 我已经更正了 K1 的公式。现在显示“000、100、150”等。
  • 谢谢。有没有办法在第二个选项卡中编辑颜色代码和标题代​​码?还是每次我想添加新颜色或标题时都必须更新公式?
【解决方案2】:

我想向您提出一个替代解决方案来解决您的问题。您可以使用Google Apps Script 修改和更新您的电子表格。通过此提议,您可以轻松地为 titlescolors 添加新代码,以及仅使用 Apps 脚本才能使用的不同新功能。

在这种情况下,您需要打开 Apps Script 点击Tools > Script editor,您将看到脚本编辑器。它基于JavaScript,它允许您使用名为Spreadsheet Service 的服务创建、访问和修改 Google 表格文件

在我附上的代码中,有一个名为 [onEdit] 的函数,每次用户修改电子表格中任何单元格的值时都会调用该函数。由于该触发器,您可以在SKU 列中写入新值,并且可以同时更新其他值。你只需要用下面的代码替换初始函数,并适应一些东西,我已经添加了cmets来帮助你理解一切:

function onEdit(e) {
 
 const sheetName = 'abc' // name of your main sheet
 const col = SpreadsheetApp.getActive().getRange('N:N').getColumn() // sku column
 
// call the function that updates the columns only in the sku column has been updated
 if ( 
   e.source.getSheetName() == sheetName &&
   e.range.columnStart == col &&
   e.range.columnEnd == col)
 {
   main(sheetName) // update function
 }
}
 
 
function main(sheetName){
 // sku
 var ss = SpreadsheetApp.getActive().getSheetByName(sheetName)
 var sku = ss.getRange('N2:N').getValues().filter(String) // N: column ok sku
 var last_row = sku.length+1
  // Title
 title = [...sku]
 title.forEach(title_func)
 ss.getRange('I2:I'+last_row).setValues(title) 
 
 // Color
 color = [...sku]
 color.forEach(color_func)
 ss.getRange('K2:K'+last_row).setValues(color)
 
 // Size
 size = [...sku]
 size.forEach(size_func)
 ss.getRange('M2:M'+last_row).setNumberFormat('@').setValues(size)
}

function title_func(item, index, arr){
 const code = item[0].split('-')[0]
 var titles = {
   'L32':'Lightweight Trainers',
   'S24':'Sandals',
   'T19':'Boots',
   'T1':'Test' 
 }
 arr[index] = [titles[code]]
}

function color_func(item, index, arr){
 const code = item[0].split('-')[1]
 var colors = {
   '1':'Blue',
   '2':'Red',
   '1M':'Multicoloured',
   'C':'Cream',
   'O':'Orange',
   'T':'Test'
 }
 arr[index] = [colors[code]]
}

function size_func(item, index, arr){
 const code = item[0].split('-')[2]
 arr[index] = [code]
}

参考

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-08-02
    • 2012-10-02
    • 2011-05-13
    • 1970-01-01
    • 2016-02-02
    • 2020-08-27
    • 1970-01-01
    相关资源
    最近更新 更多