2012-03-05 2 views
0

Я уже некоторое время борюсь с этим. Я использую Microsoft.Office.Interop.Excel и пытаюсь сделать следующее:Пустой лист - Microsoft.Office.Interop.Excel

У меня есть шаблон, который я сделал в Excel с 4 рабочими листами. Когда я пытаюсь заполнить листы, всегда остается один рабочий лист, который пуст, хотя при отладке я вижу, что выбран правильный рабочий лист, и каждому объекту Range присваивается значение без каких-либо ошибок.

В этом методе есть 2 итерации. Если я прокомментирую одну из итераций, другая итерация работает отлично. Поэтому в основном я всегда получаю один пустой лист.

Любая идея, где я ошибаюсь ???

Спасибо заранее!

public void generateReport() 
    { 
     Excel.Application xlApp; 
     Excel.Workbook xlWorkBook; 
     Excel.Worksheet xlWorkSheet; 
     object misValue = System.Reflection.Missing.Value; 
     Excel.Range range; 
     int row = 3; 
     xlApp = new Excel.Application(); 
     if (xlApp == null) 
     { 
      MessageBox.Show("Kon Excel niet starten, kijk uw softwareinstelling na !"); 
      return; 
     } 

     string workbookPath = Path.Combine(Environment.CurrentDirectory, @"..\report.xlsx"); 
     xlWorkBook = xlApp.Workbooks.Open(workbookPath, 
      0, false, 5, "", "", false, Excel.XlPlatform.xlWindows, "", 
      true, false, 0, true, false, false); 


     xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1); 
     ArrayList dossiers = DossierDao.Instance.getDossiers("SELECT * FROM dossier ORDER BY referentie;"); 
     foreach (Object o in dossiers) 
     { 
      File f = (File)o; 
      range = xlWorkSheet.get_Range("A" + row); 
      range.Value = d.Reference; 
      range = xlWorkSheet.get_Range("B" + row); 
      range.Value = d.Info; 
      row++; 
     } 

     xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(3); 
     ArrayList facturen = FactuurDao.Instance.getAllFacturen(); 
     foreach (Object o in facturen) 
     { 
      Invoice i = (Invoice)o; 
      range = xlWorkSheet.get_Range("A" + row); 
      range.Value = f.InvoiceNumber; 
      range = xlWorkSheet.get_Range("B" + row); 
      range.Value = f.Amount; 
      row++; 
     } 
     try 
     { 
      xlApp.Visible = true; 
     } 
     catch 

      //... 
     } 

     releaseObject(xlApp); 
     releaseObject(xlWorkBook); 
     releaseObject(xlWorkSheet); 
     releaseObject(xlWorkSheet); 
    } 

    private void releaseObject(object obj) 
    { 
     try 
     { 
      System.Runtime.InteropServices.Marshal.ReleaseComObject(obj); 
      obj = null; 
     } 
     catch (Exception ex) 
     { 
      obj = null; 
      MessageBox.Show("Unable to release the Object " + ex.ToString()); 
     } 
     finally 
     { 
      GC.Collect(); 
     } 
    } 
} 

ответ

1

Вы не переинициализация row между обработкой досье и facturen. Итак, если у вас есть 50 досье, в строках с 3 по 52, тогда код начнет помещать facturen в строку 53 следующего листа.

+0

Shameeeee на мне !!! –

Смежные вопросы