使用搜索提取多列
Extracting Multiple Columns with Search
我无法让 table 跨多列提取信息。目前我有两个 excel sheets:
第一个 excel sheet 是一个主日志,里面有一个巨大的 table 填满了超级 link 和我公司所有工程标准程序的名称.这是我从中提取信息的 table。
第二个excelsheet如下图。它的目的是在搜索栏中输入的任何单词 returns 中第一个 excel sheet 的任何部分结果。目前,我的 table 仅通过搜索一列并返回 hyperlink 表示的 esp 来运行。
Here是原来的link截图。感谢@Jvdv 的帮助。
我想要的是以下任何一种..
- 在搜索栏中输入关键字后。结果显示与该 ESP 关联的关键字以及 ESP 名称和 Hyperlink。
例如:如果我输入“销售”一词。我提取的第一列 table 将显示为 "Material Vendor Identification Chart",关键字列将包含 "materials sales",而 hyperlink 列将提供相应的 hyperlink。
或
- 在搜索栏中输入关键字后。该程序搜索 ESP 的关键字和名称,并且 returns 与 hyperlink.
部分匹配
以下解决方案使用 Power Query,它在 Excel 2010 和更高版本 中可用。我的是 Excel 2016.
为了解决您的问题,我使用了以下示例数据。它存储在一个名为 Tbl_ESP.
的 Table 中
请注意,我添加了一个名为 Hyperlinks 的新列,其中显示每个功能性 hyperlinks 后面的 link在 A 列中。目前没有 excel 公式可以自动执行此操作,因此您必须使用 VBA 或手动复制并粘贴 link 在新列中。此步骤的目的是让 hyperlinks 在搜索结果 Table.
中工作
在另一个工作表中,我创建了以下 Table,名为 Tbl_Search,您可以在其中输入关键字,它是 不区分大小写。在我的解决方案中,您只能使用“space”来分隔每个关键字(您可以更改设置以使用逗号或其他首选分隔符来分隔每个关键字)。
然后您可以使用 From Table 函数在 Data 选项卡中将两个 table 添加到Power Query 编辑器。您可以先添加一个,然后退出编辑器并使用相同的功能添加另一个。查看这篇文章了解其他方法:The Complete Guide to Installing Power Query
I started working with Tbl_Search first in the Power Query Editor with the following steps:
- 将文本字符串更改为 小写;
- 将文本拆分 "space" 并将每个单词放在一个新行中;
- 向下填充在只有一个关键字的情况下覆盖空值的列;
- 将列转换为 列表。
我已将此查询重命名为 搜索,稍后将用作搜索条件。
Then I started working on the Tbl_ESP in the following steps:
- 添加了一个名为
Combined
的自定义列 以将 Description
和 KeyWords
列中的字符串连接成一个带有 space介于两者之间;
- 将上一步的文本字符串转换为小写;
- 添加了另一个名为
Match
的自定义列,使用以下公式,旨在找出 Search 列表包含在上一步的文本字符串中,如果是 returns TRUE 否则 FALSE;
=List.Count(Splitter.SplitTextByAnyDelimiter(Search)([Combined]))>1
- 过滤
Match
列只有 TRUE;
- 删除除
Description
、KeyWords
和 Hyperlinks
之外的其他列;
- 添加了一个索引列从1开始并将此列移动到table的开头,然后我有以下内容:
现在是时候关闭并加载上述table到您的搜索table所在的工作表。
最后一步是在上面table的末尾添加一列并输入以下公式:
=IF(ISBLANK(G4),LEFT(E4,6)&" Obsolete",HYPERLINK(G4,LEFT(E4,6)))
那么你应该有以下内容:
您可以选择隐藏 G 列 Hyperlinks
这样它只会显示嵌入了 hyperlink 的 ESP # 的名称。
每次在搜索单元格中输入一串新的关键词时,您需要转到数据选项卡以刷新数据,或按 Ctrl+Alt+F5
获取更新的搜索结果。
请注意,以上所有步骤均使用Power Query Editor 的内置函数,您可以google在线获取所有诀窍,但请随时有问题问我。
以下是幕后代码,仅供参考:
对于Tbl_Search
let
Source = Excel.CurrentWorkbook(){[Name="Tbl_Search"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Source,{{"Search", type text}}),
#"Lowercased Text" = Table.TransformColumns(#"Changed Type",{{"Search", Text.Lower, type text}}),
#"Split Column by Delimiter" = Table.ExpandListColumn(Table.TransformColumns(#"Lowercased Text", {{"Search", Splitter.SplitTextByDelimiter(" ", QuoteStyle.Csv), let itemType = (type nullable text) meta [Serialized.Text = true] in type {itemType}}}), "Search"),
#"Filled Down" = Table.FillDown(#"Split Column by Delimiter",{"Search"}),
Column1 = #"Filled Down"[Search]
in
Column1
对于Tbl_ESP
let
Source = Excel.CurrentWorkbook(){[Name="Tbl_ESP"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Source,{{"ESP #", type text}, {"Description", type text}, {"KeyWords", type text}}),
#"Added Custom1" = Table.AddColumn(#"Changed Type", "Combined", each [Description]&" "&[KeyWords]),
#"Lowercased Text" = Table.TransformColumns(#"Added Custom1",{{"Combined", Text.Lower, type text}}),
#"Added Custom" = Table.AddColumn(#"Lowercased Text", "Match", each List.Count(Splitter.SplitTextByAnyDelimiter(Search)([Combined]))>1),
#"Filtered Rows" = Table.SelectRows(#"Added Custom", each ([Match] = true)),
#"Removed Other Columns" = Table.SelectColumns(#"Filtered Rows",{"Description", "KeyWords", "Hyperlinks"}),
#"Added Index" = Table.AddIndexColumn(#"Removed Other Columns", "Index", 1, 1),
#"Renamed Columns" = Table.RenameColumns(#"Added Index",{{"Index", "#"}}),
#"Reordered Columns" = Table.ReorderColumns(#"Renamed Columns",{"#", "Description", "KeyWords", "Hyperlinks"})
in
#"Reordered Columns"
我无法让 table 跨多列提取信息。目前我有两个 excel sheets:
第一个 excel sheet 是一个主日志,里面有一个巨大的 table 填满了超级 link 和我公司所有工程标准程序的名称.这是我从中提取信息的 table。
第二个excelsheet如下图。它的目的是在搜索栏中输入的任何单词 returns 中第一个 excel sheet 的任何部分结果。目前,我的 table 仅通过搜索一列并返回 hyperlink 表示的 esp 来运行。
Here是原来的link截图。感谢@Jvdv 的帮助。
我想要的是以下任何一种..
- 在搜索栏中输入关键字后。结果显示与该 ESP 关联的关键字以及 ESP 名称和 Hyperlink。
例如:如果我输入“销售”一词。我提取的第一列 table 将显示为 "Material Vendor Identification Chart",关键字列将包含 "materials sales",而 hyperlink 列将提供相应的 hyperlink。
或
- 在搜索栏中输入关键字后。该程序搜索 ESP 的关键字和名称,并且 returns 与 hyperlink. 部分匹配
以下解决方案使用 Power Query,它在 Excel 2010 和更高版本 中可用。我的是 Excel 2016.
为了解决您的问题,我使用了以下示例数据。它存储在一个名为 Tbl_ESP.
的 Table 中请注意,我添加了一个名为 Hyperlinks 的新列,其中显示每个功能性 hyperlinks 后面的 link在 A 列中。目前没有 excel 公式可以自动执行此操作,因此您必须使用 VBA 或手动复制并粘贴 link 在新列中。此步骤的目的是让 hyperlinks 在搜索结果 Table.
中工作在另一个工作表中,我创建了以下 Table,名为 Tbl_Search,您可以在其中输入关键字,它是 不区分大小写。在我的解决方案中,您只能使用“space”来分隔每个关键字(您可以更改设置以使用逗号或其他首选分隔符来分隔每个关键字)。
然后您可以使用 From Table 函数在 Data 选项卡中将两个 table 添加到Power Query 编辑器。您可以先添加一个,然后退出编辑器并使用相同的功能添加另一个。查看这篇文章了解其他方法:The Complete Guide to Installing Power Query
I started working with Tbl_Search first in the Power Query Editor with the following steps:
- 将文本字符串更改为 小写;
- 将文本拆分 "space" 并将每个单词放在一个新行中;
- 向下填充在只有一个关键字的情况下覆盖空值的列;
- 将列转换为 列表。
我已将此查询重命名为 搜索,稍后将用作搜索条件。
Then I started working on the Tbl_ESP in the following steps:
- 添加了一个名为
Combined
的自定义列 以将Description
和KeyWords
列中的字符串连接成一个带有 space介于两者之间; - 将上一步的文本字符串转换为小写;
- 添加了另一个名为
Match
的自定义列,使用以下公式,旨在找出 Search 列表包含在上一步的文本字符串中,如果是 returns TRUE 否则 FALSE;
=List.Count(Splitter.SplitTextByAnyDelimiter(Search)([Combined]))>1
- 过滤
Match
列只有 TRUE; - 删除除
Description
、KeyWords
和Hyperlinks
之外的其他列; - 添加了一个索引列从1开始并将此列移动到table的开头,然后我有以下内容:
现在是时候关闭并加载上述table到您的搜索table所在的工作表。
最后一步是在上面table的末尾添加一列并输入以下公式:
=IF(ISBLANK(G4),LEFT(E4,6)&" Obsolete",HYPERLINK(G4,LEFT(E4,6)))
那么你应该有以下内容:
您可以选择隐藏 G 列 Hyperlinks
这样它只会显示嵌入了 hyperlink 的 ESP # 的名称。
每次在搜索单元格中输入一串新的关键词时,您需要转到数据选项卡以刷新数据,或按 Ctrl+Alt+F5
获取更新的搜索结果。
请注意,以上所有步骤均使用Power Query Editor 的内置函数,您可以google在线获取所有诀窍,但请随时有问题问我。
以下是幕后代码,仅供参考:
对于Tbl_Search
let
Source = Excel.CurrentWorkbook(){[Name="Tbl_Search"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Source,{{"Search", type text}}),
#"Lowercased Text" = Table.TransformColumns(#"Changed Type",{{"Search", Text.Lower, type text}}),
#"Split Column by Delimiter" = Table.ExpandListColumn(Table.TransformColumns(#"Lowercased Text", {{"Search", Splitter.SplitTextByDelimiter(" ", QuoteStyle.Csv), let itemType = (type nullable text) meta [Serialized.Text = true] in type {itemType}}}), "Search"),
#"Filled Down" = Table.FillDown(#"Split Column by Delimiter",{"Search"}),
Column1 = #"Filled Down"[Search]
in
Column1
对于Tbl_ESP
let
Source = Excel.CurrentWorkbook(){[Name="Tbl_ESP"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Source,{{"ESP #", type text}, {"Description", type text}, {"KeyWords", type text}}),
#"Added Custom1" = Table.AddColumn(#"Changed Type", "Combined", each [Description]&" "&[KeyWords]),
#"Lowercased Text" = Table.TransformColumns(#"Added Custom1",{{"Combined", Text.Lower, type text}}),
#"Added Custom" = Table.AddColumn(#"Lowercased Text", "Match", each List.Count(Splitter.SplitTextByAnyDelimiter(Search)([Combined]))>1),
#"Filtered Rows" = Table.SelectRows(#"Added Custom", each ([Match] = true)),
#"Removed Other Columns" = Table.SelectColumns(#"Filtered Rows",{"Description", "KeyWords", "Hyperlinks"}),
#"Added Index" = Table.AddIndexColumn(#"Removed Other Columns", "Index", 1, 1),
#"Renamed Columns" = Table.RenameColumns(#"Added Index",{{"Index", "#"}}),
#"Reordered Columns" = Table.ReorderColumns(#"Renamed Columns",{"#", "Description", "KeyWords", "Hyperlinks"})
in
#"Reordered Columns"