AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / user-478711

Dave's questions

Martin Hope
Dave
Asked: 2024-08-28 21:37:15 +0800 CST

如何在 Excel 中计算任意数量的跟踪任务的总时间持续时间?

  • 7

我正在使用 Microsoft 365 Excel,并尝试创建一个电子表格来跟踪每天向不同费用编号收取的费用时间。费用永远不会跨越午夜。

可以收取任意数量的费用号码,并且任何给定的费用号码可能有多个与之关联的时间段。

我正在尝试创建一个电子表格,它可以自动适应任意数量的费用号码以及给定费用号码的任意数量的费用。

下面是我为跟踪我一天中花在各种充电号码上的时间而创建的表格示例:

时间追踪示例 1

为了说明我想要完成的任务,我手动创建了一个表格来总结我需要的时间(按费用编号):

按费用编号汇总的时间示例 1

由于第一个表格的格式为表格,我只需右键单击“总计”行并选择“插入”,就会添加一个新行,并将“持续时间”和“累计总持续时间”列中的公式复制下来。我只需要在“开始”、“停止”和“费用编号”列中输入值。此表中的所有内容都会根据需要自动更新。

目标是当我更新第一个表时让第二个表自动更新。下面是一个例子,上面添加了几行,我希望第二个表能够自动更新:

时间跟踪示例 2

按费用编号汇总的时间示例 2

我认为数据透视表可能是可行的方法,但到目前为止我已经能够使其发挥作用。

当我在第一个表中添加新行时,如何让第二个表也自动更新?

更新以添加评论中请求的信息

展示您迄今为止的工作——使用什么公式来查找持续时间、为同一工作编号添加项目等等。

开始和停止列的格式为Time 1:30 PM。持续时间(第一个表)、累计总持续时间和持续时间(第二个表)列的格式为Custom h:mm。

持续时间(第一个表)的公式很简单=[@Stop]-[@Start]。(同样,午夜边界永远不会被跨越,所以这就足够了。)

累计总工期的公式为=C2+IF(ISTEXT(G1), 0, G1)。调用ISTEXT()可防止“添加”标题行。

第二张表中没有公式(即,相同工作的时间)。我手动将值放入该表中,并手动计算总数,以演示我试图以自动化方式完成的工作。

microsoft-excel
  • 2 个回答
  • 131 Views
Martin Hope
Dave
Asked: 2023-11-20 22:35:22 +0800 CST

Power Query:合并现有表列表的子集

  • 5

我在 Excel for Microsoft 365 中使用 Power Query。

我有一个 Power Query,其第一步是组合一组表:

let
    Source = Table.Combine({One_foo_bar, Two_foo_bar, Three_foo_bar, Four_foo_bar, Five_foo_bar, Six_foo_bar, Seven_foo_bar, Eight_foo_bar}),
    // ...
    #"Result" = ...
in
    #"Result"

问题是并非所有指定的表都可能存在。表的任何子集都可以存在。那些确实存在的都在ThisWorkbook. 如果缺少任何一个,上面显示的 M 代码将抛出错误。

如果模式匹配可以帮助解决这个问题,那么表名都遵循模式 * _foo_bar。M 似乎不支持这种类型的模式匹配,但我包含此声明,以防有人知道我不知道的事情,并且可以利用此事实来制定解决方案。

我如何修改此代码以合并确实存在的表?

microsoft-excel
  • 3 个回答
  • 66 Views
Martin Hope
Dave
Asked: 2023-10-02 23:50:17 +0800 CST

Power Query:拆分多层单元

  • 6

我在 Excel for Microsoft 365 中使用 Power Query。

我有以下源数据:

源数据

我正在尝试确定所需的转换以获得以下所需的结果:

期望的结果

源数据在Col2的单元格中具有数据层次结构。我想将数据保留在Col2的第一个层次结构级别,并且我想为第二个和后续层次结构级别创建单独的列( Col2.1、Col2.2、...、Col2.N )。

