C#将总行添加到Excel工作表的最后一行

我有这样的语法,不会抛出任何错误,似乎是正确的代码。 但是,总行不会被添加。 什么是我的语法不正确?

if (xlApp.WorksheetFunction.CountA(WS.Cells) != 0) { lastRow = WS.Cells.Find("*", WS.Range["A1"], Excel.XlFindLookIn.xlFormulas, Excel.XlLookAt.xlPart, Excel.XlSearchOrder.xlByRows, Excel.XlSearchDirection.xlPrevious, false).Row; } else { lastRow = 1; } WS.Range["C" + lastRow + 1].FormulaR1C1 = "=SUM(R[-" + lastRow + "]C:R[-1]C)"; WS.Range["C" + (lastRow + 1) + ":N" + (lastRow + 1)].FillRight(); WS.Range["N" + lastRow + 1].FillRight(); 

编辑
我也尝试使用下面的Special Cells语法和相同的结果,没有错误,但总行不是添加到我的任何工作表

 Excel.Range MyLast = WS.Cells.SpecialCells(Excel.XlCellType.xlCellTypeLastCell, Type.Missing); Excel.Range MyRange = WS.get_Range("A1", MyLast); int MyLastRow = MyLast.Row; int MyLastColumn = MyLast.Column; WS.Range["A" + MyLastRow + 1].FormulaR1C1 = "Totals:"; WS.Range["C" + MyLastRow + 1].FormulaR1C1 = "=SUM(R[-" + lastRow + "]C:R[-1]C)"; WS.Range["C" + (MyLastRow + 1) + ":N" + (lastRow + 1)].FillRight(); WS.Range["N" + MyLastRow + 1].FillRight(); 

我不确定这是否能够帮助你,但是如果你想得到你使用过的行的总和,并且如果你的数据之间没有空行,那么使用一个countif式? find你的第一个空单元格,然后在这个单元格中(dynamic地)插入countif公式?

有点像

 xl.Range LastCell = YourSheet.Cells.SpecialCells(xl.XlCellType.xlCellTypeLastCell, Type.Missing); xl.Range MyLastCellInSpecificColumn = YourSheet.get_Range("A1", LastCell ); MyLastCellInSpecificColumn.Formula = "=COUNTIF('YourSheet'!A1:A5000,\"<>\"&\"\")"; 

这将通过你的行进行计数,并将在最后一个单元格中显示你的总行数。 再次,我不确定这将有助于您的特定任务,但我想为什么不尝试和有帮助。

我会使用“SpecialCells”成员(?),这里是一个例子:

 using System; using Excel = Microsoft.Office.Interop.Excel; namespace ExcelDemo { class Core { public static void Main(string[] args) { Excel.Application MyExcel = new Excel.Application(); // MyExcel.Visible = false; Excel.Workbook MyWorkbook = null; object Missing = System.Reflection.Missing.Value; MyWorkbook = MyExcel.Workbooks.Open("C:\\Temp\\Document.xlsx"); Excel.Sheets MySheets = MyWorkbook.Worksheets; Excel.Worksheet MyWorksheet = (Excel.Worksheet)MySheets.get_Item("Tabelle1"); Excel.Range MyLast = MyWorksheet.Cells.SpecialCells(Excel.XlCellType.xlCellTypeLastCell, Type.Missing); int MyLastRow = MyLast.Row; int MyLastColumn = MyLast.Column; // MyLast.Insert(Excel.XlInsertShiftDirection.xlShiftDown, Type.Missing); Excel.Range MyLine = (Excel.Range)MyWorksheet.Rows[MyLastRow]; // Row Index MyLine.Insert(); MyWorksheet.SaveAs("C:\\Temp\\Document_Edited.xlsx"); MyWorkbook.Close(false, Missing, Missing); MyExcel.Quit(); } } }