如何从单元格中获取字面值(公式)而不是结果值?
所需示例:
当然,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()查找行.
在下面的XAML中,按钮将拉伸以适合窗口的宽度,包括在调整窗口大小时.但是,TextBlock和蓝色框居中.你将如何改变它:1)TextBlock在Button内,但左边是实际的Button宽度(即在Window的左侧)2)Canvas在Button内部,但是右对齐实际按钮宽度(即窗口右侧)
似乎"HorizontalAlignment = 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) 我正在使用在某些情况下运行__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),或者至少改变行为?
我正在尝试设置值列表的映射。一行中的一个单元格包含一个 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)