0
私はしばらくの間これを苦労してきました。 私はMicrosoft.Office.Interop.Excelを使用しています。私は以下を実行しようとしています。空のワークシート - Microsoft.Office.Interop.Excel
私は4つのワークシートでExcelで作成したテンプレートを持っています。 ワークシートを埋めようとすると、デバッグ時に正しいワークシートが選択され、各Rangeオブジェクトにエラーが発生していないことがわかりますが、常に空のワークシートが1つあります。
この方法には2回の反復があります。私が反復の1つをコメントアウトすると、他の反復は完全に機能します。だから、基本的に私は常に1つの空のワークシートで終わります。
私が間違っているアイデアは何ですか?
ありがとうございます!
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();
}
}
}
私のShameeeee! –