Reply
 
LinkBack Thread Tools Search this Thread Display Modes
  #1   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 1
Default What am I doing wrong?

I'm trying to delete a worksheet from a workbook using C# and late
binding. What ever I try, I don't seem to get rid of the sheet. I get
no errors or no messages.

Below is the basic of the code i try to run. Can anybody please
enlighten me?

object oExcelApp = null;
object oExcelWorkbooks;
object oExcelWorkbook = null;
object oExcelSheets;
object oExcelSheet;
object[] Parameters;
int numberOfSheets = 0;
Type objClassType;

// Get the class type and instantiate Excel.
objClassType = Type.GetTypeFromProgID("Excel.Application");
oExcelApp = Activator.CreateInstance(objClassType);

//Get the workbooks collection.
oExcelWorkbooks = oExcelApp.GetType().InvokeMember("Workbooks",
BindingFlags.GetProperty, null, oExcelApp, null);

// Open a workbook
Parameters = new object[15];
Parameters[0] = @"C:\TestSet.xls"; ;
Parameters[3] = 5; // Format = Nothing.
Parameters[1] = Parameters[2] = Parameters[4] = Parameters[5] =
Parameters[6] = Parameters[7] = Parameters[8] = Parameters[9] =
Parameters[10] =
Parameters[11] = Parameters[12] = Parameters[13] = Parameters[14] =
Type.Missing;

oExcelWorkbook = oExcelWorkbooks.GetType().InvokeMember("Open",
BindingFlags.InvokeMethod, null, oExcelWorkbooks, Parameters);

oExcelSheets = oExcelWorkbook.GetType().InvokeMember("Worksheets" ,
BindingFlags.GetProperty, null, oExcelWorkbook, null);

numberOfSheets = (int)oExcelSheets.GetType().InvokeMember("Count",
BindingFlags.GetProperty, null, oExcelSheets, null);

int n;
String sheet;
Parameters = new object[1];
for (n = 1; n <= numberOfSheets; n++)
{
Parameters[0] = n;
//Get the first worksheet.
oExcelSheet = oExcelSheets.GetType().InvokeMember("Item",
BindingFlags.GetProperty, null, oExcelSheets, Parameters);

sheet = (String)oExcelSheet.GetType().InvokeMember("Name",
BindingFlags.GetProperty, null, oExcelSheet, null);

if ( String.Compare( sheet, "noleap", true) == 0)
{
// Delete the sheet!
oExcelSheet.GetType().InvokeMember("Delete",
BindingFlags.InvokeMethod, null, oExcelSheet, null);

}
}
Parameters = new object[3];
Parameters[0] = Parameters[1] = Parameters[2] = Type.Missing;

if (oExcelWorkbook != null)
{
oExcelWorkbook.GetType().InvokeMember("Save",
BindingFlags.InvokeMethod, null, oExcelWorkbook, null);

oExcelWorkbook.GetType().InvokeMember("Close",
BindingFlags.InvokeMethod, null, oExcelWorkbook, Parameters);
}
if (oExcelApp != null)
{
oExcelApp.GetType().InvokeMember("Quit",
BindingFlags.InvokeMethod, null, oExcelApp, null);
}

  #2   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 415
Default What am I doing wrong?

I don't use .Net, but..
It looks like you trying to delete the sheet "noleap".
What does the True argument to String.Compare indicate ? Case insensitive
comparison ?

Normally in Excel, when you try to Delete a sheet, there is a warning dialog
asking you to confirm the deletion.
In VB, you can turn this off with
oExcelApp.DisplayAlerts=False
resetting it to true when ready.

NickHK


roups.com...
I'm trying to delete a worksheet from a workbook using C# and late
binding. What ever I try, I don't seem to get rid of the sheet. I get
no errors or no messages.

Below is the basic of the code i try to run. Can anybody please
enlighten me?

object oExcelApp = null;
object oExcelWorkbooks;
object oExcelWorkbook = null;
object oExcelSheets;
object oExcelSheet;
object[] Parameters;
int numberOfSheets = 0;
Type objClassType;

// Get the class type and instantiate Excel.
objClassType = Type.GetTypeFromProgID("Excel.Application");
oExcelApp = Activator.CreateInstance(objClassType);

//Get the workbooks collection.
oExcelWorkbooks = oExcelApp.GetType().InvokeMember("Workbooks",
BindingFlags.GetProperty, null, oExcelApp, null);

// Open a workbook
Parameters = new object[15];
Parameters[0] = @"C:\TestSet.xls"; ;
Parameters[3] = 5; // Format = Nothing.
Parameters[1] = Parameters[2] = Parameters[4] = Parameters[5] =
Parameters[6] = Parameters[7] = Parameters[8] = Parameters[9] =
Parameters[10] =
Parameters[11] = Parameters[12] = Parameters[13] = Parameters[14] =
Type.Missing;

oExcelWorkbook = oExcelWorkbooks.GetType().InvokeMember("Open",
BindingFlags.InvokeMethod, null, oExcelWorkbooks, Parameters);

oExcelSheets = oExcelWorkbook.GetType().InvokeMember("Worksheets" ,
BindingFlags.GetProperty, null, oExcelWorkbook, null);

