2016-03-30 20 views
0

こんにちは、私はC#でより良くなるようにしています。今は、既存のExcelシートからいくつかの値を選択しようとしています。例:B4からC16。だから私は何か他の値を置き換えることができますが、私はそれを動作させることはありません。C#Excel複数のセルに書き込む

これが私の小さな方法であって、

public void writeExcelFile() 
     { 

      string path = @"C:\Users\AAN\Documents\Visual Studio 2015\Projects\WorkWithExcel\WorkWithExcel\bin\Debug\PROJEKTSTATUS_GESAMT_neues_Layout.xlsm"; 
      oXL = new Excel.Application(); 
      oXL.Visible = true; 
      oXL.DisplayAlerts = false; 
      mWorkBook = oXL.Workbooks.Open(path, 0, false, 5, "", "", false, Excel.XlPlatform.xlWindows, "", true, false, 0, true, false, false); 
      //Get all the sheets in the workbook 
      mWorkSheets = mWorkBook.Worksheets; 
      //Get the allready exists sheet 
      mWSheet1 = (Excel.Worksheet)mWorkSheets.get_Item(1); 
      //Excel.Range range = mWSheet1.UsedRange; 
      //int colCount = range.Columns.Count; 
      //int rowCount = range.Rows.Count; 
      int countRows = mWSheet1.UsedRange.Rows.Count; 
      int countColumns = mWSheet1.UsedRange.Columns.Count; 
      object[,] data = mWSheet1.Range[mWSheet1.Cells[1, 1], mWSheet1.Cells[countRows, countColumns]].Cells.Value2; 

      for (int index = 1; index < 15; index++) 
      { 
       mWSheet1.Cells[countRows + index, 1] = countRows + index; 
       mWSheet1.Cells[countRows + index, 2] = "test" + index; 
      } 

      //Excel.Worksheet sheet = workbook.ActiveSheet; 
      //Excel.Range rng = (Excel.Range)sheet.get_Range(sheet.Cells[1, 1], sheet.Cells[3, 3]); 

      mWorkBook.SaveAs(path, Excel.XlFileFormat.xlOpenXMLWorkbookMacroEnabled,Missing.Value, Missing.Value, Missing.Value, Missing.Value, Excel.XlSaveAsAccessMode.xlExclusive,Missing.Value, Missing.Value, Missing.Value,Missing.Value, Missing.Value); 
      mWorkBook.Close(Missing.Value, Missing.Value, Missing.Value); 
      mWSheet1 = null; 
      mWorkBook = null; 
      oXL.Quit(); 
      GC.WaitForPendingFinalizers(); 
      GC.Collect(); 
      GC.WaitForPendingFinalizers(); 
      GC.Collect(); 
     } 

私はget_rangeでそれを試してみましたが、私は、これはaviableではないという例外を取得。 これはMicrosoft.Office.Interopライブラリ14と関係があります。次にオブジェクト[、]で試してみましたが、私が動作させなければならないのは、すべてのセルを使ってテストを挿入するだけですが、何も選択しないことです。だから、どんな助けも素晴らしいだろう。

あなたのお時間をありがとうございました、そして、私の英語を申し訳ありません。

EDIT:少なくとも読み取りプロセスが動作し、選択範囲をループします。私はfinnaly私が好きな細胞を選択することができます作業溶液を得た多くの試行の後

 public void writeExcelFile() 
     { 

      String inputFile = @"C:\Users\AAN\Documents\Visual Studio 2015\Projects\WorkWithExcel\WorkWithExcel\bin\Debug\PROJEKTSTATUS_GESAMT_neues_Layout.xlsm"; 

      Excel.Application oXL = new Excel.Application(); 


#if DEBUG 
      oXL.Visible = true; 
      oXL.DisplayAlerts = true; 
#else 
       oXL.Visible = false; 
       oXL.DisplayAlerts = false; 
#endif 


      //Open the Excel File 
      Excel.Workbook oWB = oXL.Workbooks.Open(inputFile); 

      String SheetName = "Gesamt"; 
      Excel._Worksheet oSheet = oWB.Sheets[SheetName]; 

      String start_range = "B4"; 
      String end_range = "R81"; 

      Object[,] values = oSheet.get_Range(start_range, end_range).Value2; 

      int t = values.GetLength(0); 
      for (int i = 1; i <= values.GetLength(0); i++) 
      { 
       String val = values[i, 1].ToString(); 
      } 

      oXL.Quit(); 

     } 

