[C#] Export di un file Excel in un file CSV

Un metodo rapido e veloce per esportare un semplice file Excel in un file CSV:

using _Excel = Microsoft.Office.Interop.Excel;

[DllImport(“user32.dll”)]

static extern int GetWindowThreadProcessId(int hWnd, out int lpdwProcessId);

/// <summary>

///

/// </summary>

/// <param name=”sInFile”>Il file .xls in input</param>

/// <param name=”sOutFile”>Il file .csv in output</param>

/// <remarks>

/// Le seguenti considerazioni sono relative a questo specifico esempio.

/// Il file .xls deve essere in formato 97/2003, no 2007.

/// Il file .csv non è “comma-separated”, ma è “semicolon-separated”, cioè vengono separati i valori con “;”

/// I filename devono essere in “absolute path” e non in “relative path”.

/// </remarks>

/// <returns>Ritorna true se l’esportazione riesce con successo, false altrimenti.</returns>

private bool ExportXlsToCsv(string sInFile, string sOutFile)

{

bool Result = File.Exists(sInFile); // verifica che il file .xls esista

if (Result)

{

_Excel.ApplicationClass excel = null; // l’istanza di Excel

int excelProcessId = 0; //id del processo creato per l’istanza

try

{

if (File.Exists(sOutFile)) // se il file di destinazione esiste…

{

File.Delete(sOutFile); // … lo elimina preventivamente

}

excel = new _Excel.ApplicationClass(); // istanzia Excel

GetWindowThreadProcessId(excel.Hwnd, out excelProcessId); // ricava l’id assegnato per il processo generato

excel.Visible = false; // evita che l’istanza dell’applicativo sia visibile all’utente

_Excel.Workbook workBook = excel.Workbooks.Open(sInFile, 0, true, 5, “”, “”, true, _Excel.XlPlatform.xlWindows, “\t”, false, false, 0, true, 1, 0); // apre il file .xls

workBook.SaveAs(sOutFile, _Excel.XlFileFormat.xlCSVMSDOS, Type.Missing, Type.Missing, Type.Missing, Type.Missing, _Excel.XlSaveAsAccessMode.xlNoChange, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing); // salva il file in formato .csv

excel.DisplayAlerts = false; // evita che venga richiesta la conferma di salvataggio alla chiusura di Excel (dato che è già salvato in .csv)

excel.Quit(); // chiude l’istanza di Excel

Result = true;

}

catch

{

Result = false;

}

finally

{

excel = null; // una volta chiusa l’istanza, questa assegnazione è comunque necessaria

if (excelProcessId != 0)

{

// se per qualche motivo non viene chiusa l’istanza Excel, facciamo una kill

int iMaxTimeoutMs = 3000; // i ms di attesa per aspettare che l’istanza venga chiusa correttamente

int iCheck = 250; // i ms per ogni controllo

while ( (iMaxTimeoutMs>0) && (Process.GetProcessById(excelProcessId) != null) )

{

Thread.Sleep(iCheck);

iMaxTimeoutMs -= iCheck;

}

Process excelProcess = Process.GetProcessById(excelProcessId);

if (excelProcess != null) // se ancora a questo punto l’istanza è attiva…

{

// (non dovrebbe servire, ma non si sa mai)

excelProcess.Kill(); // …la si butta giù di forza !

}

}

}

}

return Result;

}

[C#] Export di un file Excel in un file CSV

Lascia un commento

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...