numberOfSheets = (int)oExcelSheets.GetType().InvokeMember("Count",
BindingFlags.GetProperty, null, oExcelSheets, null);

int n;
String sheet;
Parameters = new object[1];
for (n = 1; n <= numberOfSheets; n++)
{
Parameters[0] = n;
//Get the first worksheet.
oExcelSheet = oExcelSheets.GetType().InvokeMember("Item",
BindingFlags.GetProperty, null, oExcelSheets, Parameters);

sheet = (String)oExcelSheet.GetType().InvokeMember("Name",
BindingFlags.GetProperty, null, oExcelSheet, null);

if ( String.Compare( sheet, "noleap", true) == 0)
{
// Delete the sheet!
oExcelSheet.GetType().InvokeMember("Delete",
BindingFlags.InvokeMethod, null, oExcelSheet, null);

}
}
Parameters = new object[3];
Parameters[0] = Parameters[1] = Parameters[2] = Type.Missing;

if (oExcelWorkbook != null)
{
oExcelWorkbook.GetType().InvokeMember("Save",
BindingFlags.InvokeMethod, null, oExcelWorkbook, null);

oExcelWorkbook.GetType().InvokeMember("Close",
BindingFlags.InvokeMethod, null, oExcelWorkbook, Parameters);
}
if (oExcelApp != null)
{
oExcelApp.GetType().InvokeMember("Quit",
BindingFlags.InvokeMethod, null, oExcelApp, null);
}



  #3   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 3
Default What am I doing wrong?

You are perfectly right, NickHK.
I am trying to delete a sheet named "noleap" and the 'true' argument
indicates case insensitive.

I tried to turn off the DisplayAlerts property as you suggested, but it
didn't do any difference.

Here's what i added to my code:


Parameters = new object[1];
Parameters[0] = true;
oExcelApp.GetType().InvokeMember("DisplayAlerts",
BindingFlags.SetProperty, null, oExcelApp, Parameters);




NickHK wrote:
I don't use .Net, but..
It looks like you trying to delete the sheet "noleap".
What does the True argument to String.Compare indicate ? Case insensitive
comparison ?

Normally in Excel, when you try to Delete a sheet, there is a warning dialog
asking you to confirm the deletion.
In VB, you can turn this off with
oExcelApp.DisplayAlerts=False
resetting it to true when ready.

NickHK


roups.com...
I'm trying to delete a worksheet from a workbook using C# and late
binding. What ever I try, I don't seem to get rid of the sheet. I get
no errors or no messages.

Below is the basic of the code i try to run. Can anybody please
enlighten me?

object oExcelApp = null;
object oExcelWorkbooks;
object oExcelWorkbook = null;
object oExcelSheets;
object oExcelSheet;
object[] Parameters;
int numberOfSheets = 0;
Type objClassType;

// Get the class type and instantiate Excel.
objClassType = Type.GetTypeFromProgID("Excel.Application");
oExcelApp = Activator.CreateInstance(objClassType);

//Get the workbooks collection.
oExcelWorkbooks = oExcelApp.GetType().InvokeMember("Workbooks",
BindingFlags.GetProperty, null, oExcelApp, null);

// Open a workbook
Parameters = new object[15];
Parameters[0] = @"C:\TestSet.xls"; ;
Parameters[3] = 5; // Format = Nothing.
Parameters[1] = Parameters[2] = Parameters[4] = Parameters[5] =
Parameters[6] = Parameters[7] = Parameters[8] = Parameters[9] =
Parameters[10] =
Parameters[11] = Parameters[12] = Parameters[13] = Parameters[14] =
Type.Missing;

oExcelWorkbook = oExcelWorkbooks.GetType().InvokeMember("Open",
BindingFlags.InvokeMethod, null, oExcelWorkbooks, Parameters);

oExcelSheets = oExcelWorkbook.GetType().InvokeMember("Worksheets" ,
BindingFlags.GetProperty, null, oExcelWorkbook, null);

numberOfSheets = (int)oExcelSheets.GetType().InvokeMember("Count",
BindingFlags.GetProperty, null, oExcelSheets, null);

int n;
String sheet;
Parameters = new object[1];
for (n = 1; n <= numberOfSheets; n++)
{
Parameters[0] = n;
//Get the first worksheet.
oExcelSheet = oExcelSheets.GetType().InvokeMember("Item",
BindingFlags.GetProperty, null, oExcelSheets, Parameters);

sheet = (String)oExcelSheet.GetType().InvokeMember("Name",
BindingFlags.GetProperty, null, oExcelSheet, null);

if ( String.Compare( sheet, "noleap", true) == 0)
{
// Delete the sheet!
oExcelSheet.GetType().InvokeMember("Delete",
BindingFlags.InvokeMethod, null, oExcelSheet, null);

}
}
Parameters = new object[3];
Parameters[0] = Parameters[1] = Parameters[2] = Type.Missing;

if (oExcelWorkbook != null)
{
oExcelWorkbook.GetType().InvokeMember("Save",
BindingFlags.InvokeMethod, null, oExcelWorkbook, null);

oExcelWorkbook.GetType().InvokeMember("Close",
BindingFlags.InvokeMethod, null, oExcelWorkbook, Parameters);
}
if (oExcelApp != null)
{
oExcelApp.GetType().InvokeMember("Quit",
BindingFlags.InvokeMethod, null, oExcelApp, null);
}


  #4   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 4,391
