在Excel中从C#中拖拽公式

我觉得这个问题很简单,但我找不到答案。

我想根据列“A”和“B”中的信息在列“C”中应用一列公式。 我希望公式在写公式的时候像在Excel中一样工作,然后拖动,一直创build行相关公式。

下面的方法工作,但它很慢,因为它分别写每个公式。 我确定有一个更有效的方法。

谢谢

using Excel = Microsoft.Office.Interop.Excel; ... object oOpt = System.Reflection.Missing.Value; //for optional arguments Excel.Application oXL = null; Excel.Workbook oWB = null; Excel.Worksheet oSheet = null; Excel.Range oRng = null; try { //Start Excel and get Application object. oXL = new Excel.Application(); oXL.Visible = true; //Get a new workbook. oWB = (Excel.Workbook)(oXL.Workbooks.Add(Missing.Value)); oSheet = (Excel.Worksheet)oWB.ActiveSheet; ... //Set numberOfRows //Load information to column A and B ... //Write the column of formulas for (int r = 2; r < numberOfRows + 2; r++) { oRng = oSheet.get_Range("C" + r, "C" + r); oRng.Formula = "= IF(AND(A" + r + "<> 0,B" + r + "<>2),\"YES\",\"NO\")"; } } catch (Exception theException) { String errorMessage; errorMessage = "Error: "; errorMessage = String.Concat(errorMessage, theException.Message); errorMessage = String.Concat(errorMessage, " Line: "); errorMessage = String.Concat(errorMessage, theException.Source); MessageBox.Show(errorMessage, "Error"); } finally { // Cleanup GC.Collect(); GC.WaitForPendingFinalizers(); Marshal.FinalReleaseComObject(oRng); Marshal.FinalReleaseComObject(oSheet); oWB.Close(Type.Missing, Type.Missing, Type.Missing); Marshal.FinalReleaseComObject(oWB); oXL.Quit(); Marshal.FinalReleaseComObject(oXL); } 

使用R1C1公式,并replace:

  for (int r = 2; r < numberOfRows + 2; r++) { oRng = oSheet.get_Range("C" + r, "C" + r); oRng.Formula = "= IF(AND(A" + r + "<> 0,B" + r + "<>2),\"YES\",\"NO\")"; } 

  oRng = oSheet.get_Range("C2").get_Resize(100, 1); oRng.FormulaR1C1 = "=IF(AND(RC[-2]<> 0,RC[-1]<>2),\"YES\",\"NO\")";