嗨,我有一个c#程序,它给出了excel2007范围,它的公式数组如下
Excel.Worksheet ws_res = (Excel.Worksheet)
wb.Worksheets.Add(mis, mis, mis, mis);
Excel.Range range_res = (Excel.Range)ws_res.get_Range("A1","HM232");
range_res.FormulaArray = "=(IF((IF(Sheet4!A1:HM232=1,0,"+
"IF(Sheet4!A1:HM232=0,1,Sheet4!A1:HM232)))=1,0,"+
"IF((IF(Sheet4!A1:HM232=1,0,"+
"IF(Sheet4!A1:HM232=0,1,Sheet4!A1:HM232)))=0,1,("+
"IF(Sheet4!A1:HM232=1,0,"+
"IF(Sheet4!A1:HM232=0,1,Sheet4!A1:HM232))))))";
我例外地说这个公式是错的.但是如果打开excel-2007并在一个新的工作表(比如sheet5)中选择范围A1:HM232并将上面的公式直接粘贴到公式栏中,然后一起按下Ctrl+Shift+Enter,它就可以完成所有的工作,...你能告诉我怎么用c#做同样的事情吗?
我知道如果我使用公式数组来使用R1C1样式,但如果我使用
"=ROUND((IF(Sheet4!A1:HM232=1,0,"+
"IF(Sheet4!A1:HM232=0,1,Sheet4!A1:HM232))),0)"
它没有给我任何异常,而且它的执行方式就像我直接从c#和excel中执行Ctrl+Shift+Enter一样
对于上面的两个公式,我确实将A1:HM232改为R1C1:R232C221,同样,较短的公式在c#中可以很好地工作,但较长的公式不能!
发布于 2011-02-11 10:52:48
我还有一个更复杂的问题,那就是我正在为之开发的人使用西班牙语的Excel。
要让公式在非英语版本的Excel中工作,你必须使用一组不同的函数,如FormulaLocal而不是Formula,FormulaR1C1Local intead of FormulaR1C1等。
一个非常简单的例子,比如=RC[-1]+R4C4
确实适用于FormulaArray,但是像=SUMA(SI(FC(-2)=1;F8C(-3):F1000C(-3);0))
这样包含excel函数名和分号作为参数标记的东西就不行--你会得到一个运行时错误。
我发现的解决办法是做一些类似=SUM(IF(AC9=1,AB$8:AB$1000,0))
的事情,即翻译成英语并使用本地公式,而不是R1C1...and。
这很令人惊讶,因为
a)发布的建议是将R1C1用于数组公式和
b)如果使用英文函数名,通常会出现运行时错误。
发布于 2009-06-25 10:20:21
发布于 2009-06-25 10:25:02
我认为您需要指定公式的第一个单元格,即使您将公式应用于整个选定内容:
range_res("A1").FormulaArray = "=(IF((IF(Sheet4!A1:HM232=1,0,"+ etc
https://stackoverflow.com/questions/1045408
复制相似问题