Default What am I doing wrong?

Jon,
What if you just try to delete the sheet directly, with the correct case of
the name:
Worksheets("NoLeap").Delete

All I can think is that your If never evaluates to true.
What if you replace you .Delete with a simple MsgBox, just see if it fires.

What error handling do you have in place ?
Not whatever the .Net equivalent of "On Error Resume Next" ?

NickHK
P.S. There is NG "microsoft.public.excel.sdk" which seemed more geared to
Interop stuff. Doesn't look that busy though.


"Jon H" wrote in message
oups.com...
You are perfectly right, NickHK.
I am trying to delete a sheet named "noleap" and the 'true' argument
indicates case insensitive.

I tried to turn off the DisplayAlerts property as you suggested, but it
didn't do any difference.

Here's what i added to my code:


Parameters = new object[1];
Parameters[0] = true;
oExcelApp.GetType().InvokeMember("DisplayAlerts",
BindingFlags.SetProperty, null, oExcelApp, Parameters);




NickHK wrote:
I don't use .Net, but..
It looks like you trying to delete the sheet "noleap".
What does the True argument to String.Compare indicate ? Case

insensitive
comparison ?

Normally in Excel, when you try to Delete a sheet, there is a warning

dialog
asking you to confirm the deletion.
In VB, you can turn this off with
oExcelApp.DisplayAlerts=False
resetting it to true when ready.

NickHK


roups.com...
I'm trying to delete a worksheet from a workbook using C# and late
binding. What ever I try, I don't seem to get rid of the sheet. I get
no errors or no messages.

Below is the basic of the code i try to run. Can anybody please
enlighten me?

object oExcelApp = null;
object oExcelWorkbooks;
object oExcelWorkbook = null;
object oExcelSheets;
object oExcelSheet;
object[] Parameters;
int numberOfSheets = 0;
Type objClassType;

// Get the class type and instantiate Excel.
objClassType = Type.GetTypeFromProgID("Excel.Application");
oExcelApp = Activator.CreateInstance(objClassType);

//Get the workbooks collection.
oExcelWorkbooks = oExcelApp.GetType().InvokeMember("Workbooks",
BindingFlags.GetProperty, null, oExcelApp, null);

// Open a workbook
Parameters = new object[15];
Parameters[0] = @"C:\TestSet.xls"; ;
Parameters[3] = 5; // Format = Nothing.
Parameters[1] = Parameters[2] = Parameters[4] = Parameters[5] =
Parameters[6] = Parameters[7] = Parameters[8] = Parameters[9] =
Parameters[10] =
Parameters[11] = Parameters[12] = Parameters[13] = Parameters[14] =
Type.Missing;

oExcelWorkbook = oExcelWorkbooks.GetType().InvokeMember("Open",
BindingFlags.InvokeMethod, null, oExcelWorkbooks, Parameters);

oExcelSheets = oExcelWorkbook.GetType().InvokeMember("Worksheets" ,
BindingFlags.GetProperty, null, oExcelWorkbook, null);

numberOfSheets = (int)oExcelSheets.GetType().InvokeMember("Count",
BindingFlags.GetProperty, null, oExcelSheets, null);

int n;
String sheet;
Parameters = new object[1];
for (n = 1; n <= numberOfSheets; n++)
{
Parameters[0] = n;
//Get the first worksheet.
oExcelSheet = oExcelSheets.GetType().InvokeMember("Item",
BindingFlags.GetProperty, null, oExcelSheets, Parameters);

sheet = (String)oExcelSheet.GetType().InvokeMember("Name",
BindingFlags.GetProperty, null, oExcelSheet, null);

if ( String.Compare( sheet, "noleap", true) == 0)
{
// Delete the sheet!
oExcelSheet.GetType().InvokeMember("Delete",
BindingFlags.InvokeMethod, null, oExcelSheet, null);

}
}
Parameters = new object[3];
Parameters[0] = Parameters[1] = Parameters[2] = Type.Missing;

if (oExcelWorkbook != null)
{
oExcelWorkbook.GetType().InvokeMember("Save",
BindingFlags.InvokeMethod, null, oExcelWorkbook, null);

oExcelWorkbook.GetType().InvokeMember("Close",
BindingFlags.InvokeMethod, null, oExcelWorkbook, Parameters);
}
if (oExcelApp != null)
{
oExcelApp.GetType().InvokeMember("Quit",
BindingFlags.InvokeMethod, null, oExcelApp, null);
}




  #5   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 3
Default What am I doing wrong? Deleteing a sheet.

Thanks, NickHK!

I know that the Delete statement is executed. I have stepped through
the conde *some* times. The snippet I showed here is stripped for error
handling. I use exceptions for catching errors but I never end there...

I have tried to make a sample using early binding. The thing is that I
cant get that to work either........Here is the sample:

ApplicationClass app = new ApplicationClass();
Workbook workbook = null;
Worksheet worksheet = null;

