我写了一个示例方法,在此示例中,检查Excel是否存在sheet表,存在就删除该sheet表。
/// <summary>
/// 判断Excel是否存在sheet表,存在就删除
/// </summary>
/// <param name="filePath"></param>
public void CheckExcel(string filePath)
{
Microsoft.Office.Interop.Excel.Application app = new Microsoft.Office.Interop.Excel.Application();
Microsoft.Office.Interop.Excel.Sheets sheets;
Microsoft.Office.Interop.Excel.Workbook workbook = null;
object oMissiong = System.Reflection.Missing.Value;
try
{
workbook = app.Workbooks.Open(filePath, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong);//打开Excel
sheets = workbook.Worksheets;
app.DisplayAlerts = false;
//app.Visible = true;//是否可见Excel
int sheetCount = workbook.Worksheets.Count;//获得sheet总数
for (int i = 1; i <= sheetCount; i++)
{
Microsoft.Office.Interop.Excel.Worksheet worksheet = (Microsoft.Office.Interop.Excel.Worksheet)sheets.get_Item(i);//读取第一张表
worksheet.Activate();
if (worksheet == null)
return;
Microsoft.Office.Interop.Excel.Range range = (Microsoft.Office.Interop.Excel.Range)worksheet.Rows[1, oMissiong];
range.Delete(Microsoft.Office.Interop.Excel.XlDirection.xlDown);
workbook.Save();
}
workbook.Close();
app.Workbooks.Close();
app.Quit();
GcCollect();
}
catch (Exception ex)
{
return;
}
//finally
//{
// System.Diagnostics.Process[] process = System.Diagnostics.Process.GetProcessesByName("wps");//获得wps进程
// foreach (System.Diagnostics.Process p in process)
// {
// p.Kill();结束wps进程
// }
//}
}
public void GcCollect()//垃圾收集
{
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
GC.WaitForPendingFinalizers();
}