2016-12-19 3 views
1

У меня есть этот синтаксис, который не вызывает ошибок и кажется, что это правильный код. Однако общие строки не добавляются. Что неверно в моем синтаксисе?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(); 

EDIT
Я также попытался с помощью ниже 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(); 

ответ

0

Я хотел бы использовать член «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(); 
     } 
    } 
} 
+0

Спасибо за выборку, я отредактировал свое сообщение, чтобы показать, как я пытался это сделать, но имел тот же результат. Нет Total Row, но код работает без ошибок. –

+0

Я изменил код, попробуйте использовать 'MyLine.Insert();'. Каков результат? – Essigwurst

+0

Обновленный код вставляет новую строку между двумя последними строками данных. Еще не добавляется общая строка. –

1

Я не уверен, что этот wil Я вам вообще помогу, но если вы хотите получить сумму своих использованных строк, и если у вас нет пустых строк между вашими данными, не проще ли просто использовать формулу countif? Что-то на линии поиска вашей первой пустой ячейки, а затем вставляя в эту ячейку (динамически) формулу 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,\"<>\"&\"\")"; 

это будет рассчитывать через ваши ряды и будет отображать количество ваших общих строк в последней ячейке. Опять же, я не уверен, что это поможет с вашей конкретной задачей, но я подумал, почему бы не попробовать и не помогать.

+0

Это хороший подход, я не думал об использовании COUNTIF() –