workbook = app.Workbooks.Open("C:\\TestSet.xls",
Missing.Value, Missing.Value, Missing.Value, Missing.Value,
Missing.Value, Missing.Value, Missing.Value, Missing.Value,
Missing.Value, Missing.Value, Missing.Value, Missing.Value,
Missing.Value,Missing.Value);

worksheet = (Worksheet)workbook.Sheets["noleap"];
if (worksheet != null)
{
worksheet.Delete();
}

if (workbook != null)
{
workbook.Close(true, Missing.Value, Missing.Value);
workbook = null;
}

if (app != null)
{
app.Quit();
app = null;
}



What is actually the right procedure for deleting a sheet?
Is it necessary to do all this:

1. Open XLS file
2. Select sheet
3. Call delete on the sheet
4. Save the file
5. Close the Workbook & Application





NickHK wrote:
Jon,
What if you just try to delete the sheet directly, with the correct case of
the name:
Worksheets("NoLeap").Delete

All I can think is that your If never evaluates to true.
What if you replace you .Delete with a simple MsgBox, just see if it fires.

What error handling do you have in place ?
Not whatever the .Net equivalent of "On Error Resume Next" ?

NickHK
P.S. There is NG "microsoft.public.excel.sdk" which seemed more geared to
Interop stuff. Doesn't look that busy though.


"Jon H" wrote in message
oups.com...
You are perfectly right, NickHK.
I am trying to delete a sheet named "noleap" and the 'true' argument
indicates case insensitive.

I tried to turn off the DisplayAlerts property as you suggested, but it
didn't do any difference.

Here's what i added to my code:


Parameters = new object[1];
Parameters[0] = true;
oExcelApp.GetType().InvokeMember("DisplayAlerts",
BindingFlags.SetProperty, null, oExcelApp, Parameters);




NickHK wrote:
I don't use .Net, but..
It looks like you trying to delete the sheet "noleap".
What does the True argument to String.Compare indicate ? Case

insensitive
comparison ?

Normally in Excel, when you try to Delete a sheet, there is a warning

dialog
asking you to confirm the deletion.
In VB, you can turn this off with
oExcelApp.DisplayAlerts=False
resetting it to true when ready.

NickHK


roups.com...
I'm trying to delete a worksheet from a workbook using C# and late
binding. What ever I try, I don't seem to get rid of the sheet. I get
no errors or no messages.

Below is the basic of the code i try to run. Can anybody please
enlighten me?

object oExcelApp = null;
object oExcelWorkbooks;
object oExcelWorkbook = null;
object oExcelSheets;
object oExcelSheet;
object[] Parameters;
int numberOfSheets = 0;
Type objClassType;

// Get the class type and instantiate Excel.
objClassType = Type.GetTypeFromProgID("Excel.Application");
oExcelApp = Activator.CreateInstance(objClassType);

//Get the workbooks collection.
oExcelWorkbooks = oExcelApp.GetType().InvokeMember("Workbooks",
BindingFlags.GetProperty, null, oExcelApp, null);

// Open a workbook
Parameters = new object[15];
Parameters[0] = @"C:\TestSet.xls"; ;
Parameters[3] = 5; // Format = Nothing.
Parameters[1] = Parameters[2] = Parameters[4] = Parameters[5] =
Parameters[6] = Parameters[7] = Parameters[8] = Parameters[9] =
Parameters[10] =
Parameters[11] = Parameters[12] = Parameters[13] = Parameters[14] =
Type.Missing;

oExcelWorkbook = oExcelWorkbooks.GetType().InvokeMember("Open",
BindingFlags.InvokeMethod, null, oExcelWorkbooks, Parameters);

oExcelSheets = oExcelWorkbook.GetType().InvokeMember("Worksheets" ,
BindingFlags.GetProperty, null, oExcelWorkbook, null);

numberOfSheets = (int)oExcelSheets.GetType().InvokeMember("Count",
BindingFlags.GetProperty, null, oExcelSheets, null);

int n;
String sheet;
Parameters = new object[1];
for (n = 1; n <= numberOfSheets; n++)
{
Parameters[0] = n;
//Get the first worksheet.
oExcelSheet = oExcelSheets.GetType().InvokeMember("Item",
BindingFlags.GetProperty, null, oExcelSheets, Parameters);

sheet = (String)oExcelSheet.GetType().InvokeMember("Name",
BindingFlags.GetProperty, null, oExcelSheet, null);

if ( String.Compare( sheet, "noleap", true) == 0)
{
// Delete the sheet!
oExcelSheet.GetType().InvokeMember("Delete",
BindingFlags.InvokeMethod, null, oExcelSheet, null);

}
}
Parameters = new object[3];
Parameters[0] = Parameters[1] = Parameters[2] = Type.Missing;

if (oExcelWorkbook != null)
{
oExcelWorkbook.GetType().InvokeMember("Save",
BindingFlags.InvokeMethod, null, oExcelWorkbook, null);

oExcelWorkbook.GetType().InvokeMember("Close",
BindingFlags.InvokeMethod, null, oExcelWorkbook, Parameters);
}
if (oExcelApp != null)
{
oExcelApp.GetType().InvokeMember("Quit",
BindingFlags.InvokeMethod, null, oExcelApp, null);
}





  #6   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 4,391
