C# Excel工作表不会删除[C,WPF,VS 2010]

C# Excel工作表不会删除[C,WPF,VS 2010],c#,wpf,excel,visual-studio-2010,C#,Wpf,Excel,Visual Studio 2010,它完美地创建了新工作表,但没有先删除旧工作表。我甚至有两个代码删除它,但它没有。我在应用程序中有多张工作表 编辑:我刚刚注意到,第一次运行代码时,它会删除给定的工作表,但如果我再次运行它,它将不再删除这些工作表,并给我错误,因为尽管我使用app.Quit,但由于某些原因,EXCEL进程仍然在后台打开。请帮忙 其中一个问题可能是,当您试图删除工作表时,您有一个工作表。确保您没有删除上一个工作表,否则它将无法工作。所以,创建一个新的,然后删除旧的;而不是相反 编辑: 请尝试以下代码: Microso

它完美地创建了新工作表,但没有先删除旧工作表。我甚至有两个代码删除它,但它没有。我在应用程序中有多张工作表


编辑:我刚刚注意到,第一次运行代码时,它会删除给定的工作表,但如果我再次运行它,它将不再删除这些工作表,并给我错误,因为尽管我使用app.Quit,但由于某些原因,EXCEL进程仍然在后台打开。请帮忙

其中一个问题可能是,当您试图删除工作表时,您有一个工作表。确保您没有删除上一个工作表,否则它将无法工作。所以,创建一个新的,然后删除旧的;而不是相反

编辑:

请尝试以下代码:

Microsoft.Office.Interop.Excel._Application app = new Microsoft.Office.Interop.Excel.Application();
object misValue = System.Reflection.Missing.Value;

// creating new WorkBook within Excel application
Microsoft.Office.Interop.Excel._Workbook workbook = app.Workbooks.Open(System.IO.Directory.GetCurrentDirectory() + @"\Report.xlsx");

// Get current worksheet and clear it
Microsoft.Office.Interop.Excel._Worksheet worksheet1 = workbook.Worksheets[1];
Microsoft.Office.Interop.Excel._Worksheet worksheet2 = workbook.Worksheets[2];
app.DisplayAlerts = false;
worksheet1.Delete();
worksheet2.Delete();
app.DisplayAlerts = true;

//app.Worksheets[1].Delete();
//app.Worksheets[2].Delete();
workbook.Save();

Microsoft.Office.Interop.Excel._Worksheet worksheet = (Excel.Worksheet)app.Worksheets.Add(); ;
// storing header part in Excel
for (int i = 1; i < mydatatable.Columns.Count + 1; i++)
{
    worksheet.Cells[1, i] = mydatatable.Columns[i - 1].ColumnName.ToString();
}
// storing Each row and column value to excel sheet
for (int i = 0; i < mydatatable.Rows.Count; i++)
{
    for (int j = 0; j < mydatatable.Columns.Count; j++)
    {
        worksheet.Cells[i + 2, j + 1] = mydatatable.Rows[i][j].ToString();
    }
    worksheet.Columns.AutoFit();
}

Excel.Range chartRange;

Excel.ChartObjects xlCharts = (Excel.ChartObjects)worksheet.ChartObjects(Type.Missing);
Excel.ChartObject myChart = (Excel.ChartObject)xlCharts.Add(10, 80, 300, 250);
Excel.Chart chartPage = myChart.Chart;

chartRange = worksheet.get_Range("C1", "E20");
chartPage.SetSourceData(chartRange);
chartPage.ChartType = Excel.XlChartType.xlColumnClustered;
chartPage.Location(Excel.XlChartLocation.xlLocationAsNewSheet,"Chart");

workbook.Save();
workbook.Close(misValue);
Marshal.ReleaseComObject(worksheet);
app.Quit();

来源:

当时我有5个工作表,只删除了工作表[1],但显然没有这样做:好吧,我会编辑主线程,我只是注意到它在我第一次运行代码时删除了工作表,但是如果我再试一次,它就不再工作了,因为出于某种原因EXCEL仍然在后台打开,虽然我有一个应用程序。退出那里…我会更新主线程。你有任何例外吗?您能否尝试在代码周围添加一个try-and-catch,看看会发生什么?编辑:我假设它会给你这个错误,因为你第二次运行它时,它会在应用程序之前的某个地方崩溃;然后您可以看到该进程在任务管理器中仍然处于活动状态。@Apostrofix 2014-09-16 10:45:46.1701 | ERROR | PSN.MainWindow |异常消息:来自HRESULT的异常:0x800A03EC,我确信这是因为EXCEL处于打开状态,尽管我强制关闭了来自TaskManager的线程,但如果我再次运行代码,仍然会收到错误。我就是不明白为什么Excel没有关闭。你有没有试着一行一行地调试它,看看它到底在哪里崩溃?可能问题在于,在继续进行其余操作之前,您可能需要刷新文档。或者只是重新打开它,这只是猜测。@Apostrofix是的,它在chartPage.LocationExcel.XlChartLocation.xlLocationAsNewSheet,Chart;,上崩溃,可能是因为它没有删除该页面?但为什么!因为它是工作表的图表类型?我该如何解决这个问题呢?我想到的第一件事是,在创建工作表之后,您必须保存工作簿,并最终刷新/重新加载/重新打开它,也可能在删除工作表之后。那么它应该会起作用。
app.DisplayAlerts = false;
worksheetdel.Delete();
app.DisplayAlerts = true;