答えて

0

:ここ は、作業コードです。マビーは、より良い方法がありますが、私にとっては期待どおりに動作します。

コード:

 public void writeExcelFile() 
     { 

      try 
      { 

       String inputFile = @"C:\Users\AAN\Documents\Visual Studio 2015\Projects\WorkWithExcel\WorkWithExcel\bin\Debug\PROJEKTSTATUS_GESAMT_neues_Layout.xlsm"; 

       Excel.Application oXL = new Excel.Application(); 


#if DEBUG 
       oXL.Visible = true; 
       oXL.DisplayAlerts = true; 
#else 
       oXL.Visible = false; 
       oXL.DisplayAlerts = false; 
#endif 


       //Open a Excel File 
       Excel.Workbook oWB = oXL.Workbooks.Add(inputFile); 
       Excel._Worksheet oSheet = oWB.ActiveSheet; 

       List<String> Name = new List<String>(); 
       List<Double> Percentage = new List<Double>(); 

       Name.Add("Anil"); 
       Name.Add("Vikas"); 
       Name.Add("Ashwini"); 
       Name.Add("Tobias"); 
       Name.Add("Stuti"); 
       Name.Add("Raghavendra"); 
       Name.Add("Chithra"); 
       Name.Add("Glen"); 
       Name.Add("Darren"); 
       Name.Add("Michael"); 


       Percentage.Add(78.5); 
       Percentage.Add(65.3); 
       Percentage.Add(56); 
       Percentage.Add(56); 
       Percentage.Add(97); 
       Percentage.Add(89); 
       Percentage.Add(85); 
       Percentage.Add(76); 
       Percentage.Add(78); 
       Percentage.Add(89); 

       oSheet.Cells[1, 1] = "Name"; 
       oSheet.Cells[1, 2] = "Percentage(%)"; // Here 1 is the rowIndex and 2 is the columnIndex. 


       //Enter the Header data in Column A 
       int i = 0; 
       for (i = 0; i < Name.Count; i++) 
       { 
        oSheet.Cells[i + 2, 1] = Name[i]; 
       } 

       //Enter the Percentage data in Column B 
       for (i = 0; i < Percentage.Count; i++) 
       { 
        oSheet.Cells[i + 2, 2] = Percentage[i]; 
       } 

       oSheet.Cells[Name.Count + 3, 1] = "AVERAGE"; 
       //Obtain the Average of the Percentage Data 
       string currentFormula = "=AVERAGE(B2:" + "B" + Convert.ToString(Percentage.Count + 1) + ")"; 

       oSheet.Cells[Percentage.Count + 3, 2].Formula = currentFormula; 

       //Format the Header row to make it Bold and blue 
       oSheet.get_Range("A1", "B1").Interior.Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.AliceBlue); 
       oSheet.get_Range("A1", "B1").Font.Bold = true; 
       //Set the column widthe of Column A and Column B to 20 
       oSheet.get_Range("A1", "B12").ColumnWidth = 20; 

       //String ReportFile = @"D:\Excel\Output.xls"; 
       oWB.SaveAs(inputFile, Excel.XlFileFormat.xlOpenXMLWorkbookMacroEnabled, 
             Type.Missing, Type.Missing, 
             false, 
             false, 
             Excel.XlSaveAsAccessMode.xlNoChange, 
             Type.Missing, 
             Type.Missing, 
             Type.Missing, 
             Type.Missing, 
             Type.Missing); 


       oXL.Quit(); 

       Marshal.ReleaseComObject(oSheet); 
       Marshal.ReleaseComObject(oWB); 
       Marshal.ReleaseComObject(oXL); 

       oSheet = null; 
       oWB = null; 
       oXL = null; 
       GC.GetTotalMemory(false); 
       GC.Collect(); 
       GC.WaitForPendingFinalizers(); 
       GC.Collect(); 
       GC.GetTotalMemory(true); 
      } 
      catch (Exception ex) 
      { 
       String errorMessage = "Error reading the Excel file : " + ex.Message; 
       MessageBox.Show(errorMessage, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 
      } 

     } 

これはブログから自分のコードのではありません。the blog where i got itそれは私のために働くように、単に編集しました。

関連する問題