Default What am I doing wrong? Deleteing a sheet.

Jon,
Correct procedure, but step #2 is not necessary.

In your environment, code is case sensitive ?
So your variable "worksheet" is not confused with the object "Worksheet" ?

I can't tell you if your syntax is correct, but you method looks fine.
I'm surprised you are not getting any errors raised.
What happens if try to delete a non-existent sheet:
Worksheets("NothingCalledThis").Delete
You must get an error then.

NickHK

"Jon H" wrote in message
ups.com...
Thanks, NickHK!

I know that the Delete statement is executed. I have stepped through
the conde *some* times. The snippet I showed here is stripped for error
handling. I use exceptions for catching errors but I never end there...

I have tried to make a sample using early binding. The thing is that I
cant get that to work either........Here is the sample:

ApplicationClass app = new ApplicationClass();
Workbook workbook = null;
Worksheet worksheet = null;

workbook = app.Workbooks.Open("C:\\TestSet.xls",
Missing.Value, Missing.Value, Missing.Value, Missing.Value,
Missing.Value, Missing.Value, Missing.Value, Missing.Value,
Missing.Value, Missing.Value, Missing.Value, Missing.Value,
Missing.Value,Missing.Value);

worksheet = (Worksheet)workbook.Sheets["noleap"];
if (worksheet != null)
{
worksheet.Delete();
}

if (workbook != null)
{
workbook.Close(true, Missing.Value, Missing.Value);
workbook = null;
}

if (app != null)
{
app.Quit();
app = null;
}



What is actually the right procedure for deleting a sheet?
Is it necessary to do all this:

1. Open XLS file
2. Select sheet
3. Call delete on the sheet
4. Save the file
5. Close the Workbook & Application





NickHK wrote:
Jon,
What if you just try to delete the sheet directly, with the correct case

of
the name:
Worksheets("NoLeap").Delete

All I can think is that your If never evaluates to true.
What if you replace you .Delete with a simple MsgBox, just see if it

fires.

What error handling do you have in place ?
Not whatever the .Net equivalent of "On Error Resume Next" ?

NickHK
P.S. There is NG "microsoft.public.excel.sdk" which seemed more geared

to
Interop stuff. Doesn't look that busy though.


"Jon H" wrote in message
oups.com...
You are perfectly right, NickHK.
I am trying to delete a sheet named "noleap" and the 'true' argument
indicates case insensitive.

I tried to turn off the DisplayAlerts property as you suggested, but

it
didn't do any difference.

Here's what i added to my code:


Parameters = new object[1];
Parameters[0] = true;
oExcelApp.GetType().InvokeMember("DisplayAlerts",
BindingFlags.SetProperty, null, oExcelApp, Parameters);




NickHK wrote:
I don't use .Net, but..
It looks like you trying to delete the sheet "noleap".
What does the True argument to String.Compare indicate ? Case

insensitive
comparison ?

Normally in Excel, when you try to Delete a sheet, there is a

warning
dialog
asking you to confirm the deletion.
In VB, you can turn this off with
oExcelApp.DisplayAlerts=False
resetting it to true when ready.

NickHK


roups.com...
I'm trying to delete a worksheet from a workbook using C# and late
binding. What ever I try, I don't seem to get rid of the sheet. I

get
no errors or no messages.

Below is the basic of the code i try to run. Can anybody please
enlighten me?

object oExcelApp = null;
object oExcelWorkbooks;
object oExcelWorkbook = null;
object oExcelSheets;
object oExcelSheet;
object[] Parameters;
int numberOfSheets = 0;
Type objClassType;

// Get the class type and instantiate Excel.
objClassType = Type.GetTypeFromProgID("Excel.Application");
oExcelApp = Activator.CreateInstance(objClassType);

//Get the workbooks collection.
oExcelWorkbooks = oExcelApp.GetType().InvokeMember("Workbooks",
BindingFlags.GetProperty, null, oExcelApp, null);

// Open a workbook
Parameters = new object[15];
Parameters[0] = @"C:\TestSet.xls"; ;
Parameters[3] = 5; // Format = Nothing.
Parameters[1] = Parameters[2] = Parameters[4] = Parameters[5] =
Parameters[6] = Parameters[7] = Parameters[8] = Parameters[9] =
Parameters[10] =
Parameters[11] = Parameters[12] = Parameters[13] = Parameters[14]

=
Type.Missing;

oExcelWorkbook = oExcelWorkbooks.GetType().InvokeMember("Open",
BindingFlags.InvokeMethod, null, oExcelWorkbooks, Parameters);

oExcelSheets = oExcelWorkbook.GetType().InvokeMember("Worksheets" ,
BindingFlags.GetProperty, null, oExcelWorkbook, null);

numberOfSheets = (int)oExcelSheets.GetType().InvokeMember("Count",
BindingFlags.GetProperty, null, oExcelSheets, null);

