2016-12-19 3 views
1

Ich habe diese Syntax, die keinen Fehler wirft, und scheint, als ob es der richtige Code ist. Die Gesamtzeilen werden jedoch nicht hinzugefügt. Was ist falsch in meiner Syntax?C# Hinzufügen der gesamten Zeile zur letzten Zeile des Excel-Arbeitsblatts

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
ich auch versucht, die unten Special Cells Syntax und gleiches Ergebnis, keinen Fehler, aber insgesamt Zeile nicht

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(); 

Antwort

0

jedem meiner Arbeitsblatt hinzugefügt würde ich (?) das „Special“ Mitglied, hier ist ein Beispiel:

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

Vielen Dank für diese Stichprobe, ich habe meinen Beitrag bearbeitet, um zu zeigen, wie ich dies zu erreichen versuchte, aber hatte das gleiche Ergebnis. No Total Row hinzugefügt, aber Code läuft fehlerfrei. –

+0

Ich habe den Code modifiziert und versuche 'MyLine.Insert();' zu verwenden. Was ist das Ergebnis? – Essigwurst

+0

Der aktualisierte Code fügt eine neue Zeile zwischen den letzten zwei Datenzeilen ein. Es wird immer noch keine Gesamtzeile hinzugefügt. –

1

ich bin nicht sicher, ob dies wil Ich helfe Ihnen überhaupt, aber wenn Sie die Summe Ihrer benutzten Reihen erhalten möchten, und wenn Sie keine leeren Reihen zwischen Ihren Daten haben, wäre es nicht einfacher, eine Countif-Formel zu verwenden? Etwas in der Art, die erste leere Zelle zu finden und dann (dynamisch) die Countif-Formel in diese Zelle einzufügen?

Art wie

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,\"<>\"&\"\")"; 

Dies wird durch Ihre Reihen zählen und die Zahl Ihrer gesamten Zeilen in der letzten Zelle angezeigt werden soll. Noch einmal, ich bin mir nicht sicher, dass dies mit Ihrer speziellen Aufgabe helfen wird, aber ich dachte, warum nicht versuchen, und hilfreich sein.

+0

Das ist ein guter Ansatz, ich habe nicht über COUNTIF nachgedacht() –

Verwandte Themen