C# .Net Excel互操作删除工作表
我正在尝试使用interop excel类(适用于excel 2003)从.Net c#3.5应用程序的excel文档中删除工作表 我尝试了很多事情,比如:C# .Net Excel互操作删除工作表,c#,.net,excel,interop,C#,.net,Excel,Interop,我正在尝试使用interop excel类(适用于excel 2003)从.Net c#3.5应用程序的excel文档中删除工作表 我尝试了很多事情,比如: Worksheet worksheet = (Worksheet)workbook.Worksheets[1]; worksheet.Delete(); 它不工作,也不会抛出任何错误…经过一个多小时的查找,我找到了答案: xlApp.DisplayAlerts = false; worksheet.Delete(); xlApp.Disp
Worksheet worksheet = (Worksheet)workbook.Worksheets[1];
worksheet.Delete();
它不工作,也不会抛出任何错误…经过一个多小时的查找,我找到了答案:
xlApp.DisplayAlerts = false;
worksheet.Delete();
xlApp.DisplayAlerts = true;
还需要注意的是,工作簿必须至少包含一个工作表;这意味着您无法删除工作簿中的所有工作表。在处理删除Excel工作表时,有两件重要的事情需要知道:
// Remove LAST worksheet
MyWorkBook.Worksheets[3].Delete();
// and only then remove the second (which is the last one)
MyWorkBook.Worksheets[2].Delete();
或者,您可以删除列表中的第二项([2])两次,这将得到相同的结果 MyWorkBook.Worksheets[1].Delete();
尝试按名称查找工作表:
var app = new Microsoft.Office.Interop.Excel.Application();
var workbook = app.Workbooks.Add();
((Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets["Sheet3"]).Delete();
我们从c#控制台应用程序中删除excel工作表,如下所示:
Microsoft.Office.Interop.Excel.Worksheet worksheet =
(Worksheet)workbook.Worksheets["Worksheet_Name" (or) "Countings"];
worksheet.Delete();
我们可以像这样删除工作表
Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();
if (xlApp == null)
{
return;
}
xlApp.DisplayAlerts = false;
string filePath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)
+ "\\Sample.xlsx";
Excel.Workbook xlWorkBook = xlApp.Workbooks.Open(filePath, 0, false, 5, "", "", false, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "", true, false, 0, true, false, false);
Excel.Sheets worksheets = xlWorkBook.Worksheets;
worksheets[4].Delete();
worksheets[3].Delete();
xlWorkBook.Save();
xlWorkBook.Close();
releaseObject(worksheets);
releaseObject(xlWorkBook);
releaseObject(xlApp);
用这个
static void releaseObject(object obj)
{
try
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
obj = null;
}
catch (Exception ex)
{
obj = null;
throw ex;
}
finally
{
GC.Collect();
}
}
是的,这是正确的,如果你试图删除它们,你会得到一个COMException。谢谢-你为我节省了数小时的调试时间。“如果你删除第二张工作表,第三张工作表将取代她的位置……”这很明显,但也很容易忽略。你的答案并不能回答问题。如果索引错误,您将得到一个异常。但梅勒索斯写道,他没有得到任何例外。正确答案来自梅勒索斯本人。见下文。我太习惯于使用网络应用了!我忘记了在处理web表单时有时需要警报抑制,这很常见:)这与表单无关。这是Excel中的一个错误。如果将Excel.Application.Visible设置为false,则Excel在通过自动删除工作表时不应显示任何警报“关闭工作表时可能会丢失数据,Bla Bla”。在MS Excel 2013中,它会生成类似于
工作表(“原始”)的宏。选择ActiveWindow.SelectedSheets.Delete
,将其转换为C#code,它不起作用,为什么?
static void releaseObject(object obj)
{
try
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
obj = null;
}
catch (Exception ex)
{
obj = null;
throw ex;
}
finally
{
GC.Collect();
}
}