int n;
String sheet;
Parameters = new object[1];
for (n = 1; n <= numberOfSheets; n++)
{
Parameters[0] = n;
//Get the first worksheet.
oExcelSheet = oExcelSheets.GetType().InvokeMember("Item",
BindingFlags.GetProperty, null, oExcelSheets, Parameters);

sheet = (String)oExcelSheet.GetType().InvokeMember("Name",
BindingFlags.GetProperty, null, oExcelSheet, null);

if ( String.Compare( sheet, "noleap", true) == 0)
{
// Delete the sheet!
oExcelSheet.GetType().InvokeMember("Delete",
BindingFlags.InvokeMethod, null, oExcelSheet, null);

}
}
Parameters = new object[3];
Parameters[0] = Parameters[1] = Parameters[2] = Type.Missing;

if (oExcelWorkbook != null)
{
oExcelWorkbook.GetType().InvokeMember("Save",
BindingFlags.InvokeMethod, null, oExcelWorkbook, null);

oExcelWorkbook.GetType().InvokeMember("Close",
BindingFlags.InvokeMethod, null, oExcelWorkbook,

Parameters);
}
if (oExcelApp != null)
{
oExcelApp.GetType().InvokeMember("Quit",
BindingFlags.InvokeMethod, null, oExcelApp, null);
}





  #7   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 3
Default What am I doing wrong? Deleteing a sheet.

NickHK!

Problem solved! Thanks for pointing me in the right direction. The
trick with the "DisplayAlerts" worked. I just made a misstake the first
time I tried it. I did set the property to true in stead of false! The
way I found out was to set the Visible property of the Application
object to true. Then I saw all messages that I didn't see before.

As for the Q's you mention below:

..NET environment, at leas C# is case sensitive so "worksheet" is not
the same as "Worksheet".

Again, thanks a lot for your help!

Jon H.



NickHK wrote:
Jon,
Correct procedure, but step #2 is not necessary.

In your environment, code is case sensitive ?
So your variable "worksheet" is not confused with the object "Worksheet" ?

I can't tell you if your syntax is correct, but you method looks fine.
I'm surprised you are not getting any errors raised.
What happens if try to delete a non-existent sheet:
Worksheets("NothingCalledThis").Delete
You must get an error then.

NickHK

"Jon H" wrote in message
ups.com...
Thanks, NickHK!

I know that the Delete statement is executed. I have stepped through
the conde *some* times. The snippet I showed here is stripped for error
handling. I use exceptions for catching errors but I never end there...

I have tried to make a sample using early binding. The thing is that I
cant get that to work either........Here is the sample:

ApplicationClass app = new ApplicationClass();
Workbook workbook = null;
Worksheet worksheet = null;

workbook = app.Workbooks.Open("C:\\TestSet.xls",
Missing.Value, Missing.Value, Missing.Value, Missing.Value,
Missing.Value, Missing.Value, Missing.Value, Missing.Value,
Missing.Value, Missing.Value, Missing.Value, Missing.Value,
Missing.Value,Missing.Value);

worksheet = (Worksheet)workbook.Sheets["noleap"];
if (worksheet != null)
{
worksheet.Delete();
}

if (workbook != null)
{
workbook.Close(true, Missing.Value, Missing.Value);
workbook = null;
}

if (app != null)
{
app.Quit();
app = null;
}



What is actually the right procedure for deleting a sheet?
Is it necessary to do all this:

1. Open XLS file
2. Select sheet
3. Call delete on the sheet
4. Save the file
5. Close the Workbook & Application





NickHK wrote:
Jon,
What if you just try to delete the sheet directly, with the correct case

of
the name:
Worksheets("NoLeap").Delete

All I can think is that your If never evaluates to true.
What if you replace you .Delete with a simple MsgBox, just see if it

fires.

What error handling do you have in place ?
Not whatever the .Net equivalent of "On Error Resume Next" ?

NickHK
P.S. There is NG "microsoft.public.excel.sdk" which seemed more geared

to
Interop stuff. Doesn't look that busy though.


"Jon H" wrote in message
oups.com...
You are perfectly right, NickHK.
I am trying to delete a sheet named "noleap" and the 'true' argument
indicates case insensitive.

I tried to turn off the DisplayAlerts property as you suggested, but

it
didn't do any difference.

Here's what i added to my code:


Parameters = new object[1];
Parameters[0] = true;
oExcelApp.GetType().InvokeMember("DisplayAlerts",
BindingFlags.SetProperty, null, oExcelApp, Parameters);




NickHK wrote:
I don't use .Net, but..
It looks like you trying to delete the sheet "noleap".
What does the True argument to String.Compare indicate ? Case
insensitive
comparison ?

Normally in Excel, when you try to Delete a sheet, there is a

warning
dialog
asking you to confirm the deletion.
In VB, you can turn this off with
oExcelApp.DisplayAlerts=False
resetting it to true when ready.

NickHK


roups.com...
I'm trying to delete a worksheet from a workbook using C# and late
binding. What ever I try, I don't seem to get rid of the sheet. I

get
no errors or no messages.

Below is the basic of the code i try to run. Can anybody please
enlighten me?

object oExcelApp = null;
object oExcelWorkbooks;
object oExcelWorkbook = null;
object oExcelSheets;
object oExcelSheet;
object[] Parameters;
int numberOfSheets = 0;
Type objClassType;

// Get the class type and instantiate Excel.
objClassType = Type.GetTypeFromProgID("Excel.Application");
oExcelApp = Activator.CreateInstance(objClassType);

