Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
SQL Server 2000/2005/2008, Express, Access, MySQL, Oracle
Drop Table di fogli Excel
giovedì 23 giugno 2005 - 11.55
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
gianp
Profilo
| Junior Member
91
messaggi | Data Invio:
gio 23 giu 2005 - 11:55
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
1.509
messaggi | Data Invio:
dom 26 giu 2005 - 14:48
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
91
messaggi | Data Invio:
lun 27 giu 2005 - 09:37
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
1.509
messaggi | Data Invio:
lun 27 giu 2005 - 09:41
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
91
messaggi | Data Invio:
lun 27 giu 2005 - 10:28
Interessante; proverò ad usarlo.
Grazie.
Saluti,
Gianp.
Torna su
Stanze Forum
Elenco Threads
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 !