小编Den*_*s P的帖子

如何从单元格而不是值中获取公式?

如何从单元格中获取字面值(公式)而不是结果值?

所需示例:

  • A2:"Foo"
  • B3:"= A2" - 所以显示"Foo"
  • C3:"= CELL("公式",B3)"显示"= A2"

当然,CELL()不支持"公式"参数,仅用于演示意图.我查看了功能列表,没有任何内容跳出来.

使用案例:
我想引用另一行,并根据该引用从行中获取其他单元格.放置显式行号将不起作用(例如B3 ="2"),因为在修改行时它不会自动更正.具体来说,我希望一行中的多个列相对于另一行中的列,并且能够在一个位置更改相对行,而无需编辑每个列.

通常,要相对于另一行创建一行,您可以将列值设置为:"= A2 + 5"和"= B2 + 10".这意味着A列是"相对行值+5"而B列是"相对行值+ 10".如果要更改相对行(例如,更改为第56行),则需要将每个列更改为"= A56 + 5"和"= B56 + 10".如何通过编辑一个字段来实现这一目标?

对于一个实际示例,考虑一个作为任务列表的工作表,并且为了计算结束日期,每个工作表可能被标记为"跟随"另一个,但您希望能够更改参考任务并支持N:任务之间的关系.

[更新]

实际上,我确实有一个特定用例的解决方案.但我仍然对最初的问题感到好奇:获取单元格中值后面的公式.

解决方案1: - A2:"= ROW()" - B2:"Foo" - C3:"= A2"显示"2"并自动调整以在添加/删除行时保持参考

解决方案2:

另一种解决方案是添加唯一的"id"列并按id存储引用,然后使用LOOKUP()查找行.

google-sheets google-sheets-formula

15
推荐指数
3
解决办法
2万
查看次数

如何在WPF中获取按钮内容以填充宽度

在下面的XAML中,按钮将拉伸以适合窗口的宽度,包括在调整窗口大小时.但是,TextBlock和蓝色框居中.你将如何改变它:1)TextBlock在Button内,但左边是实际的Button宽度(即在Window的左侧)2)Canvas在Button内部,但是右对齐实际按钮宽度(即窗口右侧)

似乎"Horizo​​ntalAlignment = Stretch"在这种情况下不起作用,并且,当使用自动调整大小时,Button内的网格只会增长到其内容所需的最小宽度.

<Window
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    x:Name="Window"
    Title="test"
    Width="640" Height="480">

    <Grid x:Name="LayoutRoot">
        <Button Height="30">
            <Grid HorizontalAlignment="Stretch">
                <TextBlock Text="Sample Text" HorizontalAlignment="Stretch" TextAlignment="Left"></TextBlock>
                <Canvas Width="40" Background="AliceBlue" HorizontalAlignment="Right"></Canvas>
            </Grid>
        </Button>
    </Grid>
</Window>
Run Code Online (Sandbox Code Playgroud)

wpf xaml autosize

7
推荐指数
2
解决办法
1万
查看次数

使用__debugbreak()尝试/捕获

我正在使用在某些情况下运行__debugbreak()的第三方C++ DLL,并且在执行此操作之前不检查IsDebuggerPresent().当场景发生在调试器外部时(例如,运行应用程序的最终用户),这会导致我的应用程序"崩溃".我想抓住这个并自己处理它,或者至少忽略它.

我实际上已经有一个未处理的异常过滤器来将SEH转换为C++异常一段时间,所以它有点奇怪,它不起作用.

::SetUnhandledExceptionFilter(OnUnhandledException);
Run Code Online (Sandbox Code Playgroud)

我一直在做一些直接测试,标准__try/__除了工作,所以我可以将每个调用包装成DLL作为后备,但似乎是如果__try/__除了工作,那么:: SetUnhandledExceptionFilter()应该也工作.

    __try
    {
        __debugbreak();
    }
    __except (EXCEPTION_EXECUTE_HANDLER)
    {
        printf("caught");
    }
Run Code Online (Sandbox Code Playgroud)

try/catch(...)不起作用.

    try
    {
        __debugbreak();
    }
    catch (...)
    {
        printf("caught");
    }
Run Code Online (Sandbox Code Playgroud)

_set_se_translator()也不起作用.

https://msdn.microsoft.com/en-us/library/ms679297(VS.85).aspx上的MSDN文档中可以看出它应该作为结构化异常.我意识到这是DebugBreak()的文档,但我也测试过它,并且遇到了同样的问题,即使是"catch(...)".

我正在和/ EHa一起编译.

如何捕获__debugbreak(asm INT 3),或者至少改变行为?

c++ winapi exception-handling exception

2
推荐指数
1
解决办法
1438
查看次数

Google 表格 - 如何使用 LOOKUP 和 SPLIT 将行引用列表映射到值

我正在尝试设置值列表的映射。一行中的一个单元格包含一个 ID 或行号列表,同一行中的另一个单元格包含一个映射值列表。

如果您正在做一些基本的数学运算,这对于 JOIN、ARRAYFORMULA 和 SPLIT 来说非常简单,例如:

A1: =1,2,3
A2: =JOIN(",",ArrayFormula(SPLIT(A1,",")+1)) 
A2: displays "2,3,4" (correct)
Run Code Online (Sandbox Code Playgroud)

这似乎不适用于 LOOKUP 和 SPLIT(也尝试过 LOOKUP 和 REGEXEXTRACT)。具体来说,即使使用可变参数,我也可以让它工作,但是一旦我更改了行,值就会中断。例子:

A column: ids (e.g. 1,2,3,4)
C column: names (e.g. "Apple", "Banana", "Custard")
E7: =1,2,3
F7: =JOIN(",",ArrayFormula(LOOKUP(SPLIT($E7, ","), $A:$A, $C:$C)))
F7 displays "Apple,Banana,Custard" (correct)
Run Code Online (Sandbox Code Playgroud)

以上是正确的行为。但是,如果我将第 1 行(id 1)拖到其他位置,则公式会中断。

F7 displays "#N/A Did not find value `1` in LOOKUP evaluation"
Run Code Online (Sandbox Code Playgroud)

该行为并非特定于 LOOKUP 或 SPLIT,因为我也尝试过使用 VLOOKUP 和 REGEXEXTRACT(实际上,使用 REGEXEXTRACT 更难支持可变列表大小)。

样品表

解决方案

它在使用“=ROW()”时有效。正如 AdamL 所指出的,实际问题是 is_sorted 标志需要为 false(如果您想支持拖放)

E7: =ROW(A2)&","&ROW(A3)&","&ROW(A4) …
Run Code Online (Sandbox Code Playgroud)

mapping google-sheets gs-vlookup

1
推荐指数
1
解决办法
2134
查看次数