//Get the workbooks collection.
oExcelWorkbooks = oExcelApp.GetType().InvokeMember("Workbooks",
BindingFlags.GetProperty, null, oExcelApp, null);

// Open a workbook
Parameters = new object[15];
Parameters[0] = @"C:\TestSet.xls"; ;
Parameters[3] = 5; // Format = Nothing.
Parameters[1] = Parameters[2] = Parameters[4] = Parameters[5] =
Parameters[6] = Parameters[7] = Parameters[8] = Parameters[9] =
Parameters[10] =
Parameters[11] = Parameters[12] = Parameters[13] = Parameters[14]

=
Type.Missing;

oExcelWorkbook = oExcelWorkbooks.GetType().InvokeMember("Open",
BindingFlags.InvokeMethod, null, oExcelWorkbooks, Parameters);

oExcelSheets = oExcelWorkbook.GetType().InvokeMember("Worksheets" ,
BindingFlags.GetProperty, null, oExcelWorkbook, null);

numberOfSheets = (int)oExcelSheets.GetType().InvokeMember("Count",
BindingFlags.GetProperty, null, oExcelSheets, null);

int n;
String sheet;
Parameters = new object[1];
for (n = 1; n <= numberOfSheets; n++)
{
Parameters[0] = n;
//Get the first worksheet.
oExcelSheet = oExcelSheets.GetType().InvokeMember("Item",
BindingFlags.GetProperty, null, oExcelSheets, Parameters);

sheet = (String)oExcelSheet.GetType().InvokeMember("Name",
BindingFlags.GetProperty, null, oExcelSheet, null);

if ( String.Compare( sheet, "noleap", true) == 0)
{
// Delete the sheet!
oExcelSheet.GetType().InvokeMember("Delete",
BindingFlags.InvokeMethod, null, oExcelSheet, null);

}
}
Parameters = new object[3];
Parameters[0] = Parameters[1] = Parameters[2] = Type.Missing;

if (oExcelWorkbook != null)
{
oExcelWorkbook.GetType().InvokeMember("Save",
BindingFlags.InvokeMethod, null, oExcelWorkbook, null);

oExcelWorkbook.GetType().InvokeMember("Close",
BindingFlags.InvokeMethod, null, oExcelWorkbook,

Parameters);
}
if (oExcelApp != null)
{
oExcelApp.GetType().InvokeMember("Quit",
BindingFlags.InvokeMethod, null, oExcelApp, null);
}




  #8   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 4,391
Default What am I doing wrong? Deleteing a sheet.

Glad you found it
As you are working with Excel, you can record a macro (ToolsMacroRecord
New Macro) of your required step first, to at least show what you need to
accomplish, then translate to C#.
OK, it won't tell the .Displayalerts code, but you would have seen the
dialog appear during the sequence of events and that you would have to deal
with it.

NickHK

"Jon H" wrote in message
ups.com...
NickHK!

Problem solved! Thanks for pointing me in the right direction. The
trick with the "DisplayAlerts" worked. I just made a misstake the first
time I tried it. I did set the property to true in stead of false! The
way I found out was to set the Visible property of the Application
object to true. Then I saw all messages that I didn't see before.

As for the Q's you mention below:

.NET environment, at leas C# is case sensitive so "worksheet" is not
the same as "Worksheet".

Again, thanks a lot for your help!

Jon H.



NickHK wrote:
Jon,
Correct procedure, but step #2 is not necessary.

In your environment, code is case sensitive ?
So your variable "worksheet" is not confused with the object "Worksheet"

?

I can't tell you if your syntax is correct, but you method looks fine.
I'm surprised you are not getting any errors raised.
What happens if try to delete a non-existent sheet:
Worksheets("NothingCalledThis").Delete
You must get an error then.

NickHK

"Jon H" wrote in message
ups.com...
Thanks, NickHK!

I know that the Delete statement is executed. I have stepped through
the conde *some* times. The snippet I showed here is stripped for

error
handling. I use exceptions for catching errors but I never end

there...

I have tried to make a sample using early binding. The thing is that I
cant get that to work either........Here is the sample:

ApplicationClass app = new ApplicationClass();
Workbook workbook = null;
Worksheet worksheet = null;

workbook = app.Workbooks.Open("C:\\TestSet.xls",
Missing.Value, Missing.Value, Missing.Value, Missing.Value,
Missing.Value, Missing.Value, Missing.Value, Missing.Value,
Missing.Value, Missing.Value, Missing.Value, Missing.Value,
Missing.Value,Missing.Value);

worksheet = (Worksheet)workbook.Sheets["noleap"];
if (worksheet != null)
{
worksheet.Delete();
}

if (workbook != null)
{
workbook.Close(true, Missing.Value, Missing.Value);
workbook = null;
}

if (app != null)
{
app.Quit();
app = null;
}



What is actually the right procedure for deleting a sheet?
Is it necessary to do all this:

1. Open XLS file
2. Select sheet
3. Call delete on the sheet
4. Save the file
5. Close the Workbook & Application





NickHK wrote:
Jon,
What if you just try to delete the sheet directly, with the correct

case
of
the name:
Worksheets("NoLeap").Delete