单元格中的各个值由换行符 ( #(lf) ) 分隔,给定值的层次结构级别由其缩进级别确定(每个缩进级别由三个空格字符表示)。

层次结构中给定值的父级由顺序确定。例如,String1.2位于第二个缩进级别。因此,仅基于缩进级别,它可以分层放置在 或String1下String2。但是,由于它出现在 之前String1和之前String2,因此必须按层次结构将其放置在 之下String1。

请注意,我选择的String * 名称是经过净化的名称,它们是为了说明我想要完成的任务而选择的。我的实际数据没有可预测的前导前缀,并且并不暗示其词汇内容的层次结构。因此,分裂逻辑不能基于值本身。它必须仅基于一个值的缩进级别以及相对于其他值及其缩进级别的顺序。

这是我到目前为止的 M 语言代码:

let
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Col1", type text}, {"Col2", type text}}),
    #"Split Column by Delimiter" = Table.ExpandListColumn(Table.TransformColumns(#"Changed Type", {{"Col2", Splitter.SplitTextByDelimiter("#(lf)", QuoteStyle.None), let itemType = (type nullable text) meta [Serialized.Text = true] in type {itemType}}}), "Col2")
in
    #"Split Column by Delimiter"

此 M 语言代码产生以下实际结果:

实际结果

接下来显示源数据/期望结果的其他示例。

示例1 源数据
来源1

示例 1 期望的结果
所需 1

示例2 源数据
来源2

示例2 期望的结果
期望2

示例3 源数据
来源3

示例3期望的结果
期望 3

示例4 源数据
来源4

实施例4 期望的结果
期望 4

示例5 源数据
来源5

实施例5 期望的结果
期望 5

实施例6 源数据
来源6

实施例6 期望的结果
期望 6

实施例7 源数据
来源7

实施例7 期望的结果
期望 7

实施例8 源数据
来源8

实施例8 期望的结果
期望 8

实施例9 源数据
来源9

实施例9 期望的结果
期望 9

实施例9 实际结果
实际 9

我必须在 M 语言代码中添加哪些额外的应用步骤才能将给定的源数据示例转换为上面显示的所需结果?

microsoft-excel
  • 1 个回答
  • 307 Views
Martin Hope
Dave
Asked: 2023-09-27 23:35:34 +0800 CST

Power Query:将多值单元格拆分为行而不创建所有可能的组合

  • 5

我在 Excel for Microsoft 365 中使用 Power Query。

我的一些列具有多值单元格。我需要将这些单元格分成行。考虑这个源数据:

源数据

我的Power Query的M语言代码如下;

let
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Pet Type", type text}, {"Items Needed", type text}, {"Item Purpose", type text}, {"Typical Name", type text}}),
    #"Split Items Needed" = Table.ExpandListColumn(Table.TransformColumns(#"Changed Type", {{"Items Needed", Splitter.SplitTextByDelimiter("#(lf)", QuoteStyle.None), let itemType = (type nullable text) meta [Serialized.Text = true] in type {itemType}}}), "Items Needed"),
    #"Split Item Purpose" = Table.ExpandListColumn(Table.TransformColumns(#"Split Items Needed", {{"Item Purpose", Splitter.SplitTextByDelimiter("#(lf)", QuoteStyle.None), let itemType = (type nullable text) meta [Serialized.Text = true] in type {itemType}}}), "Item Purpose")
in
    #"Split Item Purpose"

这导致了实际结果:

实际结果

这是期望的结果:

期望的结果

我必须如何调整 Power Query 才能获得所需的结果?

microsoft-excel
  • 1 个回答
  • 51 Views
Martin Hope
Dave
Asked: 2023-09-19 01:59:34 +0800 CST

Power Query:按存储为文本参数的名称引用列 (REDUX)

  • 5

我在 Excel for Microsoft 365 中使用 Power Query。

我要提出的问题与我最近提出的问题非常相似,并且给出了一个优雅的答案。这个问题在这里: Power Query:按存储为文本参数的名称引用列

在上面链接的问题中,我需要根据位置不变(始终是第一列)的列的空性来过滤行,但其名称很难使用,因为它存储在文本参数中。答案是降级标题(从而为它们提供可预测的名称),根据Column1的空性进行过滤,并提升标题(以恢复其原始名称)。保存列名称的文本参数最终没有发挥作用。

在当前问题中,我再次需要根据名称存储在文本参数中的列的空性来过滤行,但这一次,它并不总是第一列。它可以是第一、第二、第三或第四列。所以这一次,我确实必须使用指定列名的参数。

我将再次提出我原来的问题,并进行修改以反映这一新要求。

这是我的源数据表(其表名为Source):

第 1 列 第2栏 第3栏 第4栏 姓名
11 21 31 41 狗
12 22 32 42 猫
23 33 43 鸵鸟
14 24 44 长尾小鹦鹉
15 25 35 45 鳟鱼

我定义了一个文本参数:

  • FilterColumn指定将用于过滤空值的列的名称。它可以采用任何值Col1、Col2、Col3或Col4。

我的目标是开发一个 Power Query 来过滤掉由指定的列中存在空值的FilterColumn行。

假设我设置FilterColumn为Col3,所需的结果是:

第 1 列 第2栏 第3栏 第4栏 姓名
11 21 31 41 狗
12 22 32 42 猫
23 33 43 鸵鸟
15 25 35 45 鳟鱼

这是我的 Power Query 的 M 语言代码:

let
    Source = Excel.CurrentWorkbook(){[Name="Source"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Col1", Int64.Type}, {"Col2", Int64.Type}, {"Col3", Int64.Type}, {"Col4", Int64.Type}, {"Name", Text.Type}}),
    // #"Filtered Rows" = Table.SelectRows(#"Changed Type", each [FilterColumn] <> null and [FilterColumn] <> "")
    // #"Filtered Rows" = Table.SelectRows(#"Changed Type", each FilterColumn <> null and FilterColumn <> "")
in
    #"Filtered Rows"

这是#"Filtered Rows"应用步骤出了问题。在上面的代码中,我展示了我在实现此应用步骤时所做的两次(注释掉的)尝试。

在第一次尝试中,我只是直接引用列名称(带括号)。但是,FilterColumn被视为感兴趣的列的名称,而不是作为文本参数保存列名称。由于没有名为FilterColumn的列,因此会引发错误:Expression.Error: The field 'FilterColumn' of the record wasn't found.

在第二次尝试中,我再次直接引用列名称,但这次没有括号。这不会引发错误,但不会过滤掉任何行。输出与输入相比没有变化。

如何根据参数命名的列中的空FilterColumn值过滤掉行?

microsoft-excel
  • 2 个回答
  • 41 Views
Martin Hope
Dave
Asked: 2023-09-15 00:29:16 +0800 CST

Power Query:按存储为文本参数的名称引用列

  • 5

我在 Excel for Microsoft 365 中使用 Power Query。

这是我的源数据表(其表名为Source):

第 1 列 第2栏 第3栏 第4栏 姓名 替代名称
11 21 31 41 狗 菲多
12 22 32 42 猫 蓬松的
23 33 43 鸵鸟 扬
14 24 44 长尾小鹦鹉 鲍勃
15 25 35 45 鳟鱼 辛迪

我定义了两个文本参数:

  • ColToKeep指定保留、、和中的哪一列。未指定的列将被丢弃。Col1Col2Col3Col4
  • NameToKeep指定要保留哪一列Name和。Alt.Name未指定的列将被丢弃。

我的目标是开发 Power Query 来:

  1. ColToKeep删除除和指定的两列之外的所有列NameToKeep
  2. 过滤掉由指定的列中存在空值的行ColToKeep

假设我设置ColToKeep为Col3并假设我设置NameToKeep为Alt.Name,所需的结果是:

第3栏 替代名称
31 菲多
32 蓬松的
33 扬
35 辛迪

然而,实际(不正确)的结果是:

第3栏 替代名称
31 菲多
32 蓬松的
33 扬
鲍勃
35 辛迪

这是我的 Power Query 的 M 语言代码:

let
    Source = Excel.CurrentWorkbook(){[Name="Source"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Col1", Int64.Type}, {"Col2", Int64.Type}, {"Col3", Int64.Type}, {"Col4", Int64.Type}, {"Name", Text.Type}, {"Alt.Name", Text.Type}}),
    #"Removed Other Columns" = Table.SelectColumns(#"Changed Type",{ColToKeep, NameToKeep}),
    // #"Filtered Rows" = Table.SelectRows(#"Removed Other Columns", each [ColToKeep] <> null and [ColToKeep] <> "")
    // #"Filtered Rows" = Table.SelectRows(#"Removed Other Columns", each ColToKeep <> null and ColToKeep <> "")
    // #"Filtered Rows" = Table.SelectRows(#"Removed Other Columns", each Table.ColumnNames(#"Removed Other Columns"){0} <> null and Table.ColumnNames(#"Removed Other Columns"){0} <> "")
in
    #"Filtered Rows"

这是#"Filtered Rows"应用步骤出了问题。在上面的代码中,我展示了我在实现此应用步骤时所做的三个(注释掉的)尝试。

在第一次尝试中,我只是直接引用列名称(带括号)。但是,ColToKeep和NameToKeep被视为对感兴趣的列的引用,而不是作为保存列名称的文本字符串。抛出错误是因为,例如,没有名为ColToKeep的列。

在第二次尝试中,我再次直接引用列名称,但这次没有括号。这不会引发错误,但我得到上面显示的不正确的输出。

在第三次尝试中,我按列的位置引用这些列,因为直到运行时我才知道要保留哪些列。执行前面的#“删除其他列”应用步骤后,将剩下两列。我假设它们的位置索引将为 0 和 1,但我怀疑在调用执行时位置索引尚未调整Table.SelectRows,因此我在过滤空值时没有引用我想要的列。这不会引发错误,但会生成上面所示的不正确输出。

如何根据参数指定的列中的空ColToKeep值过滤掉行?

microsoft-excel
  • 1 个回答
  • 26 Views
Martin Hope
Dave
Asked: 2023-08-26 00:53:16 +0800 CST

Power Query:将查询重新绑定到已删除并重新创建的工作表/表

  • 5

我在 Excel for Microsoft 365 中使用 Power Query。我使用 VBA 而不是图形界面来执行 Power Query 操作。

假设我有一个现有的工作簿,该工作簿包含两个表 和Source_t(分别Sink_t在名为Source_w和 的工作表中Sink_w),并且我有一个名为 的查询Sink_q,该查询从 中获取数据Source_t,对其执行一些转换,并将结果加载到 中Sink_t。

请考虑以下 VBA 代码:

Sub foo()
    Dim Current As Worksheet
    
    ' Side question: Is there a better way to check for the existence of a worksheet before trying to delete it?
    For Each Current In Worksheets
        If (Current.Name = "Sink_w") Then
            Application.DisplayAlerts = False
            Current.Delete
            Application.DisplayAlerts = True
            
            Exit For
        End If
    Next
    
    Worksheets.Add(After:=Worksheets(Worksheets.Count)).Name = "Sink_w"
    ActiveWorkbook.RefreshAll
End Sub

当 VBA 代码删除时Sink_w(并且这样做时也是如此Sink_t),Sink_q变成“仅连接”查询。当 VBA 代码重新创建Sink_w并执行全部刷新时,Sink_t不会重新创建(显然,查询的输出不会加载,因为没有可将其加载到的表)。

但Sink_w确实会重新创建,然后我可以使用 Power Query 图形界面的“加载到...”选项来创建一个表Sink_w并将数据加载到该表中。(但请注意,创建的表的名称Sink_q与查询的名称相同,而不是Sink_t所需的名称。如果我手动将表重命名为Sink_t,则当我刷新全部内容时,事情仍然按预期工作。)

我的问题

在 VBA 中,我怎样才能:

  1. 绑定Sink_q回Sink_t这样刷新全部将创建sink_t(在工作表中sink_w)并填充该表?
  2. 控制创建的表的名称,这样不是Sink_t吗Sink_q?
microsoft-excel
  • 1 个回答
  • 26 Views
Martin Hope
Dave
Asked: 2023-08-15 21:48:18 +0800 CST

Power Query:仅当列存在时才执行应用步骤,如果不存在则避免错误

  • 6

我在 Excel for Microsoft 365 中使用 Power Query。

请考虑以下 M 语言代码:

let
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    #"Changed Type of all to Text" = Table.TransformColumnTypes(Source,{{"A", type text}, {"B", type text}, {"C", type text}}),
    #"Removed Unneeded Columns" = Table.RemoveColumns(#"Changed Type of all to Text",{"A"}),
    ...
in
    #"Removed Duplicate Rows"

我遇到的问题是A列并不总是出现在源表中。如果存在,则必须将其移除。但是,如果将其包含在 M 语言代码中,则在它不存在的情况下会导致错误。

如何更改我的 M 语言代码以有效处理A列存在的情况和A列不存在的情况?

microsoft-excel
  • 1 个回答
  • 28 Views
Martin Hope
Dave
Asked: 2023-08-03 22:09:11 +0800 CST

Power Query:为什么文本过滤器会删除空值?

  • 5

问题陈述

我在 Excel for Microsoft 365 中使用 Power Query。

我发现将文本过滤器应用于列匹配空值的情况。这会导致不必要的行删除。我已经找到了解决此问题的方法,但我试图理解为什么会出现这种行为或者它是否是一个错误。

下面的屏幕截图显示了我未过滤的数据以及应用此 M 语言过滤器的结果:

= Table.SelectRows(#"Changed Type", each not Text.EndsWith([Column 2], "foo"))

在此输入图像描述

通过将空值替换到过滤器的谓词中,我们得到:

not Text.EndsWith(null, "foo")
not false
true

因此,应保留“anteater”行(因为“Column 2”的该行值不以“foo”结尾),但该行被丢弃。

解决方法

假设我按如下方式更改过滤器:

= Table.SelectRows(#"Changed Type", each not Text.EndsWith([Column 2], "foo") Or [Column 2] = null)

在这种情况下,我们得到:

在此输入图像描述

这是期望的结果。

我的问题

为什么“第 2 列”中具有空值的行被我的第一个过滤器过滤掉?或者,这是一个错误吗?

编辑以添加所选答案的演示

罗恩·罗森菲尔德的回答很有启发性,我认为我应该添加一个演示,说明他建议我尝试理解这种行为。当按照 Ron 的建议添加自定义列时,结果如下:

在此输入图像描述

microsoft-excel
  • 1 个回答
  • 37 Views
Martin Hope
Dave
Asked: 2023-07-31 21:44:46 +0800 CST

Excel for Microsoft 365:根据标题行中的列名称更改列宽度

  • 5

我正在使用 Excel for Microsoft 365。

在第一个工作表上,我录制了一个宏来调整列宽和行高。然后我切换到第二个工作表并运行这个宏,并意识到我遇到了下面描述的问题。

每个工作表至少包含一个(可能是多个)列,其标题行(第 1 行)中的列名称包含字符串“foo”。这些列的位置因工作表而异。

我对所有列执行一些步骤。这些步骤效果很好。但是,我想对“foo”列执行一个额外的步骤。具体来说,我想将这些列的宽度更改为 30。由于这些列的位置因工作表而异,因此这并不是那么容易做到的。

下面是说明问题的 VBA 代码:

Sub Macro1()
    ' This part works.
    Application.Goto Reference:="R1C1"
    Cells.Select

    With Selection
        .HorizontalAlignment = xlLeft
        .VerticalAlignment = xlBottom
        .WrapText = True
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ShrinkToFit = False
        .ReadingOrder = xlContext
        .MergeCells = False
    End With

    Columns("A:A").Select
    Range(Selection, Selection.End(xlToRight)).Select
    Selection.ColumnWidth = 100

    Cells.Select
    Cells.EntireRow.AutoFit
    Cells.EntireColumn.AutoFit

    ' The problem starts here.
    ' How may I do this for all columns whose column name in the header row contains "foo"?
    ' There are an arbitrary number of such columns and their locations vary from worksheet to worksheet.
    Columns("G:G").Select
    Selection.ColumnWidth = 30
    Columns("L:L").Select
    Selection.ColumnWidth = 30

    ' The rest of this macro works fine.
    Cells.Select
    Cells.EntireRow.AutoFit

    With ActiveWindow
        .SplitColumn = 0
        .SplitRow = 1
    End With

    ActiveWindow.FreezePanes = True
End Sub

在此代码中,我将列 G 和 L 设置为宽度 30。我如何更改此代码以将列名(在标题行中)包含“foo”的任何列的宽度设置为 30,而不是对列进行硬编码?

microsoft-excel
  • 1 个回答
  • 21 Views
Martin Hope
Dave
Asked: 2023-07-17 19:50:50 +0800 CST

Power Query 编辑器:为什么空值在内部联接上匹配?

  • 7

我在 Excel for Microsoft 365 中使用 Power Query 编辑器。

表A具有包含唯一标识符的列ID 。该标识符通常是数字,但有时包含文本。鉴于此,我已将此列的数据类型设置为Text。

表B还具有一个具有与上述相同属性的列ID 。

我正在使用ID作为连接列对这两个表执行内部连接(合并) :

= Table.NestedJoin(A, {"ID"}, B, {"ID"}, "B", JoinKind.Inner)

这个内部连接匹配空值,我认为这是不应该发生的。

在此输入图像描述

作为解决方法,我添加了一个应用步骤来过滤掉这些列中的空值。但是,我想找到问题的根源。

如何防止空值匹配?或者我的理解是否错误,两个空值永远不应该相互匹配?

microsoft-excel
  • 1 个回答
  • 94 Views
Martin Hope
Dave
Asked: 2023-07-14 01:04:25 +0800 CST

Power Query 编辑器:从存储为文本的数值中去除前导零

  • 6

我在 Excel for Microsoft 365 中使用 Power Query 编辑器。

表A有一列ID保存唯一标识符。该标识符通常是数字,但有时包含文本。鉴于此,我已将此列的数据类型设置为Text.

在某些情况下,该列中的值显示为数字,但有一个或多个前导零(例如,"042")。由于这被视为文本值,因此保留任何前导零。

表B还有一个IDtype列Text,它还包含一个唯一标识符,该标识符通常是数字,但有时包含文本。A.ID和之间的唯一区别B.ID是,当B.ID值是数字时,它们永远不会有前导零。

我正在尝试连接(合并)表A和B列上的表ID。由于上述情况,我丢失了许多行,因为例如ID“042”和“42”的值不匹配,因为它们被视为文本。

我想向我的查询添加一个应用步骤,从ID数字值中去除前导零。

我尝试过将 的类型更改ID为Whole Number并返回到Text。这会去除数值上的前导零ID,但会在非数值上产生错误ID。

在 Power Query 编辑器中是否有一种方法可以从存储为 的数值中去除前导零Text?

或者,有没有更好的方法来解决这个问题?

microsoft-excel
  • 2 个回答
  • 30 Views
Martin Hope
Dave
Asked: 2023-06-27 19:52:36 +0800 CST

Excel (Microsoft 365):同一工作簿中两个表的内联接

  • 5

我使用的是 Excel (Microsoft 365),并且有两个结构相同的表,每个表都有自己的工作表。这两个工作表位于同一工作簿中。第一个工作表及其保存的表都被命名为Table_A。第二个工作表及其保存的表都被命名为Table_B。两个表都有字段Field_A, Field_B, Field_C。在每个表中,Field_A每行都有一个唯一的值(即,可以被认为是数据库用语中的主键)。

我有第三个工作表,名为Join. 该工作表与上述前两个工作表位于同一工作簿中。在此工作表中,我想创建一个名为 的表Join,其中填充了如果我使用 SQL Server 而不是 Excel 时通过以下 T-SQL 语句获得的数据:

SELECT Table_A.Field_A, Table_A.Field_B, Table_B.Field_B, Table_A.Field_C, Table_B.Field_C
FROM Table_A INNER JOIN Table_B
ON Table_A.Field_A = Table_B.Field_A;

如何在 Excel 工作簿中执行此操作?请注意,由于这全部是独立于单个工作簿中的,因此我想避免将任何文件名引用作为数据源。

microsoft-excel
  • 1 个回答
  • 22 Views
Martin Hope
Dave
Asked: 2022-11-17 10:57:40 +0800 CST

在 Excel 中合并列的指定子集相等的行

  • 5

我有一个 Excel 工作表,布局如下:

软件名称 软件版本 在 host1 上吗? 在 host2 上吗? 在 host3 上吗?
应用程序1 1.0 是的
应用程序1 1.0 是的
应用程序1 1.1 是的
应用程序2 3.7.8 是的

对于上面的每一行,恰好是“Is on host1?”之一 ,“在 host2 上”,“在 host3 上”将为“是”。

在另一张纸上,我想根据上面显示的内容生成以下内容:

软件名称 软件版本 在 host1 上吗? 在 host2 上吗? 在 host3 上吗?
应用程序1 1.0 是的 是的
应用程序1 1.1 是的
应用程序2 3.7.8 是的

用文字说明这一点,我想让列组合(软件名称、软件版本)对于每一行都是唯一的(即在数据库中作为主键),然后能够查看其余列以查看哪个列主机有这个软件/版本。

除了在 VBA 中手动执行此操作之外,Excel 的任何内置功能都可以执行此操作吗?

(顺便说一句,这是我正在处理的一次性情况,正好涉及三个主机。鉴于此,我不需要解决数据库规范化问题并拆分出一个“主机”表。)

microsoft-excel
  • 1 个回答
  • 21 Views
Martin Hope
Dave
Asked: 2022-01-20 12:46:36 +0800 CST

Rocky Linux 8 SSH 会话超时

  • 5

我通过 SSH 从 Windows 10 上运行的 PuTTY 连接到 Rocky Linux 8 上的 OpenSSH 服务器。我使用的是Bash shell。这些会话在一段时间不活动后关闭。我没有测量超时,但它似乎是几个小时的数量级。我试图了解这些会话是如何关闭的。我将在下面解释我已排除的潜在原因。

sshd_config ClientAliveInterval

/etc/ssh/sshd_config已ClientAliveInterval设置为0。

Bash 环境变量 TMOUT

我已经TMOUT在整个文件系统的所有常规文件中进行了搜索。此环境变量未在任何地方设置。

网络基础设施

我突然想到,也许我的客户端和服务器之间的防火墙可能正在监视连接并主动关闭(也许通过 TCP FIN)那些已经空闲一段时间的连接。我已经排除了这种可能性,注意到从同一 Windows 主机到其他 Linux 主机(不是 Rocky 8)的会话不会关闭。这些其他主机与有问题的 Rocky 8 主机位于同一防火墙后面,并且也具有ClientAliveInterval和TMOUT设置如上所述。

请求帮助

由于不活动,还有哪些其他机制可能会关闭会话?

先感谢您。

linux bash
  • 1 个回答
  • 567 Views
Martin Hope
Dave
Asked: 2021-04-06 15:57:16 +0800 CST

从远程副本恢复本地 Git 存储库而不影响工作目录

  • 5

我有一个本地 Git 存储库,我保留如下备份副本:

cd /path/to/local/repo
git init
git add -A
git commit -m "Initial commit"
git clone --bare /path/to/repo_backup/my_repo.git
cd /path/to/repo_backup/my_repo.git
git init --bare --shared
cd /path/to/local/repo
git remote add origin /path/to/repo_backup/my_repo.git
git push --set-upstream origin master

在我外出两周的时候,我们的 IT 部门单方面决定删除我本地 repo 的.git目录。然后对工作目录进行了更改,我无法运行git status来查看进行了哪些更改。

我需要从备份(即远程)存储库中恢复本地存储库而不影响工作目录(即我不能直接执行git clone)。

我通过以下方式尝试过:

cp /path/to/repo_backup/my_repo.git /path/to/local/repo/.git
cd /path/to/local/repo

但是,当我运行git status时,出现此错误:

fatal: this operation must be run in a work tree

如何在不影响工作目录的情况下正确恢复本地存储库?

git linux
  • 2 个回答
  • 135 Views
Martin Hope
Dave
Asked: 2020-11-17 15:51:26 +0800 CST

将 DNS 服务器绑定到接口

  • 5

我故意不为这个问题指定我的平台,尽管我会说我的“感兴趣的平台”是 Linux 和 Windows 10。

假设我有 N 个网卡。每个都连接到单独的网络,其中一个通过默认网关提供 Internet 访问。其他网络都是私有的,没有通往 Internet 或彼此的路径。所有网络都使用 RFC 1918 地址空间。主机未设置为在网络之间路由。

每个私有网络都有一个与之关联的唯一域名,并运行自己的私有权威 DNS 服务器来为该唯一域名提供 DNS 记录。这些名称不属于全球 DNS。(我通过将它们设为我已注册的域的子域来保证这一点,并且我运行公共权威 DNS 服务器,这些服务器不为上述子域提供记录。)

假设网络号和关联的域名如下:

  • my-unique-subdomain-1.my-unique-domain.com
    • 主机驻留在10.0.1.0/24
    • 我的主机在接口eth1上的 IP 地址为10.0.1.1
    • DNS 服务器位于10.0.1.253和10.0.1.254
  • my-unique-subdomain-2.my-unique-domain.com
    • 主机驻留在10.0.2.0/24
    • 我的主机在接口eth2上的 IP 地址为 10.0.2.1
    • DNS 服务器位于10.0.2.253和10.0.2.254
  • ...
  • my-unique-subdomain-N.my-unique-domain.com
    • 主机驻留在10.0.N.0/24
    • 我的主机在接口ethN上有 IP 地址10.0.N.1
    • DNS 服务器位于10.0.N.253和10.0.N.254

如上所示,我的主机有两个与每个接口关联的 DNS 服务器(主要和次要)。这些可以通过 DHCP 或手动分配;真的没关系。我的 ISP 的 DNS 服务器将与可以访问 Internet 的网络接口相关联。我用于专用网络的专用 DNS 服务器将与其他网络接口相关联。

我很难理解我的主机如何知道使用哪个 DNS 服务器来解析给定的域名。实际定义的任何给定 FQDN 都可以通过一个网络接口进行解析——通过适当的私有 DNS 服务器,或者如果不适用,则通过公共 DNS 服务器。要知道使用哪个 DNS 服务器,主机必须知道被查询的主机所在的网络号,但要知道这一点,它必须先进行 DNS 查询!这里似乎存在先有鸡还是先有蛋的问题。

假设我想解析foo.my-unique-subdomain-3.my-unique-domain.com。我的主机如何确定它需要将查询发送到位于10.0.3.253或10.0.3.254的 DNS 服务器?

windows-10 linux
  • 1 个回答
  • 633 Views
Martin Hope
Dave
Asked: 2020-07-09 07:16:44 +0800 CST

在 Linux Bash 脚本中获取本地用户密码到期前的天数

  • 6

我正在使用 RHEL 6.9。

如何在 Bash 脚本中获取本地用户密码到期前的天数?

我努力了:

chage -l <username>
passwd -S <username>

这些都没有提供直接的答案。

前者提供格式为“Sep 29, 2019”的到期日期字符串。

后者提供了一个日期字符串,表示上次设置密码的日期(格式如上),还提供了密码有效的天数。

由于难以解析(嗯,在 Bash 脚本中很困难),两者都可以用来推导密码到期前的天数。我希望有一种方法可以直接获取密码到期前的天数。

社区中有人知道我该怎么做吗?

谢谢,戴夫

linux bash
  • 1 个回答
  • 435 Views
Martin Hope
Dave
Asked: 2020-05-15 09:16:00 +0800 CST

yum:识别安装的版本发布比回购版本发布更新的软件包

  • 6

我使用yum管理我的 RHEL 6 / 7 系统,该系统指向一个本地存储库,该存储库是 Red Hat 官方存储库的副本。

其他人已经安装了一些软件包的更新版本,如下所示:

rpm -i <package name>-<newer version>-<release number of newer version>.rpm

我宁愿他们给我 .rpm 因为我可以把它放在我的 repo 中,运行createrepo以使用较新的包版本重建 repo,然后按如下方式更新包:

yum update <package name>

我如何识别已安装包的版本发布比我的仓库中的版本发布新的安装包?

请注意,这与yum update相反,后者标识已安装的软件包,其中已安装的软件包 version-release 比我的 repo 中的 version-release 旧。

linux redhat-enterprise-linux
  • 1 个回答
  • 286 Views
Martin Hope
Dave
Asked: 2020-03-14 22:20:26 +0800 CST

在标准 Linux 权限不足时限制对文件的访问

  • 5

我管理多个 RHEL 6.9 系统。在每个系统上,一个名为/app_dir的特定目录是我们项目的脚本、可执行文件、配置文件和日志存储的顶级目录。这个顶级目录下的树是广泛而深入的。/app_dir下的所有文件和子目录都归用户user1所有,并且具有group1的组成员身份。人类用户始终以user1身份运行,并且user1的主要组是group1。

有些系统供制造团队成员在交付给客户之前测试我们生产的硬件小部件,有些系统用于开发用于测试硬件小部件的软件。

所有人类用户都以user1身份登录到 GNOME 桌面。然后通过打开终端并从命令行启动应用程序来运行我们的主 (GUI) 应用程序。

制造系统需要保持原始状态。但是,由于各种原因,开发人员会更改脚本或配置文件以在制造系统上测试某些内容,而忘记恢复更改。一个经典的问题。

然后,当生产团队成员使用该系统时,它要么根本不工作,它会给出一个错误的通过(这是最坏的情况,因为它会导致我们交付一个有故障的硬件小部件),或者它会给出一个错误的失败(由于没有交付实际上适合交付的硬件小部件而导致收入损失)。

所以,我需要找到一种方法来锁定(即可读但不可写)我们目录结构中的脚本和配置文件,这样,除了少数明确定义的例外,它们不能被更改,除非由具有特权。标准的 Linux 权限是不够的,因为根据本文第一段中的描述,它们允许任何人类用户(始终以user1身份运行)随意更改任何文件。

在我们生命周期的这一点上,不幸的是,我们没有在目录结构、用户、组等方面进行太多更改的灵活性。

我在想 SELinux 会提供一个解决方案。

实际情况要复杂得多,但作为一个例子,考虑这个目录结构:

/app_dir/bin/
/app_dir/bin/widget_tester
/app/dir/bin/<other executables>

/app_dir/config/
/app_dir/config/widget_info.txt
/app_dir/config/test_tolerances.txt
/app_dir/config/<other configuration files>

/app_dir/scripts/
/app_dir/scripts/script_1.py
/app_dir/scripts/script_2.sh
/app_dir/scripts/<other scripts>

/app_dir/logs/
/app_dir/logs/<log files>

/app_dir/bin/及其下的所有内容都应该被锁定,没有例外。

/app_dir/config/及其下的所有内容都应锁定,但widget_info.txt 除外。制造团队成员需要能够提供有关即将测试的硬件小部件的信息。

/app_dir/scripts/及其下的所有内容都应锁定,但script_1.py 除外。

/app_dir/logs/以及它下面的所有内容都应该可以由我们的可执行文件和脚本写入,但对于人类(即user1)来说,它应该只能是可读的。

SELinux 是适合这项工作的工具吗?如果是这样,类型/类型强制是使用的机制吗?如果两者都没有,我还能把学习精力集中在哪里?

更新 1

请注意,我所描述的让所有人以user1身份运行的设置比我到达该项目早了几年。我知道它有它的缺点(但实际上有正当的理由我不需要在这里讨论)。这是一个真实的制造操作。从业务角度来看,我们的设置重组是完全不可行的。管理层不允许。

我指出这一点是为了强调我并不是要求对我们当前的设置进行批评。我试图从比我更了解 SELinux 的社区专家那里找出我是否通过努力学习 SELinux 来找出正确或错误的树。我还请求指向我可能不知道的其他 Linux 机制的指针,这可能会解决这个问题。(即,虽然我目前的重点是 SELinux,但我不想将讨论限制在 SELinux 上。)

linux redhat-enterprise-linux
  • 2 个回答
  • 126 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何减少“vmmem”进程的消耗?

    • 11 个回答
  • Marko Smith

    从 Microsoft Stream 下载视频

    • 4 个回答
  • Marko Smith

    Google Chrome DevTools 无法解析 SourceMap:chrome-extension

    • 6 个回答
  • Marko Smith

    Windows 照片查看器因为内存不足而无法运行?

    • 5 个回答
  • Marko Smith

    支持结束后如何激活 WindowsXP?

    • 6 个回答
  • Marko Smith

    远程桌面间歇性冻结

    • 7 个回答
  • Marko Smith

    子网掩码 /32 是什么意思?

    • 6 个回答
  • Marko Smith

    鼠标指针在 Windows 中按下的箭头键上移动?

    • 1 个回答
  • Marko Smith

    VirtualBox 无法以 VERR_NEM_VM_CREATE_FAILED 启动

    • 8 个回答
  • Marko Smith

    应用程序不会出现在 MacBook 的摄像头和麦克风隐私设置中

    • 5 个回答
  • Martin Hope
    Vickel Firefox 不再允许粘贴到 WhatsApp 网页中? 2023-08-18 05:04:35 +0800 CST
  • Martin Hope
    Saaru Lindestøkke 为什么使用 Python 的 tar 库时 tar.xz 文件比 macOS tar 小 15 倍? 2021-03-14 09:37:48 +0800 CST
  • Martin Hope
    CiaranWelsh 如何减少“vmmem”进程的消耗? 2020-06-10 02:06:58 +0800 CST
  • Martin Hope
    Jim Windows 10 搜索未加载,显示空白窗口 2020-02-06 03:28:26 +0800 CST
  • Martin Hope
    andre_ss6 远程桌面间歇性冻结 2019-09-11 12:56:40 +0800 CST
  • Martin Hope
    Riley Carney 为什么在 URL 后面加一个点会删除登录信息? 2019-08-06 10:59:24 +0800 CST
  • Martin Hope
    zdimension 鼠标指针在 Windows 中按下的箭头键上移动? 2019-08-04 06:39:57 +0800 CST
  • Martin Hope
    jonsca 我所有的 Firefox 附加组件突然被禁用了,我该如何重新启用它们? 2019-05-04 17:58:52 +0800 CST
  • Martin Hope
    MCK 是否可以使用文本创建二维码? 2019-04-02 06:32:14 +0800 CST
  • Martin Hope
    SoniEx2 更改 git init 默认分支名称 2019-04-01 06:16:56 +0800 CST

热门标签

windows-10 linux windows microsoft-excel networking ubuntu worksheet-function bash command-line hard-drive

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve