Drop Table di fogli Excel

giovedì 23 giugno 2005 - 11.55

gianp Profilo | Junior Member

Io faccio, senza problemi, degli export di alcune DataTable su fogli Excel.
Il problema si verifica nel momento in cui faccio la drop.
Il codice che uso è il seguente:

public void DeleteSheet(string Sheet) {

System.Text.StringBuilder sbDrop = new System.Text.StringBuilder();

sbDrop.Append("drop table [");
sbDrop.Append(Sheet);
sbDrop.Append("]");

System.Data.OleDb.OleDbCommand Cmd = new System.Data.OleDb.OleDbCommand(sbDrop.ToString(), Cnn);

try {
Cnn.Open();
Cmd.ExecuteNonQuery();
}
catch(Exception err) {
System.Diagnostics.Trace.WriteLine(err.ToString());
throw new Exception(err.ToString() , err);
}
finally {
Cnn.Close();
}
}

Dove Cnn è una connessione OleDb a un file excel e Sheet è il nome del foglio da eliminare.
Quando uso questo metodo arriva in fondo senza errori ma nn in realtà non elimina il foglio (la drop non ha alcun effetto).

Se provo a mettere la stringa tra apici, così:
sbDrop.Append("drop table ['");
sbDrop.Append(Sheet);
sbDrop.Append("']");
ho un'eccezione in cui c'è scritto che il foglio con nome corrisp a quello contenuto nella stringa Sheet non è trovato.

Non più cosa provare. Qualcuno può aiutarmi?

Cteniza Profilo | Guru

Una volta ho fatto anche io delle prove a riguardo.
Il comando DROP TABLE rimuove tutto il contenuto del foglio indicato es: DROP TABLE [Foglio4$].
Credo che per togliere il foglio dal workbook sia necessario usare l'automazione

gianp Profilo | Junior Member

Ciao. In effetti pare non ci sia modo di eliminare un foglio tramite OleDb. Non ho capito però che intendi quando dici che "sia necessario usare l'automazione".
Saluti,
Gianp.

Cteniza Profilo | Guru

Molto semplice, è possibile utilizzare l'automazione per leggere / scrivere su excel.
Esempio di late binding:

using System;
using System.Reflection;
using Microsoft.Office.Interop.Excel;
using System.Windows.Forms;

public class ExcelClass
{
public ExcelClass()
{

}

public void ScriviFoglio()
{

object objApp;
object objBook;
object objBooks;
object objSheets;
object objSheet;
object objRange;
object[] Parameters;

try
{
// Istanziamo Excel.
objApp = (object)new Microsoft.Office.Interop.Excel.Application();

// Istanziamo i Workbooks
objBooks = objApp.GetType().InvokeMember( "Workbooks",
BindingFlags.GetProperty, null, objApp, null );

// Aggiunta di workbook
objBook = objBooks.GetType().InvokeMember( "Add",
BindingFlags.InvokeMethod, null, objBooks, null );

// Istanziamo i fogli
objSheets = objBook.GetType().InvokeMember( "Worksheets",
BindingFlags.GetProperty, null, objBook, null );

// Prendiamo la prima cartella ed il primo foglio
Parameters = new Object[1];
Parameters[0] = 1;
objSheet = objSheets.GetType().InvokeMember( "Item",
BindingFlags.GetProperty, null, objSheets, Parameters );

// Il range contenuto nella cella A1
Parameters = new Object[2];
Parameters[0] = "A1";
Parameters[1] = Missing.Value;
objRange = objSheet.GetType().InvokeMember( "Range",
BindingFlags.GetProperty, null, objSheet, Parameters );

// Scriviamo il valore sulla cella A1
Parameters = new Object[1];
Parameters[0] = "Ho scritto sulla cella";
objRange.GetType().InvokeMember( "Value", BindingFlags.SetProperty,
null, objRange, Parameters );

// Ritorniamo il controllo all'utente
Parameters = new Object[1];
Parameters[0] = true;
objApp.GetType().InvokeMember( "Visible", BindingFlags.SetProperty,
null, objApp, Parameters );
objApp.GetType().InvokeMember( "UserControl", BindingFlags.SetProperty,
null, objApp, Parameters );
}
catch( Exception theException )
{
String errorMessage;
errorMessage = "Errore: ";
errorMessage = String.Concat( errorMessage, theException.Message );
errorMessage = String.Concat( errorMessage, " Numero: " );
errorMessage = String.Concat( errorMessage, theException.Source );

MessageBox.Show( errorMessage, "Errore" );
}

}

}

gianp Profilo | Junior Member

Interessante; proverò ad usarlo.
Grazie.
Saluti,
Gianp.
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5