2016-12-19 16 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 Iはまた、以下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

このサンプルをありがとう、私はこれを達成しようとした方法を示すために投稿を編集しましたが、同じ結果がありました。合計行は追加されませんが、コードはエラーフリーです。 –

+0

私はコードを修正し、 'MyLine.Insert();'を使って試してみてください。結果は何ですか? – Essigwurst

+0

更新されたコードは、最後の2行のデータの間に新しい行を挿入します。まだ合計行が追加されていません。 –

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

関連する問題