All I can think is that your If never evaluates to true.
What if you replace you .Delete with a simple MsgBox, just see if it

fires.

What error handling do you have in place ?
Not whatever the .Net equivalent of "On Error Resume Next" ?

NickHK
P.S. There is NG "microsoft.public.excel.sdk" which seemed more

geared
to
Interop stuff. Doesn't look that busy though.


"Jon H" wrote in message
oups.com...
You are perfectly right, NickHK.
I am trying to delete a sheet named "noleap" and the 'true'

argument
indicates case insensitive.

I tried to turn off the DisplayAlerts property as you suggested,

but
it
didn't do any difference.

Here's what i added to my code:


Parameters = new object[1];
Parameters[0] = true;
oExcelApp.GetType().InvokeMember("DisplayAlerts",
BindingFlags.SetProperty, null, oExcelApp, Parameters);




NickHK wrote:
I don't use .Net, but..
It looks like you trying to delete the sheet "noleap".
What does the True argument to String.Compare indicate ? Case
insensitive
comparison ?

Normally in Excel, when you try to Delete a sheet, there is a

warning
dialog
asking you to confirm the deletion.
In VB, you can turn this off with
oExcelApp.DisplayAlerts=False
resetting it to true when ready.

NickHK


roups.com...
I'm trying to delete a worksheet from a workbook using C# and

late
binding. What ever I try, I don't seem to get rid of the

sheet. I
get
no errors or no messages.

Below is the basic of the code i try to run. Can anybody

please
enlighten me?

object oExcelApp = null;
object oExcelWorkbooks;
object oExcelWorkbook = null;
object oExcelSheets;
object oExcelSheet;
object[] Parameters;
int numberOfSheets = 0;
Type objClassType;

// Get the class type and instantiate Excel.
objClassType = Type.GetTypeFromProgID("Excel.Application");
oExcelApp = Activator.CreateInstance(objClassType);

//Get the workbooks collection.
oExcelWorkbooks =

oExcelApp.GetType().InvokeMember("Workbooks",
BindingFlags.GetProperty, null, oExcelApp, null);

// Open a workbook
Parameters = new object[15];
Parameters[0] = @"C:\TestSet.xls"; ;
Parameters[3] = 5; // Format = Nothing.
Parameters[1] = Parameters[2] = Parameters[4] = Parameters[5]

=
Parameters[6] = Parameters[7] = Parameters[8] = Parameters[9]

=
Parameters[10] =
Parameters[11] = Parameters[12] = Parameters[13] =

Parameters[14]
=
Type.Missing;

oExcelWorkbook =

oExcelWorkbooks.GetType().InvokeMember("Open",
BindingFlags.InvokeMethod, null, oExcelWorkbooks, Parameters);

oExcelSheets =

oExcelWorkbook.GetType().InvokeMember("Worksheets" ,
BindingFlags.GetProperty, null, oExcelWorkbook, null);

numberOfSheets =

(int)oExcelSheets.GetType().InvokeMember("Count",
BindingFlags.GetProperty, null, oExcelSheets, null);

int n;
String sheet;
Parameters = new object[1];
for (n = 1; n <= numberOfSheets; n++)
{
Parameters[0] = n;
//Get the first worksheet.
oExcelSheet = oExcelSheets.GetType().InvokeMember("Item",
BindingFlags.GetProperty, null, oExcelSheets,

Parameters);

sheet = (String)oExcelSheet.GetType().InvokeMember("Name",
BindingFlags.GetProperty, null, oExcelSheet, null);

if ( String.Compare( sheet, "noleap", true) == 0)
{
// Delete the sheet!
oExcelSheet.GetType().InvokeMember("Delete",
BindingFlags.InvokeMethod, null, oExcelSheet,

null);

}
}
Parameters = new object[3];
Parameters[0] = Parameters[1] = Parameters[2] = Type.Missing;

if (oExcelWorkbook != null)
{
oExcelWorkbook.GetType().InvokeMember("Save",
BindingFlags.InvokeMethod, null, oExcelWorkbook,

null);

oExcelWorkbook.GetType().InvokeMember("Close",
BindingFlags.InvokeMethod, null, oExcelWorkbook,

Parameters);
}
if (oExcelApp != null)
{
oExcelApp.GetType().InvokeMember("Quit",
BindingFlags.InvokeMethod, null, oExcelApp, null);
}






Reply
Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules

Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On


Similar Threads
Thread Thread Starter Forum Replies Last Post
Insert Calculated Field (wrong Qty*Price = wrong Amount) Edmund Excel Discussion (Misc queries) 8 October 4th 07 12:13 PM
What's wrong with this? Damien McBain[_2_] Excel Programming 5 June 7th 05 02:27 PM
What am I doing wrong....!!! squoggy Excel Programming 3 June 2nd 05 05:52 PM
What is wrong? Andy Dorph Excel Programming 1 April 12th 05 04:52 PM
Anybody see anything wrong with this Dthmtlgod Excel Programming 1 April 20th 04 03:16 PM


All times are GMT +1. The time now is 01:48 AM.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Copyright ©2004-2024 ExcelBanter.
The comments are property of their posters.
 

About Us

"It's about Microsoft Excel"