Comment accélérer le dumping d'un DataTable dans une feuille de calcul Excel?

J'ai la routine suivante qui décharge un DataTable dans une feuille de calcul Excel.

private void RenderDataTableOnXlSheet(DataTable dt, Excel.Worksheet xlWk, ssortingng [] columnNames, ssortingng [] fieldNames) { // render the column names (eg headers) for (int i = 0; i < columnNames.Length; i++) xlWk.Cells[1, i + 1] = columnNames[i]; // render the data for (int i = 0; i < fieldNames.Length; i++) { for (int j = 0; j < dt.Rows.Count; j++) { xlWk.Cells[j + 2, i + 1] = dt.Rows[j][fieldNames[i]].ToSsortingng(); } } } 

Pour une raison quelconque, le dumping DataTable de 25 colonnes et 400 lignes prend environ 10-15 secondes sur mon PC relativement moderne. Il y a encore plus de machines à tester.

Est-ce que je peux faire pour accélérer ce code? Ou est-ce que l'interop est simplement lent?

SOLUTION: Selon les suggestions d'Helen Toomik, j'ai modifié la méthode et il devrait maintenant fonctionner pour plusieurs types de données communes (int32, double, datetime, string). N'hésitez pas à l'étendre. La vitesse de traitement de mon set de données est passée de 15 secondes à less de 1.

  private void RenderDataTableOnXlSheet(DataTable dt, Excel.Worksheet xlWk, ssortingng [] columnNames, ssortingng [] fieldNames) { Excel.Range rngExcel = null; Excel.Range headerRange = null; try { // render the column names (eg headers) for (int i = 0; i < columnNames.Length; i++) xlWk.Cells[1, i + 1] = columnNames[i]; // for each column, create an array and set the array // to the excel range for that column. for (int i = 0; i < fieldNames.Length; i++) { ssortingng[,] clnDataSsortingng = new ssortingng[dt.Rows.Count, 1]; int[,] clnDataInt = new int[dt.Rows.Count, 1]; double[,] clnDataDouble = new double[dt.Rows.Count, 1]; ssortingng columnLetter = char.ConvertFromUtf32("A".ToCharArray()[0] + i); rngExcel = xlWk.get_Range(columnLetter + "2", Missing.Value); rngExcel = rngExcel.get_Resize(dt.Rows.Count, 1); ssortingng dataTypeName = dt.Columns[fieldNames[i]].DataType.Name; for (int j = 0; j < dt.Rows.Count; j++) { if (fieldNames[i].Length > 0) { switch (dataTypeName) { case "Int32": clnDataInt[j, 0] = Convert.ToInt32(dt.Rows[j][fieldNames[i]]); break; case "Double": clnDataDouble[j, 0] = Convert.ToDouble(dt.Rows[j][fieldNames[i]]); break; case "DateTime": if (fieldNames[i].ToLower().Contains("time")) clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToShortTimeSsortingng(); else if (fieldNames[i].ToLower().Contains("date")) clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToShortDateSsortingng(); else clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToSsortingng(); break; default: clnDataSsortingng[j, 0] = dt.Rows[j][fieldNames[i]].ToSsortingng(); break; } } else clnDataSsortingng[j, 0] = ssortingng.Empty; } // set values in the sheet wholesale. if (dataTypeName == "Int32") rngExcel.set_Value(Missing.Value, clnDataInt); else if (dataTypeName == "Double") rngExcel.set_Value(Missing.Value, clnDataDouble); else rngExcel.set_Value(Missing.Value, clnDataSsortingng); } // figure out the letter of the last column (supports 1 letter column names) ssortingng lastColumn = char.ConvertFromUtf32("A".ToCharArray()[0] + columnNames.Length - 1); // make the header range bold headerRange = xlWk.get_Range("A1", lastColumn + "1"); headerRange.Font.Bold = true; // autofit for better view xlWk.Columns.AutoFit(); } finally { ReleaseObject(headerRange); ReleaseObject(rngExcel); } } private void ReleaseObject(object obj) { try { System.Runtime.InteropServices.Marshal.ReleaseComObject(obj); obj = null; } catch { obj = null; } finally { GC.Collect(); } } private void RenderDataTableOnXlSheet (DataTable dt, Excel.Worksheet xlWk, string [] columnNames, string [] fieldNames)  private void RenderDataTableOnXlSheet(DataTable dt, Excel.Worksheet xlWk, ssortingng [] columnNames, ssortingng [] fieldNames) { Excel.Range rngExcel = null; Excel.Range headerRange = null; try { // render the column names (eg headers) for (int i = 0; i < columnNames.Length; i++) xlWk.Cells[1, i + 1] = columnNames[i]; // for each column, create an array and set the array // to the excel range for that column. for (int i = 0; i < fieldNames.Length; i++) { ssortingng[,] clnDataSsortingng = new ssortingng[dt.Rows.Count, 1]; int[,] clnDataInt = new int[dt.Rows.Count, 1]; double[,] clnDataDouble = new double[dt.Rows.Count, 1]; ssortingng columnLetter = char.ConvertFromUtf32("A".ToCharArray()[0] + i); rngExcel = xlWk.get_Range(columnLetter + "2", Missing.Value); rngExcel = rngExcel.get_Resize(dt.Rows.Count, 1); ssortingng dataTypeName = dt.Columns[fieldNames[i]].DataType.Name; for (int j = 0; j < dt.Rows.Count; j++) { if (fieldNames[i].Length > 0) { switch (dataTypeName) { case "Int32": clnDataInt[j, 0] = Convert.ToInt32(dt.Rows[j][fieldNames[i]]); break; case "Double": clnDataDouble[j, 0] = Convert.ToDouble(dt.Rows[j][fieldNames[i]]); break; case "DateTime": if (fieldNames[i].ToLower().Contains("time")) clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToShortTimeSsortingng(); else if (fieldNames[i].ToLower().Contains("date")) clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToShortDateSsortingng(); else clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToSsortingng(); break; default: clnDataSsortingng[j, 0] = dt.Rows[j][fieldNames[i]].ToSsortingng(); break; } } else clnDataSsortingng[j, 0] = ssortingng.Empty; } // set values in the sheet wholesale. if (dataTypeName == "Int32") rngExcel.set_Value(Missing.Value, clnDataInt); else if (dataTypeName == "Double") rngExcel.set_Value(Missing.Value, clnDataDouble); else rngExcel.set_Value(Missing.Value, clnDataSsortingng); } // figure out the letter of the last column (supports 1 letter column names) ssortingng lastColumn = char.ConvertFromUtf32("A".ToCharArray()[0] + columnNames.Length - 1); // make the header range bold headerRange = xlWk.get_Range("A1", lastColumn + "1"); headerRange.Font.Bold = true; // autofit for better view xlWk.Columns.AutoFit(); } finally { ReleaseObject(headerRange); ReleaseObject(rngExcel); } } private void ReleaseObject(object obj) { try { System.Runtime.InteropServices.Marshal.ReleaseComObject(obj); obj = null; } catch { obj = null; } finally { GC.Collect(); } } Excel.Range rngExcel = null;  private void RenderDataTableOnXlSheet(DataTable dt, Excel.Worksheet xlWk, ssortingng [] columnNames, ssortingng [] fieldNames) { Excel.Range rngExcel = null; Excel.Range headerRange = null; try { // render the column names (eg headers) for (int i = 0; i < columnNames.Length; i++) xlWk.Cells[1, i + 1] = columnNames[i]; // for each column, create an array and set the array // to the excel range for that column. for (int i = 0; i < fieldNames.Length; i++) { ssortingng[,] clnDataSsortingng = new ssortingng[dt.Rows.Count, 1]; int[,] clnDataInt = new int[dt.Rows.Count, 1]; double[,] clnDataDouble = new double[dt.Rows.Count, 1]; ssortingng columnLetter = char.ConvertFromUtf32("A".ToCharArray()[0] + i); rngExcel = xlWk.get_Range(columnLetter + "2", Missing.Value); rngExcel = rngExcel.get_Resize(dt.Rows.Count, 1); ssortingng dataTypeName = dt.Columns[fieldNames[i]].DataType.Name; for (int j = 0; j < dt.Rows.Count; j++) { if (fieldNames[i].Length > 0) { switch (dataTypeName) { case "Int32": clnDataInt[j, 0] = Convert.ToInt32(dt.Rows[j][fieldNames[i]]); break; case "Double": clnDataDouble[j, 0] = Convert.ToDouble(dt.Rows[j][fieldNames[i]]); break; case "DateTime": if (fieldNames[i].ToLower().Contains("time")) clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToShortTimeSsortingng(); else if (fieldNames[i].ToLower().Contains("date")) clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToShortDateSsortingng(); else clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToSsortingng(); break; default: clnDataSsortingng[j, 0] = dt.Rows[j][fieldNames[i]].ToSsortingng(); break; } } else clnDataSsortingng[j, 0] = ssortingng.Empty; } // set values in the sheet wholesale. if (dataTypeName == "Int32") rngExcel.set_Value(Missing.Value, clnDataInt); else if (dataTypeName == "Double") rngExcel.set_Value(Missing.Value, clnDataDouble); else rngExcel.set_Value(Missing.Value, clnDataSsortingng); } // figure out the letter of the last column (supports 1 letter column names) ssortingng lastColumn = char.ConvertFromUtf32("A".ToCharArray()[0] + columnNames.Length - 1); // make the header range bold headerRange = xlWk.get_Range("A1", lastColumn + "1"); headerRange.Font.Bold = true; // autofit for better view xlWk.Columns.AutoFit(); } finally { ReleaseObject(headerRange); ReleaseObject(rngExcel); } } private void ReleaseObject(object obj) { try { System.Runtime.InteropServices.Marshal.ReleaseComObject(obj); obj = null; } catch { obj = null; } finally { GC.Collect(); } } Excel.Range headerRange = null;  private void RenderDataTableOnXlSheet(DataTable dt, Excel.Worksheet xlWk, ssortingng [] columnNames, ssortingng [] fieldNames) { Excel.Range rngExcel = null; Excel.Range headerRange = null; try { // render the column names (eg headers) for (int i = 0; i < columnNames.Length; i++) xlWk.Cells[1, i + 1] = columnNames[i]; // for each column, create an array and set the array // to the excel range for that column. for (int i = 0; i < fieldNames.Length; i++) { ssortingng[,] clnDataSsortingng = new ssortingng[dt.Rows.Count, 1]; int[,] clnDataInt = new int[dt.Rows.Count, 1]; double[,] clnDataDouble = new double[dt.Rows.Count, 1]; ssortingng columnLetter = char.ConvertFromUtf32("A".ToCharArray()[0] + i); rngExcel = xlWk.get_Range(columnLetter + "2", Missing.Value); rngExcel = rngExcel.get_Resize(dt.Rows.Count, 1); ssortingng dataTypeName = dt.Columns[fieldNames[i]].DataType.Name; for (int j = 0; j < dt.Rows.Count; j++) { if (fieldNames[i].Length > 0) { switch (dataTypeName) { case "Int32": clnDataInt[j, 0] = Convert.ToInt32(dt.Rows[j][fieldNames[i]]); break; case "Double": clnDataDouble[j, 0] = Convert.ToDouble(dt.Rows[j][fieldNames[i]]); break; case "DateTime": if (fieldNames[i].ToLower().Contains("time")) clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToShortTimeSsortingng(); else if (fieldNames[i].ToLower().Contains("date")) clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToShortDateSsortingng(); else clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToSsortingng(); break; default: clnDataSsortingng[j, 0] = dt.Rows[j][fieldNames[i]].ToSsortingng(); break; } } else clnDataSsortingng[j, 0] = ssortingng.Empty; } // set values in the sheet wholesale. if (dataTypeName == "Int32") rngExcel.set_Value(Missing.Value, clnDataInt); else if (dataTypeName == "Double") rngExcel.set_Value(Missing.Value, clnDataDouble); else rngExcel.set_Value(Missing.Value, clnDataSsortingng); } // figure out the letter of the last column (supports 1 letter column names) ssortingng lastColumn = char.ConvertFromUtf32("A".ToCharArray()[0] + columnNames.Length - 1); // make the header range bold headerRange = xlWk.get_Range("A1", lastColumn + "1"); headerRange.Font.Bold = true; // autofit for better view xlWk.Columns.AutoFit(); } finally { ReleaseObject(headerRange); ReleaseObject(rngExcel); } } private void ReleaseObject(object obj) { try { System.Runtime.InteropServices.Marshal.ReleaseComObject(obj); obj = null; } catch { obj = null; } finally { GC.Collect(); } } // rend les noms des colonnes (par exemple, les en-têtes)  private void RenderDataTableOnXlSheet(DataTable dt, Excel.Worksheet xlWk, ssortingng [] columnNames, ssortingng [] fieldNames) { Excel.Range rngExcel = null; Excel.Range headerRange = null; try { // render the column names (eg headers) for (int i = 0; i < columnNames.Length; i++) xlWk.Cells[1, i + 1] = columnNames[i]; // for each column, create an array and set the array // to the excel range for that column. for (int i = 0; i < fieldNames.Length; i++) { ssortingng[,] clnDataSsortingng = new ssortingng[dt.Rows.Count, 1]; int[,] clnDataInt = new int[dt.Rows.Count, 1]; double[,] clnDataDouble = new double[dt.Rows.Count, 1]; ssortingng columnLetter = char.ConvertFromUtf32("A".ToCharArray()[0] + i); rngExcel = xlWk.get_Range(columnLetter + "2", Missing.Value); rngExcel = rngExcel.get_Resize(dt.Rows.Count, 1); ssortingng dataTypeName = dt.Columns[fieldNames[i]].DataType.Name; for (int j = 0; j < dt.Rows.Count; j++) { if (fieldNames[i].Length > 0) { switch (dataTypeName) { case "Int32": clnDataInt[j, 0] = Convert.ToInt32(dt.Rows[j][fieldNames[i]]); break; case "Double": clnDataDouble[j, 0] = Convert.ToDouble(dt.Rows[j][fieldNames[i]]); break; case "DateTime": if (fieldNames[i].ToLower().Contains("time")) clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToShortTimeSsortingng(); else if (fieldNames[i].ToLower().Contains("date")) clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToShortDateSsortingng(); else clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToSsortingng(); break; default: clnDataSsortingng[j, 0] = dt.Rows[j][fieldNames[i]].ToSsortingng(); break; } } else clnDataSsortingng[j, 0] = ssortingng.Empty; } // set values in the sheet wholesale. if (dataTypeName == "Int32") rngExcel.set_Value(Missing.Value, clnDataInt); else if (dataTypeName == "Double") rngExcel.set_Value(Missing.Value, clnDataDouble); else rngExcel.set_Value(Missing.Value, clnDataSsortingng); } // figure out the letter of the last column (supports 1 letter column names) ssortingng lastColumn = char.ConvertFromUtf32("A".ToCharArray()[0] + columnNames.Length - 1); // make the header range bold headerRange = xlWk.get_Range("A1", lastColumn + "1"); headerRange.Font.Bold = true; // autofit for better view xlWk.Columns.AutoFit(); } finally { ReleaseObject(headerRange); ReleaseObject(rngExcel); } } private void ReleaseObject(object obj) { try { System.Runtime.InteropServices.Marshal.ReleaseComObject(obj); obj = null; } catch { obj = null; } finally { GC.Collect(); } } pour (int i = 0; i <columnNames.Length; i ++)  private void RenderDataTableOnXlSheet(DataTable dt, Excel.Worksheet xlWk, ssortingng [] columnNames, ssortingng [] fieldNames) { Excel.Range rngExcel = null; Excel.Range headerRange = null; try { // render the column names (eg headers) for (int i = 0; i < columnNames.Length; i++) xlWk.Cells[1, i + 1] = columnNames[i]; // for each column, create an array and set the array // to the excel range for that column. for (int i = 0; i < fieldNames.Length; i++) { ssortingng[,] clnDataSsortingng = new ssortingng[dt.Rows.Count, 1]; int[,] clnDataInt = new int[dt.Rows.Count, 1]; double[,] clnDataDouble = new double[dt.Rows.Count, 1]; ssortingng columnLetter = char.ConvertFromUtf32("A".ToCharArray()[0] + i); rngExcel = xlWk.get_Range(columnLetter + "2", Missing.Value); rngExcel = rngExcel.get_Resize(dt.Rows.Count, 1); ssortingng dataTypeName = dt.Columns[fieldNames[i]].DataType.Name; for (int j = 0; j < dt.Rows.Count; j++) { if (fieldNames[i].Length > 0) { switch (dataTypeName) { case "Int32": clnDataInt[j, 0] = Convert.ToInt32(dt.Rows[j][fieldNames[i]]); break; case "Double": clnDataDouble[j, 0] = Convert.ToDouble(dt.Rows[j][fieldNames[i]]); break; case "DateTime": if (fieldNames[i].ToLower().Contains("time")) clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToShortTimeSsortingng(); else if (fieldNames[i].ToLower().Contains("date")) clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToShortDateSsortingng(); else clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToSsortingng(); break; default: clnDataSsortingng[j, 0] = dt.Rows[j][fieldNames[i]].ToSsortingng(); break; } } else clnDataSsortingng[j, 0] = ssortingng.Empty; } // set values in the sheet wholesale. if (dataTypeName == "Int32") rngExcel.set_Value(Missing.Value, clnDataInt); else if (dataTypeName == "Double") rngExcel.set_Value(Missing.Value, clnDataDouble); else rngExcel.set_Value(Missing.Value, clnDataSsortingng); } // figure out the letter of the last column (supports 1 letter column names) ssortingng lastColumn = char.ConvertFromUtf32("A".ToCharArray()[0] + columnNames.Length - 1); // make the header range bold headerRange = xlWk.get_Range("A1", lastColumn + "1"); headerRange.Font.Bold = true; // autofit for better view xlWk.Columns.AutoFit(); } finally { ReleaseObject(headerRange); ReleaseObject(rngExcel); } } private void ReleaseObject(object obj) { try { System.Runtime.InteropServices.Marshal.ReleaseComObject(obj); obj = null; } catch { obj = null; } finally { GC.Collect(); } } xlWk.Cells [1, i + 1] = columnNames [i];  private void RenderDataTableOnXlSheet(DataTable dt, Excel.Worksheet xlWk, ssortingng [] columnNames, ssortingng [] fieldNames) { Excel.Range rngExcel = null; Excel.Range headerRange = null; try { // render the column names (eg headers) for (int i = 0; i < columnNames.Length; i++) xlWk.Cells[1, i + 1] = columnNames[i]; // for each column, create an array and set the array // to the excel range for that column. for (int i = 0; i < fieldNames.Length; i++) { ssortingng[,] clnDataSsortingng = new ssortingng[dt.Rows.Count, 1]; int[,] clnDataInt = new int[dt.Rows.Count, 1]; double[,] clnDataDouble = new double[dt.Rows.Count, 1]; ssortingng columnLetter = char.ConvertFromUtf32("A".ToCharArray()[0] + i); rngExcel = xlWk.get_Range(columnLetter + "2", Missing.Value); rngExcel = rngExcel.get_Resize(dt.Rows.Count, 1); ssortingng dataTypeName = dt.Columns[fieldNames[i]].DataType.Name; for (int j = 0; j < dt.Rows.Count; j++) { if (fieldNames[i].Length > 0) { switch (dataTypeName) { case "Int32": clnDataInt[j, 0] = Convert.ToInt32(dt.Rows[j][fieldNames[i]]); break; case "Double": clnDataDouble[j, 0] = Convert.ToDouble(dt.Rows[j][fieldNames[i]]); break; case "DateTime": if (fieldNames[i].ToLower().Contains("time")) clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToShortTimeSsortingng(); else if (fieldNames[i].ToLower().Contains("date")) clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToShortDateSsortingng(); else clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToSsortingng(); break; default: clnDataSsortingng[j, 0] = dt.Rows[j][fieldNames[i]].ToSsortingng(); break; } } else clnDataSsortingng[j, 0] = ssortingng.Empty; } // set values in the sheet wholesale. if (dataTypeName == "Int32") rngExcel.set_Value(Missing.Value, clnDataInt); else if (dataTypeName == "Double") rngExcel.set_Value(Missing.Value, clnDataDouble); else rngExcel.set_Value(Missing.Value, clnDataSsortingng); } // figure out the letter of the last column (supports 1 letter column names) ssortingng lastColumn = char.ConvertFromUtf32("A".ToCharArray()[0] + columnNames.Length - 1); // make the header range bold headerRange = xlWk.get_Range("A1", lastColumn + "1"); headerRange.Font.Bold = true; // autofit for better view xlWk.Columns.AutoFit(); } finally { ReleaseObject(headerRange); ReleaseObject(rngExcel); } } private void ReleaseObject(object obj) { try { System.Runtime.InteropServices.Marshal.ReleaseComObject(obj); obj = null; } catch { obj = null; } finally { GC.Collect(); } } // pour chaque colonne, créez un tableau et définissez le tableau  private void RenderDataTableOnXlSheet(DataTable dt, Excel.Worksheet xlWk, ssortingng [] columnNames, ssortingng [] fieldNames) { Excel.Range rngExcel = null; Excel.Range headerRange = null; try { // render the column names (eg headers) for (int i = 0; i < columnNames.Length; i++) xlWk.Cells[1, i + 1] = columnNames[i]; // for each column, create an array and set the array // to the excel range for that column. for (int i = 0; i < fieldNames.Length; i++) { ssortingng[,] clnDataSsortingng = new ssortingng[dt.Rows.Count, 1]; int[,] clnDataInt = new int[dt.Rows.Count, 1]; double[,] clnDataDouble = new double[dt.Rows.Count, 1]; ssortingng columnLetter = char.ConvertFromUtf32("A".ToCharArray()[0] + i); rngExcel = xlWk.get_Range(columnLetter + "2", Missing.Value); rngExcel = rngExcel.get_Resize(dt.Rows.Count, 1); ssortingng dataTypeName = dt.Columns[fieldNames[i]].DataType.Name; for (int j = 0; j < dt.Rows.Count; j++) { if (fieldNames[i].Length > 0) { switch (dataTypeName) { case "Int32": clnDataInt[j, 0] = Convert.ToInt32(dt.Rows[j][fieldNames[i]]); break; case "Double": clnDataDouble[j, 0] = Convert.ToDouble(dt.Rows[j][fieldNames[i]]); break; case "DateTime": if (fieldNames[i].ToLower().Contains("time")) clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToShortTimeSsortingng(); else if (fieldNames[i].ToLower().Contains("date")) clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToShortDateSsortingng(); else clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToSsortingng(); break; default: clnDataSsortingng[j, 0] = dt.Rows[j][fieldNames[i]].ToSsortingng(); break; } } else clnDataSsortingng[j, 0] = ssortingng.Empty; } // set values in the sheet wholesale. if (dataTypeName == "Int32") rngExcel.set_Value(Missing.Value, clnDataInt); else if (dataTypeName == "Double") rngExcel.set_Value(Missing.Value, clnDataDouble); else rngExcel.set_Value(Missing.Value, clnDataSsortingng); } // figure out the letter of the last column (supports 1 letter column names) ssortingng lastColumn = char.ConvertFromUtf32("A".ToCharArray()[0] + columnNames.Length - 1); // make the header range bold headerRange = xlWk.get_Range("A1", lastColumn + "1"); headerRange.Font.Bold = true; // autofit for better view xlWk.Columns.AutoFit(); } finally { ReleaseObject(headerRange); ReleaseObject(rngExcel); } } private void ReleaseObject(object obj) { try { System.Runtime.InteropServices.Marshal.ReleaseComObject(obj); obj = null; } catch { obj = null; } finally { GC.Collect(); } } // à la gamme Excel pour cette colonne.  private void RenderDataTableOnXlSheet(DataTable dt, Excel.Worksheet xlWk, ssortingng [] columnNames, ssortingng [] fieldNames) { Excel.Range rngExcel = null; Excel.Range headerRange = null; try { // render the column names (eg headers) for (int i = 0; i < columnNames.Length; i++) xlWk.Cells[1, i + 1] = columnNames[i]; // for each column, create an array and set the array // to the excel range for that column. for (int i = 0; i < fieldNames.Length; i++) { ssortingng[,] clnDataSsortingng = new ssortingng[dt.Rows.Count, 1]; int[,] clnDataInt = new int[dt.Rows.Count, 1]; double[,] clnDataDouble = new double[dt.Rows.Count, 1]; ssortingng columnLetter = char.ConvertFromUtf32("A".ToCharArray()[0] + i); rngExcel = xlWk.get_Range(columnLetter + "2", Missing.Value); rngExcel = rngExcel.get_Resize(dt.Rows.Count, 1); ssortingng dataTypeName = dt.Columns[fieldNames[i]].DataType.Name; for (int j = 0; j < dt.Rows.Count; j++) { if (fieldNames[i].Length > 0) { switch (dataTypeName) { case "Int32": clnDataInt[j, 0] = Convert.ToInt32(dt.Rows[j][fieldNames[i]]); break; case "Double": clnDataDouble[j, 0] = Convert.ToDouble(dt.Rows[j][fieldNames[i]]); break; case "DateTime": if (fieldNames[i].ToLower().Contains("time")) clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToShortTimeSsortingng(); else if (fieldNames[i].ToLower().Contains("date")) clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToShortDateSsortingng(); else clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToSsortingng(); break; default: clnDataSsortingng[j, 0] = dt.Rows[j][fieldNames[i]].ToSsortingng(); break; } } else clnDataSsortingng[j, 0] = ssortingng.Empty; } // set values in the sheet wholesale. if (dataTypeName == "Int32") rngExcel.set_Value(Missing.Value, clnDataInt); else if (dataTypeName == "Double") rngExcel.set_Value(Missing.Value, clnDataDouble); else rngExcel.set_Value(Missing.Value, clnDataSsortingng); } // figure out the letter of the last column (supports 1 letter column names) ssortingng lastColumn = char.ConvertFromUtf32("A".ToCharArray()[0] + columnNames.Length - 1); // make the header range bold headerRange = xlWk.get_Range("A1", lastColumn + "1"); headerRange.Font.Bold = true; // autofit for better view xlWk.Columns.AutoFit(); } finally { ReleaseObject(headerRange); ReleaseObject(rngExcel); } } private void ReleaseObject(object obj) { try { System.Runtime.InteropServices.Marshal.ReleaseComObject(obj); obj = null; } catch { obj = null; } finally { GC.Collect(); } } pour (int i = 0; i <fieldNames.Length; i ++)  private void RenderDataTableOnXlSheet(DataTable dt, Excel.Worksheet xlWk, ssortingng [] columnNames, ssortingng [] fieldNames) { Excel.Range rngExcel = null; Excel.Range headerRange = null; try { // render the column names (eg headers) for (int i = 0; i < columnNames.Length; i++) xlWk.Cells[1, i + 1] = columnNames[i]; // for each column, create an array and set the array // to the excel range for that column. for (int i = 0; i < fieldNames.Length; i++) { ssortingng[,] clnDataSsortingng = new ssortingng[dt.Rows.Count, 1]; int[,] clnDataInt = new int[dt.Rows.Count, 1]; double[,] clnDataDouble = new double[dt.Rows.Count, 1]; ssortingng columnLetter = char.ConvertFromUtf32("A".ToCharArray()[0] + i); rngExcel = xlWk.get_Range(columnLetter + "2", Missing.Value); rngExcel = rngExcel.get_Resize(dt.Rows.Count, 1); ssortingng dataTypeName = dt.Columns[fieldNames[i]].DataType.Name; for (int j = 0; j < dt.Rows.Count; j++) { if (fieldNames[i].Length > 0) { switch (dataTypeName) { case "Int32": clnDataInt[j, 0] = Convert.ToInt32(dt.Rows[j][fieldNames[i]]); break; case "Double": clnDataDouble[j, 0] = Convert.ToDouble(dt.Rows[j][fieldNames[i]]); break; case "DateTime": if (fieldNames[i].ToLower().Contains("time")) clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToShortTimeSsortingng(); else if (fieldNames[i].ToLower().Contains("date")) clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToShortDateSsortingng(); else clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToSsortingng(); break; default: clnDataSsortingng[j, 0] = dt.Rows[j][fieldNames[i]].ToSsortingng(); break; } } else clnDataSsortingng[j, 0] = ssortingng.Empty; } // set values in the sheet wholesale. if (dataTypeName == "Int32") rngExcel.set_Value(Missing.Value, clnDataInt); else if (dataTypeName == "Double") rngExcel.set_Value(Missing.Value, clnDataDouble); else rngExcel.set_Value(Missing.Value, clnDataSsortingng); } // figure out the letter of the last column (supports 1 letter column names) ssortingng lastColumn = char.ConvertFromUtf32("A".ToCharArray()[0] + columnNames.Length - 1); // make the header range bold headerRange = xlWk.get_Range("A1", lastColumn + "1"); headerRange.Font.Bold = true; // autofit for better view xlWk.Columns.AutoFit(); } finally { ReleaseObject(headerRange); ReleaseObject(rngExcel); } } private void ReleaseObject(object obj) { try { System.Runtime.InteropServices.Marshal.ReleaseComObject(obj); obj = null; } catch { obj = null; } finally { GC.Collect(); } } string [,] clnDataSsortingng = nouvelle string [dt.Rows.Count, 1];  private void RenderDataTableOnXlSheet(DataTable dt, Excel.Worksheet xlWk, ssortingng [] columnNames, ssortingng [] fieldNames) { Excel.Range rngExcel = null; Excel.Range headerRange = null; try { // render the column names (eg headers) for (int i = 0; i < columnNames.Length; i++) xlWk.Cells[1, i + 1] = columnNames[i]; // for each column, create an array and set the array // to the excel range for that column. for (int i = 0; i < fieldNames.Length; i++) { ssortingng[,] clnDataSsortingng = new ssortingng[dt.Rows.Count, 1]; int[,] clnDataInt = new int[dt.Rows.Count, 1]; double[,] clnDataDouble = new double[dt.Rows.Count, 1]; ssortingng columnLetter = char.ConvertFromUtf32("A".ToCharArray()[0] + i); rngExcel = xlWk.get_Range(columnLetter + "2", Missing.Value); rngExcel = rngExcel.get_Resize(dt.Rows.Count, 1); ssortingng dataTypeName = dt.Columns[fieldNames[i]].DataType.Name; for (int j = 0; j < dt.Rows.Count; j++) { if (fieldNames[i].Length > 0) { switch (dataTypeName) { case "Int32": clnDataInt[j, 0] = Convert.ToInt32(dt.Rows[j][fieldNames[i]]); break; case "Double": clnDataDouble[j, 0] = Convert.ToDouble(dt.Rows[j][fieldNames[i]]); break; case "DateTime": if (fieldNames[i].ToLower().Contains("time")) clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToShortTimeSsortingng(); else if (fieldNames[i].ToLower().Contains("date")) clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToShortDateSsortingng(); else clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToSsortingng(); break; default: clnDataSsortingng[j, 0] = dt.Rows[j][fieldNames[i]].ToSsortingng(); break; } } else clnDataSsortingng[j, 0] = ssortingng.Empty; } // set values in the sheet wholesale. if (dataTypeName == "Int32") rngExcel.set_Value(Missing.Value, clnDataInt); else if (dataTypeName == "Double") rngExcel.set_Value(Missing.Value, clnDataDouble); else rngExcel.set_Value(Missing.Value, clnDataSsortingng); } // figure out the letter of the last column (supports 1 letter column names) ssortingng lastColumn = char.ConvertFromUtf32("A".ToCharArray()[0] + columnNames.Length - 1); // make the header range bold headerRange = xlWk.get_Range("A1", lastColumn + "1"); headerRange.Font.Bold = true; // autofit for better view xlWk.Columns.AutoFit(); } finally { ReleaseObject(headerRange); ReleaseObject(rngExcel); } } private void ReleaseObject(object obj) { try { System.Runtime.InteropServices.Marshal.ReleaseComObject(obj); obj = null; } catch { obj = null; } finally { GC.Collect(); } } int [,] clnDataInt = new int [dt.Rows.Count, 1];  private void RenderDataTableOnXlSheet(DataTable dt, Excel.Worksheet xlWk, ssortingng [] columnNames, ssortingng [] fieldNames) { Excel.Range rngExcel = null; Excel.Range headerRange = null; try { // render the column names (eg headers) for (int i = 0; i < columnNames.Length; i++) xlWk.Cells[1, i + 1] = columnNames[i]; // for each column, create an array and set the array // to the excel range for that column. for (int i = 0; i < fieldNames.Length; i++) { ssortingng[,] clnDataSsortingng = new ssortingng[dt.Rows.Count, 1]; int[,] clnDataInt = new int[dt.Rows.Count, 1]; double[,] clnDataDouble = new double[dt.Rows.Count, 1]; ssortingng columnLetter = char.ConvertFromUtf32("A".ToCharArray()[0] + i); rngExcel = xlWk.get_Range(columnLetter + "2", Missing.Value); rngExcel = rngExcel.get_Resize(dt.Rows.Count, 1); ssortingng dataTypeName = dt.Columns[fieldNames[i]].DataType.Name; for (int j = 0; j < dt.Rows.Count; j++) { if (fieldNames[i].Length > 0) { switch (dataTypeName) { case "Int32": clnDataInt[j, 0] = Convert.ToInt32(dt.Rows[j][fieldNames[i]]); break; case "Double": clnDataDouble[j, 0] = Convert.ToDouble(dt.Rows[j][fieldNames[i]]); break; case "DateTime": if (fieldNames[i].ToLower().Contains("time")) clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToShortTimeSsortingng(); else if (fieldNames[i].ToLower().Contains("date")) clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToShortDateSsortingng(); else clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToSsortingng(); break; default: clnDataSsortingng[j, 0] = dt.Rows[j][fieldNames[i]].ToSsortingng(); break; } } else clnDataSsortingng[j, 0] = ssortingng.Empty; } // set values in the sheet wholesale. if (dataTypeName == "Int32") rngExcel.set_Value(Missing.Value, clnDataInt); else if (dataTypeName == "Double") rngExcel.set_Value(Missing.Value, clnDataDouble); else rngExcel.set_Value(Missing.Value, clnDataSsortingng); } // figure out the letter of the last column (supports 1 letter column names) ssortingng lastColumn = char.ConvertFromUtf32("A".ToCharArray()[0] + columnNames.Length - 1); // make the header range bold headerRange = xlWk.get_Range("A1", lastColumn + "1"); headerRange.Font.Bold = true; // autofit for better view xlWk.Columns.AutoFit(); } finally { ReleaseObject(headerRange); ReleaseObject(rngExcel); } } private void ReleaseObject(object obj) { try { System.Runtime.InteropServices.Marshal.ReleaseComObject(obj); obj = null; } catch { obj = null; } finally { GC.Collect(); } } double [,] clnDataDouble = new double [dt.Rows.Count, 1];  private void RenderDataTableOnXlSheet(DataTable dt, Excel.Worksheet xlWk, ssortingng [] columnNames, ssortingng [] fieldNames) { Excel.Range rngExcel = null; Excel.Range headerRange = null; try { // render the column names (eg headers) for (int i = 0; i < columnNames.Length; i++) xlWk.Cells[1, i + 1] = columnNames[i]; // for each column, create an array and set the array // to the excel range for that column. for (int i = 0; i < fieldNames.Length; i++) { ssortingng[,] clnDataSsortingng = new ssortingng[dt.Rows.Count, 1]; int[,] clnDataInt = new int[dt.Rows.Count, 1]; double[,] clnDataDouble = new double[dt.Rows.Count, 1]; ssortingng columnLetter = char.ConvertFromUtf32("A".ToCharArray()[0] + i); rngExcel = xlWk.get_Range(columnLetter + "2", Missing.Value); rngExcel = rngExcel.get_Resize(dt.Rows.Count, 1); ssortingng dataTypeName = dt.Columns[fieldNames[i]].DataType.Name; for (int j = 0; j < dt.Rows.Count; j++) { if (fieldNames[i].Length > 0) { switch (dataTypeName) { case "Int32": clnDataInt[j, 0] = Convert.ToInt32(dt.Rows[j][fieldNames[i]]); break; case "Double": clnDataDouble[j, 0] = Convert.ToDouble(dt.Rows[j][fieldNames[i]]); break; case "DateTime": if (fieldNames[i].ToLower().Contains("time")) clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToShortTimeSsortingng(); else if (fieldNames[i].ToLower().Contains("date")) clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToShortDateSsortingng(); else clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToSsortingng(); break; default: clnDataSsortingng[j, 0] = dt.Rows[j][fieldNames[i]].ToSsortingng(); break; } } else clnDataSsortingng[j, 0] = ssortingng.Empty; } // set values in the sheet wholesale. if (dataTypeName == "Int32") rngExcel.set_Value(Missing.Value, clnDataInt); else if (dataTypeName == "Double") rngExcel.set_Value(Missing.Value, clnDataDouble); else rngExcel.set_Value(Missing.Value, clnDataSsortingng); } // figure out the letter of the last column (supports 1 letter column names) ssortingng lastColumn = char.ConvertFromUtf32("A".ToCharArray()[0] + columnNames.Length - 1); // make the header range bold headerRange = xlWk.get_Range("A1", lastColumn + "1"); headerRange.Font.Bold = true; // autofit for better view xlWk.Columns.AutoFit(); } finally { ReleaseObject(headerRange); ReleaseObject(rngExcel); } } private void ReleaseObject(object obj) { try { System.Runtime.InteropServices.Marshal.ReleaseComObject(obj); obj = null; } catch { obj = null; } finally { GC.Collect(); } } ssortingng columnLetter = char.ConvertFromUtf32 ("A" .ToCharArray () [0] + i);  private void RenderDataTableOnXlSheet(DataTable dt, Excel.Worksheet xlWk, ssortingng [] columnNames, ssortingng [] fieldNames) { Excel.Range rngExcel = null; Excel.Range headerRange = null; try { // render the column names (eg headers) for (int i = 0; i < columnNames.Length; i++) xlWk.Cells[1, i + 1] = columnNames[i]; // for each column, create an array and set the array // to the excel range for that column. for (int i = 0; i < fieldNames.Length; i++) { ssortingng[,] clnDataSsortingng = new ssortingng[dt.Rows.Count, 1]; int[,] clnDataInt = new int[dt.Rows.Count, 1]; double[,] clnDataDouble = new double[dt.Rows.Count, 1]; ssortingng columnLetter = char.ConvertFromUtf32("A".ToCharArray()[0] + i); rngExcel = xlWk.get_Range(columnLetter + "2", Missing.Value); rngExcel = rngExcel.get_Resize(dt.Rows.Count, 1); ssortingng dataTypeName = dt.Columns[fieldNames[i]].DataType.Name; for (int j = 0; j < dt.Rows.Count; j++) { if (fieldNames[i].Length > 0) { switch (dataTypeName) { case "Int32": clnDataInt[j, 0] = Convert.ToInt32(dt.Rows[j][fieldNames[i]]); break; case "Double": clnDataDouble[j, 0] = Convert.ToDouble(dt.Rows[j][fieldNames[i]]); break; case "DateTime": if (fieldNames[i].ToLower().Contains("time")) clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToShortTimeSsortingng(); else if (fieldNames[i].ToLower().Contains("date")) clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToShortDateSsortingng(); else clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToSsortingng(); break; default: clnDataSsortingng[j, 0] = dt.Rows[j][fieldNames[i]].ToSsortingng(); break; } } else clnDataSsortingng[j, 0] = ssortingng.Empty; } // set values in the sheet wholesale. if (dataTypeName == "Int32") rngExcel.set_Value(Missing.Value, clnDataInt); else if (dataTypeName == "Double") rngExcel.set_Value(Missing.Value, clnDataDouble); else rngExcel.set_Value(Missing.Value, clnDataSsortingng); } // figure out the letter of the last column (supports 1 letter column names) ssortingng lastColumn = char.ConvertFromUtf32("A".ToCharArray()[0] + columnNames.Length - 1); // make the header range bold headerRange = xlWk.get_Range("A1", lastColumn + "1"); headerRange.Font.Bold = true; // autofit for better view xlWk.Columns.AutoFit(); } finally { ReleaseObject(headerRange); ReleaseObject(rngExcel); } } private void ReleaseObject(object obj) { try { System.Runtime.InteropServices.Marshal.ReleaseComObject(obj); obj = null; } catch { obj = null; } finally { GC.Collect(); } } rngExcel = xlWk.get_Range (columnLetter + "2", Missing.Value);  private void RenderDataTableOnXlSheet(DataTable dt, Excel.Worksheet xlWk, ssortingng [] columnNames, ssortingng [] fieldNames) { Excel.Range rngExcel = null; Excel.Range headerRange = null; try { // render the column names (eg headers) for (int i = 0; i < columnNames.Length; i++) xlWk.Cells[1, i + 1] = columnNames[i]; // for each column, create an array and set the array // to the excel range for that column. for (int i = 0; i < fieldNames.Length; i++) { ssortingng[,] clnDataSsortingng = new ssortingng[dt.Rows.Count, 1]; int[,] clnDataInt = new int[dt.Rows.Count, 1]; double[,] clnDataDouble = new double[dt.Rows.Count, 1]; ssortingng columnLetter = char.ConvertFromUtf32("A".ToCharArray()[0] + i); rngExcel = xlWk.get_Range(columnLetter + "2", Missing.Value); rngExcel = rngExcel.get_Resize(dt.Rows.Count, 1); ssortingng dataTypeName = dt.Columns[fieldNames[i]].DataType.Name; for (int j = 0; j < dt.Rows.Count; j++) { if (fieldNames[i].Length > 0) { switch (dataTypeName) { case "Int32": clnDataInt[j, 0] = Convert.ToInt32(dt.Rows[j][fieldNames[i]]); break; case "Double": clnDataDouble[j, 0] = Convert.ToDouble(dt.Rows[j][fieldNames[i]]); break; case "DateTime": if (fieldNames[i].ToLower().Contains("time")) clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToShortTimeSsortingng(); else if (fieldNames[i].ToLower().Contains("date")) clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToShortDateSsortingng(); else clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToSsortingng(); break; default: clnDataSsortingng[j, 0] = dt.Rows[j][fieldNames[i]].ToSsortingng(); break; } } else clnDataSsortingng[j, 0] = ssortingng.Empty; } // set values in the sheet wholesale. if (dataTypeName == "Int32") rngExcel.set_Value(Missing.Value, clnDataInt); else if (dataTypeName == "Double") rngExcel.set_Value(Missing.Value, clnDataDouble); else rngExcel.set_Value(Missing.Value, clnDataSsortingng); } // figure out the letter of the last column (supports 1 letter column names) ssortingng lastColumn = char.ConvertFromUtf32("A".ToCharArray()[0] + columnNames.Length - 1); // make the header range bold headerRange = xlWk.get_Range("A1", lastColumn + "1"); headerRange.Font.Bold = true; // autofit for better view xlWk.Columns.AutoFit(); } finally { ReleaseObject(headerRange); ReleaseObject(rngExcel); } } private void ReleaseObject(object obj) { try { System.Runtime.InteropServices.Marshal.ReleaseComObject(obj); obj = null; } catch { obj = null; } finally { GC.Collect(); } } rngExcel = rngExcel.get_Resize (dt.Rows.Count, 1);  private void RenderDataTableOnXlSheet(DataTable dt, Excel.Worksheet xlWk, ssortingng [] columnNames, ssortingng [] fieldNames) { Excel.Range rngExcel = null; Excel.Range headerRange = null; try { // render the column names (eg headers) for (int i = 0; i < columnNames.Length; i++) xlWk.Cells[1, i + 1] = columnNames[i]; // for each column, create an array and set the array // to the excel range for that column. for (int i = 0; i < fieldNames.Length; i++) { ssortingng[,] clnDataSsortingng = new ssortingng[dt.Rows.Count, 1]; int[,] clnDataInt = new int[dt.Rows.Count, 1]; double[,] clnDataDouble = new double[dt.Rows.Count, 1]; ssortingng columnLetter = char.ConvertFromUtf32("A".ToCharArray()[0] + i); rngExcel = xlWk.get_Range(columnLetter + "2", Missing.Value); rngExcel = rngExcel.get_Resize(dt.Rows.Count, 1); ssortingng dataTypeName = dt.Columns[fieldNames[i]].DataType.Name; for (int j = 0; j < dt.Rows.Count; j++) { if (fieldNames[i].Length > 0) { switch (dataTypeName) { case "Int32": clnDataInt[j, 0] = Convert.ToInt32(dt.Rows[j][fieldNames[i]]); break; case "Double": clnDataDouble[j, 0] = Convert.ToDouble(dt.Rows[j][fieldNames[i]]); break; case "DateTime": if (fieldNames[i].ToLower().Contains("time")) clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToShortTimeSsortingng(); else if (fieldNames[i].ToLower().Contains("date")) clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToShortDateSsortingng(); else clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToSsortingng(); break; default: clnDataSsortingng[j, 0] = dt.Rows[j][fieldNames[i]].ToSsortingng(); break; } } else clnDataSsortingng[j, 0] = ssortingng.Empty; } // set values in the sheet wholesale. if (dataTypeName == "Int32") rngExcel.set_Value(Missing.Value, clnDataInt); else if (dataTypeName == "Double") rngExcel.set_Value(Missing.Value, clnDataDouble); else rngExcel.set_Value(Missing.Value, clnDataSsortingng); } // figure out the letter of the last column (supports 1 letter column names) ssortingng lastColumn = char.ConvertFromUtf32("A".ToCharArray()[0] + columnNames.Length - 1); // make the header range bold headerRange = xlWk.get_Range("A1", lastColumn + "1"); headerRange.Font.Bold = true; // autofit for better view xlWk.Columns.AutoFit(); } finally { ReleaseObject(headerRange); ReleaseObject(rngExcel); } } private void ReleaseObject(object obj) { try { System.Runtime.InteropServices.Marshal.ReleaseComObject(obj); obj = null; } catch { obj = null; } finally { GC.Collect(); } } string dataTypeName = dt.Columns [fieldNames [i]]. DataType.Name;  private void RenderDataTableOnXlSheet(DataTable dt, Excel.Worksheet xlWk, ssortingng [] columnNames, ssortingng [] fieldNames) { Excel.Range rngExcel = null; Excel.Range headerRange = null; try { // render the column names (eg headers) for (int i = 0; i < columnNames.Length; i++) xlWk.Cells[1, i + 1] = columnNames[i]; // for each column, create an array and set the array // to the excel range for that column. for (int i = 0; i < fieldNames.Length; i++) { ssortingng[,] clnDataSsortingng = new ssortingng[dt.Rows.Count, 1]; int[,] clnDataInt = new int[dt.Rows.Count, 1]; double[,] clnDataDouble = new double[dt.Rows.Count, 1]; ssortingng columnLetter = char.ConvertFromUtf32("A".ToCharArray()[0] + i); rngExcel = xlWk.get_Range(columnLetter + "2", Missing.Value); rngExcel = rngExcel.get_Resize(dt.Rows.Count, 1); ssortingng dataTypeName = dt.Columns[fieldNames[i]].DataType.Name; for (int j = 0; j < dt.Rows.Count; j++) { if (fieldNames[i].Length > 0) { switch (dataTypeName) { case "Int32": clnDataInt[j, 0] = Convert.ToInt32(dt.Rows[j][fieldNames[i]]); break; case "Double": clnDataDouble[j, 0] = Convert.ToDouble(dt.Rows[j][fieldNames[i]]); break; case "DateTime": if (fieldNames[i].ToLower().Contains("time")) clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToShortTimeSsortingng(); else if (fieldNames[i].ToLower().Contains("date")) clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToShortDateSsortingng(); else clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToSsortingng(); break; default: clnDataSsortingng[j, 0] = dt.Rows[j][fieldNames[i]].ToSsortingng(); break; } } else clnDataSsortingng[j, 0] = ssortingng.Empty; } // set values in the sheet wholesale. if (dataTypeName == "Int32") rngExcel.set_Value(Missing.Value, clnDataInt); else if (dataTypeName == "Double") rngExcel.set_Value(Missing.Value, clnDataDouble); else rngExcel.set_Value(Missing.Value, clnDataSsortingng); } // figure out the letter of the last column (supports 1 letter column names) ssortingng lastColumn = char.ConvertFromUtf32("A".ToCharArray()[0] + columnNames.Length - 1); // make the header range bold headerRange = xlWk.get_Range("A1", lastColumn + "1"); headerRange.Font.Bold = true; // autofit for better view xlWk.Columns.AutoFit(); } finally { ReleaseObject(headerRange); ReleaseObject(rngExcel); } } private void ReleaseObject(object obj) { try { System.Runtime.InteropServices.Marshal.ReleaseComObject(obj); obj = null; } catch { obj = null; } finally { GC.Collect(); } } pour (int j = 0; j <dt.Rows.Count; j ++)  private void RenderDataTableOnXlSheet(DataTable dt, Excel.Worksheet xlWk, ssortingng [] columnNames, ssortingng [] fieldNames) { Excel.Range rngExcel = null; Excel.Range headerRange = null; try { // render the column names (eg headers) for (int i = 0; i < columnNames.Length; i++) xlWk.Cells[1, i + 1] = columnNames[i]; // for each column, create an array and set the array // to the excel range for that column. for (int i = 0; i < fieldNames.Length; i++) { ssortingng[,] clnDataSsortingng = new ssortingng[dt.Rows.Count, 1]; int[,] clnDataInt = new int[dt.Rows.Count, 1]; double[,] clnDataDouble = new double[dt.Rows.Count, 1]; ssortingng columnLetter = char.ConvertFromUtf32("A".ToCharArray()[0] + i); rngExcel = xlWk.get_Range(columnLetter + "2", Missing.Value); rngExcel = rngExcel.get_Resize(dt.Rows.Count, 1); ssortingng dataTypeName = dt.Columns[fieldNames[i]].DataType.Name; for (int j = 0; j < dt.Rows.Count; j++) { if (fieldNames[i].Length > 0) { switch (dataTypeName) { case "Int32": clnDataInt[j, 0] = Convert.ToInt32(dt.Rows[j][fieldNames[i]]); break; case "Double": clnDataDouble[j, 0] = Convert.ToDouble(dt.Rows[j][fieldNames[i]]); break; case "DateTime": if (fieldNames[i].ToLower().Contains("time")) clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToShortTimeSsortingng(); else if (fieldNames[i].ToLower().Contains("date")) clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToShortDateSsortingng(); else clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToSsortingng(); break; default: clnDataSsortingng[j, 0] = dt.Rows[j][fieldNames[i]].ToSsortingng(); break; } } else clnDataSsortingng[j, 0] = ssortingng.Empty; } // set values in the sheet wholesale. if (dataTypeName == "Int32") rngExcel.set_Value(Missing.Value, clnDataInt); else if (dataTypeName == "Double") rngExcel.set_Value(Missing.Value, clnDataDouble); else rngExcel.set_Value(Missing.Value, clnDataSsortingng); } // figure out the letter of the last column (supports 1 letter column names) ssortingng lastColumn = char.ConvertFromUtf32("A".ToCharArray()[0] + columnNames.Length - 1); // make the header range bold headerRange = xlWk.get_Range("A1", lastColumn + "1"); headerRange.Font.Bold = true; // autofit for better view xlWk.Columns.AutoFit(); } finally { ReleaseObject(headerRange); ReleaseObject(rngExcel); } } private void ReleaseObject(object obj) { try { System.Runtime.InteropServices.Marshal.ReleaseComObject(obj); obj = null; } catch { obj = null; } finally { GC.Collect(); } } if (fieldNames [i] .Length> 0)  private void RenderDataTableOnXlSheet(DataTable dt, Excel.Worksheet xlWk, ssortingng [] columnNames, ssortingng [] fieldNames) { Excel.Range rngExcel = null; Excel.Range headerRange = null; try { // render the column names (eg headers) for (int i = 0; i < columnNames.Length; i++) xlWk.Cells[1, i + 1] = columnNames[i]; // for each column, create an array and set the array // to the excel range for that column. for (int i = 0; i < fieldNames.Length; i++) { ssortingng[,] clnDataSsortingng = new ssortingng[dt.Rows.Count, 1]; int[,] clnDataInt = new int[dt.Rows.Count, 1]; double[,] clnDataDouble = new double[dt.Rows.Count, 1]; ssortingng columnLetter = char.ConvertFromUtf32("A".ToCharArray()[0] + i); rngExcel = xlWk.get_Range(columnLetter + "2", Missing.Value); rngExcel = rngExcel.get_Resize(dt.Rows.Count, 1); ssortingng dataTypeName = dt.Columns[fieldNames[i]].DataType.Name; for (int j = 0; j < dt.Rows.Count; j++) { if (fieldNames[i].Length > 0) { switch (dataTypeName) { case "Int32": clnDataInt[j, 0] = Convert.ToInt32(dt.Rows[j][fieldNames[i]]); break; case "Double": clnDataDouble[j, 0] = Convert.ToDouble(dt.Rows[j][fieldNames[i]]); break; case "DateTime": if (fieldNames[i].ToLower().Contains("time")) clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToShortTimeSsortingng(); else if (fieldNames[i].ToLower().Contains("date")) clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToShortDateSsortingng(); else clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToSsortingng(); break; default: clnDataSsortingng[j, 0] = dt.Rows[j][fieldNames[i]].ToSsortingng(); break; } } else clnDataSsortingng[j, 0] = ssortingng.Empty; } // set values in the sheet wholesale. if (dataTypeName == "Int32") rngExcel.set_Value(Missing.Value, clnDataInt); else if (dataTypeName == "Double") rngExcel.set_Value(Missing.Value, clnDataDouble); else rngExcel.set_Value(Missing.Value, clnDataSsortingng); } // figure out the letter of the last column (supports 1 letter column names) ssortingng lastColumn = char.ConvertFromUtf32("A".ToCharArray()[0] + columnNames.Length - 1); // make the header range bold headerRange = xlWk.get_Range("A1", lastColumn + "1"); headerRange.Font.Bold = true; // autofit for better view xlWk.Columns.AutoFit(); } finally { ReleaseObject(headerRange); ReleaseObject(rngExcel); } } private void ReleaseObject(object obj) { try { System.Runtime.InteropServices.Marshal.ReleaseComObject(obj); obj = null; } catch { obj = null; } finally { GC.Collect(); } } switch (dataTypeName)  private void RenderDataTableOnXlSheet(DataTable dt, Excel.Worksheet xlWk, ssortingng [] columnNames, ssortingng [] fieldNames) { Excel.Range rngExcel = null; Excel.Range headerRange = null; try { // render the column names (eg headers) for (int i = 0; i < columnNames.Length; i++) xlWk.Cells[1, i + 1] = columnNames[i]; // for each column, create an array and set the array // to the excel range for that column. for (int i = 0; i < fieldNames.Length; i++) { ssortingng[,] clnDataSsortingng = new ssortingng[dt.Rows.Count, 1]; int[,] clnDataInt = new int[dt.Rows.Count, 1]; double[,] clnDataDouble = new double[dt.Rows.Count, 1]; ssortingng columnLetter = char.ConvertFromUtf32("A".ToCharArray()[0] + i); rngExcel = xlWk.get_Range(columnLetter + "2", Missing.Value); rngExcel = rngExcel.get_Resize(dt.Rows.Count, 1); ssortingng dataTypeName = dt.Columns[fieldNames[i]].DataType.Name; for (int j = 0; j < dt.Rows.Count; j++) { if (fieldNames[i].Length > 0) { switch (dataTypeName) { case "Int32": clnDataInt[j, 0] = Convert.ToInt32(dt.Rows[j][fieldNames[i]]); break; case "Double": clnDataDouble[j, 0] = Convert.ToDouble(dt.Rows[j][fieldNames[i]]); break; case "DateTime": if (fieldNames[i].ToLower().Contains("time")) clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToShortTimeSsortingng(); else if (fieldNames[i].ToLower().Contains("date")) clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToShortDateSsortingng(); else clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToSsortingng(); break; default: clnDataSsortingng[j, 0] = dt.Rows[j][fieldNames[i]].ToSsortingng(); break; } } else clnDataSsortingng[j, 0] = ssortingng.Empty; } // set values in the sheet wholesale. if (dataTypeName == "Int32") rngExcel.set_Value(Missing.Value, clnDataInt); else if (dataTypeName == "Double") rngExcel.set_Value(Missing.Value, clnDataDouble); else rngExcel.set_Value(Missing.Value, clnDataSsortingng); } // figure out the letter of the last column (supports 1 letter column names) ssortingng lastColumn = char.ConvertFromUtf32("A".ToCharArray()[0] + columnNames.Length - 1); // make the header range bold headerRange = xlWk.get_Range("A1", lastColumn + "1"); headerRange.Font.Bold = true; // autofit for better view xlWk.Columns.AutoFit(); } finally { ReleaseObject(headerRange); ReleaseObject(rngExcel); } } private void ReleaseObject(object obj) { try { System.Runtime.InteropServices.Marshal.ReleaseComObject(obj); obj = null; } catch { obj = null; } finally { GC.Collect(); } } case "Int32":  private void RenderDataTableOnXlSheet(DataTable dt, Excel.Worksheet xlWk, ssortingng [] columnNames, ssortingng [] fieldNames) { Excel.Range rngExcel = null; Excel.Range headerRange = null; try { // render the column names (eg headers) for (int i = 0; i < columnNames.Length; i++) xlWk.Cells[1, i + 1] = columnNames[i]; // for each column, create an array and set the array // to the excel range for that column. for (int i = 0; i < fieldNames.Length; i++) { ssortingng[,] clnDataSsortingng = new ssortingng[dt.Rows.Count, 1]; int[,] clnDataInt = new int[dt.Rows.Count, 1]; double[,] clnDataDouble = new double[dt.Rows.Count, 1]; ssortingng columnLetter = char.ConvertFromUtf32("A".ToCharArray()[0] + i); rngExcel = xlWk.get_Range(columnLetter + "2", Missing.Value); rngExcel = rngExcel.get_Resize(dt.Rows.Count, 1); ssortingng dataTypeName = dt.Columns[fieldNames[i]].DataType.Name; for (int j = 0; j < dt.Rows.Count; j++) { if (fieldNames[i].Length > 0) { switch (dataTypeName) { case "Int32": clnDataInt[j, 0] = Convert.ToInt32(dt.Rows[j][fieldNames[i]]); break; case "Double": clnDataDouble[j, 0] = Convert.ToDouble(dt.Rows[j][fieldNames[i]]); break; case "DateTime": if (fieldNames[i].ToLower().Contains("time")) clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToShortTimeSsortingng(); else if (fieldNames[i].ToLower().Contains("date")) clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToShortDateSsortingng(); else clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToSsortingng(); break; default: clnDataSsortingng[j, 0] = dt.Rows[j][fieldNames[i]].ToSsortingng(); break; } } else clnDataSsortingng[j, 0] = ssortingng.Empty; } // set values in the sheet wholesale. if (dataTypeName == "Int32") rngExcel.set_Value(Missing.Value, clnDataInt); else if (dataTypeName == "Double") rngExcel.set_Value(Missing.Value, clnDataDouble); else rngExcel.set_Value(Missing.Value, clnDataSsortingng); } // figure out the letter of the last column (supports 1 letter column names) ssortingng lastColumn = char.ConvertFromUtf32("A".ToCharArray()[0] + columnNames.Length - 1); // make the header range bold headerRange = xlWk.get_Range("A1", lastColumn + "1"); headerRange.Font.Bold = true; // autofit for better view xlWk.Columns.AutoFit(); } finally { ReleaseObject(headerRange); ReleaseObject(rngExcel); } } private void ReleaseObject(object obj) { try { System.Runtime.InteropServices.Marshal.ReleaseComObject(obj); obj = null; } catch { obj = null; } finally { GC.Collect(); } } clnDataInt [j, 0] = Convert.ToInt32 (dt.Rows [j] [fieldNames [i]]);  private void RenderDataTableOnXlSheet(DataTable dt, Excel.Worksheet xlWk, ssortingng [] columnNames, ssortingng [] fieldNames) { Excel.Range rngExcel = null; Excel.Range headerRange = null; try { // render the column names (eg headers) for (int i = 0; i < columnNames.Length; i++) xlWk.Cells[1, i + 1] = columnNames[i]; // for each column, create an array and set the array // to the excel range for that column. for (int i = 0; i < fieldNames.Length; i++) { ssortingng[,] clnDataSsortingng = new ssortingng[dt.Rows.Count, 1]; int[,] clnDataInt = new int[dt.Rows.Count, 1]; double[,] clnDataDouble = new double[dt.Rows.Count, 1]; ssortingng columnLetter = char.ConvertFromUtf32("A".ToCharArray()[0] + i); rngExcel = xlWk.get_Range(columnLetter + "2", Missing.Value); rngExcel = rngExcel.get_Resize(dt.Rows.Count, 1); ssortingng dataTypeName = dt.Columns[fieldNames[i]].DataType.Name; for (int j = 0; j < dt.Rows.Count; j++) { if (fieldNames[i].Length > 0) { switch (dataTypeName) { case "Int32": clnDataInt[j, 0] = Convert.ToInt32(dt.Rows[j][fieldNames[i]]); break; case "Double": clnDataDouble[j, 0] = Convert.ToDouble(dt.Rows[j][fieldNames[i]]); break; case "DateTime": if (fieldNames[i].ToLower().Contains("time")) clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToShortTimeSsortingng(); else if (fieldNames[i].ToLower().Contains("date")) clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToShortDateSsortingng(); else clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToSsortingng(); break; default: clnDataSsortingng[j, 0] = dt.Rows[j][fieldNames[i]].ToSsortingng(); break; } } else clnDataSsortingng[j, 0] = ssortingng.Empty; } // set values in the sheet wholesale. if (dataTypeName == "Int32") rngExcel.set_Value(Missing.Value, clnDataInt); else if (dataTypeName == "Double") rngExcel.set_Value(Missing.Value, clnDataDouble); else rngExcel.set_Value(Missing.Value, clnDataSsortingng); } // figure out the letter of the last column (supports 1 letter column names) ssortingng lastColumn = char.ConvertFromUtf32("A".ToCharArray()[0] + columnNames.Length - 1); // make the header range bold headerRange = xlWk.get_Range("A1", lastColumn + "1"); headerRange.Font.Bold = true; // autofit for better view xlWk.Columns.AutoFit(); } finally { ReleaseObject(headerRange); ReleaseObject(rngExcel); } } private void ReleaseObject(object obj) { try { System.Runtime.InteropServices.Marshal.ReleaseComObject(obj); obj = null; } catch { obj = null; } finally { GC.Collect(); } } case "Double":  private void RenderDataTableOnXlSheet(DataTable dt, Excel.Worksheet xlWk, ssortingng [] columnNames, ssortingng [] fieldNames) { Excel.Range rngExcel = null; Excel.Range headerRange = null; try { // render the column names (eg headers) for (int i = 0; i < columnNames.Length; i++) xlWk.Cells[1, i + 1] = columnNames[i]; // for each column, create an array and set the array // to the excel range for that column. for (int i = 0; i < fieldNames.Length; i++) { ssortingng[,] clnDataSsortingng = new ssortingng[dt.Rows.Count, 1]; int[,] clnDataInt = new int[dt.Rows.Count, 1]; double[,] clnDataDouble = new double[dt.Rows.Count, 1]; ssortingng columnLetter = char.ConvertFromUtf32("A".ToCharArray()[0] + i); rngExcel = xlWk.get_Range(columnLetter + "2", Missing.Value); rngExcel = rngExcel.get_Resize(dt.Rows.Count, 1); ssortingng dataTypeName = dt.Columns[fieldNames[i]].DataType.Name; for (int j = 0; j < dt.Rows.Count; j++) { if (fieldNames[i].Length > 0) { switch (dataTypeName) { case "Int32": clnDataInt[j, 0] = Convert.ToInt32(dt.Rows[j][fieldNames[i]]); break; case "Double": clnDataDouble[j, 0] = Convert.ToDouble(dt.Rows[j][fieldNames[i]]); break; case "DateTime": if (fieldNames[i].ToLower().Contains("time")) clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToShortTimeSsortingng(); else if (fieldNames[i].ToLower().Contains("date")) clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToShortDateSsortingng(); else clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToSsortingng(); break; default: clnDataSsortingng[j, 0] = dt.Rows[j][fieldNames[i]].ToSsortingng(); break; } } else clnDataSsortingng[j, 0] = ssortingng.Empty; } // set values in the sheet wholesale. if (dataTypeName == "Int32") rngExcel.set_Value(Missing.Value, clnDataInt); else if (dataTypeName == "Double") rngExcel.set_Value(Missing.Value, clnDataDouble); else rngExcel.set_Value(Missing.Value, clnDataSsortingng); } // figure out the letter of the last column (supports 1 letter column names) ssortingng lastColumn = char.ConvertFromUtf32("A".ToCharArray()[0] + columnNames.Length - 1); // make the header range bold headerRange = xlWk.get_Range("A1", lastColumn + "1"); headerRange.Font.Bold = true; // autofit for better view xlWk.Columns.AutoFit(); } finally { ReleaseObject(headerRange); ReleaseObject(rngExcel); } } private void ReleaseObject(object obj) { try { System.Runtime.InteropServices.Marshal.ReleaseComObject(obj); obj = null; } catch { obj = null; } finally { GC.Collect(); } } clnDataDouble [j, 0] = Convert.ToDouble (dt.Rows [j] [fieldNames [i]]);  private void RenderDataTableOnXlSheet(DataTable dt, Excel.Worksheet xlWk, ssortingng [] columnNames, ssortingng [] fieldNames) { Excel.Range rngExcel = null; Excel.Range headerRange = null; try { // render the column names (eg headers) for (int i = 0; i < columnNames.Length; i++) xlWk.Cells[1, i + 1] = columnNames[i]; // for each column, create an array and set the array // to the excel range for that column. for (int i = 0; i < fieldNames.Length; i++) { ssortingng[,] clnDataSsortingng = new ssortingng[dt.Rows.Count, 1]; int[,] clnDataInt = new int[dt.Rows.Count, 1]; double[,] clnDataDouble = new double[dt.Rows.Count, 1]; ssortingng columnLetter = char.ConvertFromUtf32("A".ToCharArray()[0] + i); rngExcel = xlWk.get_Range(columnLetter + "2", Missing.Value); rngExcel = rngExcel.get_Resize(dt.Rows.Count, 1); ssortingng dataTypeName = dt.Columns[fieldNames[i]].DataType.Name; for (int j = 0; j < dt.Rows.Count; j++) { if (fieldNames[i].Length > 0) { switch (dataTypeName) { case "Int32": clnDataInt[j, 0] = Convert.ToInt32(dt.Rows[j][fieldNames[i]]); break; case "Double": clnDataDouble[j, 0] = Convert.ToDouble(dt.Rows[j][fieldNames[i]]); break; case "DateTime": if (fieldNames[i].ToLower().Contains("time")) clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToShortTimeSsortingng(); else if (fieldNames[i].ToLower().Contains("date")) clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToShortDateSsortingng(); else clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToSsortingng(); break; default: clnDataSsortingng[j, 0] = dt.Rows[j][fieldNames[i]].ToSsortingng(); break; } } else clnDataSsortingng[j, 0] = ssortingng.Empty; } // set values in the sheet wholesale. if (dataTypeName == "Int32") rngExcel.set_Value(Missing.Value, clnDataInt); else if (dataTypeName == "Double") rngExcel.set_Value(Missing.Value, clnDataDouble); else rngExcel.set_Value(Missing.Value, clnDataSsortingng); } // figure out the letter of the last column (supports 1 letter column names) ssortingng lastColumn = char.ConvertFromUtf32("A".ToCharArray()[0] + columnNames.Length - 1); // make the header range bold headerRange = xlWk.get_Range("A1", lastColumn + "1"); headerRange.Font.Bold = true; // autofit for better view xlWk.Columns.AutoFit(); } finally { ReleaseObject(headerRange); ReleaseObject(rngExcel); } } private void ReleaseObject(object obj) { try { System.Runtime.InteropServices.Marshal.ReleaseComObject(obj); obj = null; } catch { obj = null; } finally { GC.Collect(); } } case "DateTime":  private void RenderDataTableOnXlSheet(DataTable dt, Excel.Worksheet xlWk, ssortingng [] columnNames, ssortingng [] fieldNames) { Excel.Range rngExcel = null; Excel.Range headerRange = null; try { // render the column names (eg headers) for (int i = 0; i < columnNames.Length; i++) xlWk.Cells[1, i + 1] = columnNames[i]; // for each column, create an array and set the array // to the excel range for that column. for (int i = 0; i < fieldNames.Length; i++) { ssortingng[,] clnDataSsortingng = new ssortingng[dt.Rows.Count, 1]; int[,] clnDataInt = new int[dt.Rows.Count, 1]; double[,] clnDataDouble = new double[dt.Rows.Count, 1]; ssortingng columnLetter = char.ConvertFromUtf32("A".ToCharArray()[0] + i); rngExcel = xlWk.get_Range(columnLetter + "2", Missing.Value); rngExcel = rngExcel.get_Resize(dt.Rows.Count, 1); ssortingng dataTypeName = dt.Columns[fieldNames[i]].DataType.Name; for (int j = 0; j < dt.Rows.Count; j++) { if (fieldNames[i].Length > 0) { switch (dataTypeName) { case "Int32": clnDataInt[j, 0] = Convert.ToInt32(dt.Rows[j][fieldNames[i]]); break; case "Double": clnDataDouble[j, 0] = Convert.ToDouble(dt.Rows[j][fieldNames[i]]); break; case "DateTime": if (fieldNames[i].ToLower().Contains("time")) clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToShortTimeSsortingng(); else if (fieldNames[i].ToLower().Contains("date")) clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToShortDateSsortingng(); else clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToSsortingng(); break; default: clnDataSsortingng[j, 0] = dt.Rows[j][fieldNames[i]].ToSsortingng(); break; } } else clnDataSsortingng[j, 0] = ssortingng.Empty; } // set values in the sheet wholesale. if (dataTypeName == "Int32") rngExcel.set_Value(Missing.Value, clnDataInt); else if (dataTypeName == "Double") rngExcel.set_Value(Missing.Value, clnDataDouble); else rngExcel.set_Value(Missing.Value, clnDataSsortingng); } // figure out the letter of the last column (supports 1 letter column names) ssortingng lastColumn = char.ConvertFromUtf32("A".ToCharArray()[0] + columnNames.Length - 1); // make the header range bold headerRange = xlWk.get_Range("A1", lastColumn + "1"); headerRange.Font.Bold = true; // autofit for better view xlWk.Columns.AutoFit(); } finally { ReleaseObject(headerRange); ReleaseObject(rngExcel); } } private void ReleaseObject(object obj) { try { System.Runtime.InteropServices.Marshal.ReleaseComObject(obj); obj = null; } catch { obj = null; } finally { GC.Collect(); } } si (fieldNames [i] .ToLower (). Contient ("time"))  private void RenderDataTableOnXlSheet(DataTable dt, Excel.Worksheet xlWk, ssortingng [] columnNames, ssortingng [] fieldNames) { Excel.Range rngExcel = null; Excel.Range headerRange = null; try { // render the column names (eg headers) for (int i = 0; i < columnNames.Length; i++) xlWk.Cells[1, i + 1] = columnNames[i]; // for each column, create an array and set the array // to the excel range for that column. for (int i = 0; i < fieldNames.Length; i++) { ssortingng[,] clnDataSsortingng = new ssortingng[dt.Rows.Count, 1]; int[,] clnDataInt = new int[dt.Rows.Count, 1]; double[,] clnDataDouble = new double[dt.Rows.Count, 1]; ssortingng columnLetter = char.ConvertFromUtf32("A".ToCharArray()[0] + i); rngExcel = xlWk.get_Range(columnLetter + "2", Missing.Value); rngExcel = rngExcel.get_Resize(dt.Rows.Count, 1); ssortingng dataTypeName = dt.Columns[fieldNames[i]].DataType.Name; for (int j = 0; j < dt.Rows.Count; j++) { if (fieldNames[i].Length > 0) { switch (dataTypeName) { case "Int32": clnDataInt[j, 0] = Convert.ToInt32(dt.Rows[j][fieldNames[i]]); break; case "Double": clnDataDouble[j, 0] = Convert.ToDouble(dt.Rows[j][fieldNames[i]]); break; case "DateTime": if (fieldNames[i].ToLower().Contains("time")) clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToShortTimeSsortingng(); else if (fieldNames[i].ToLower().Contains("date")) clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToShortDateSsortingng(); else clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToSsortingng(); break; default: clnDataSsortingng[j, 0] = dt.Rows[j][fieldNames[i]].ToSsortingng(); break; } } else clnDataSsortingng[j, 0] = ssortingng.Empty; } // set values in the sheet wholesale. if (dataTypeName == "Int32") rngExcel.set_Value(Missing.Value, clnDataInt); else if (dataTypeName == "Double") rngExcel.set_Value(Missing.Value, clnDataDouble); else rngExcel.set_Value(Missing.Value, clnDataSsortingng); } // figure out the letter of the last column (supports 1 letter column names) ssortingng lastColumn = char.ConvertFromUtf32("A".ToCharArray()[0] + columnNames.Length - 1); // make the header range bold headerRange = xlWk.get_Range("A1", lastColumn + "1"); headerRange.Font.Bold = true; // autofit for better view xlWk.Columns.AutoFit(); } finally { ReleaseObject(headerRange); ReleaseObject(rngExcel); } } private void ReleaseObject(object obj) { try { System.Runtime.InteropServices.Marshal.ReleaseComObject(obj); obj = null; } catch { obj = null; } finally { GC.Collect(); } } clnDataSsortingng [j, 0] = Convert.ToDateTime (dt.Rows [j] [fieldNames [i]]. ToShortTimeSsortingng ();  private void RenderDataTableOnXlSheet(DataTable dt, Excel.Worksheet xlWk, ssortingng [] columnNames, ssortingng [] fieldNames) { Excel.Range rngExcel = null; Excel.Range headerRange = null; try { // render the column names (eg headers) for (int i = 0; i < columnNames.Length; i++) xlWk.Cells[1, i + 1] = columnNames[i]; // for each column, create an array and set the array // to the excel range for that column. for (int i = 0; i < fieldNames.Length; i++) { ssortingng[,] clnDataSsortingng = new ssortingng[dt.Rows.Count, 1]; int[,] clnDataInt = new int[dt.Rows.Count, 1]; double[,] clnDataDouble = new double[dt.Rows.Count, 1]; ssortingng columnLetter = char.ConvertFromUtf32("A".ToCharArray()[0] + i); rngExcel = xlWk.get_Range(columnLetter + "2", Missing.Value); rngExcel = rngExcel.get_Resize(dt.Rows.Count, 1); ssortingng dataTypeName = dt.Columns[fieldNames[i]].DataType.Name; for (int j = 0; j < dt.Rows.Count; j++) { if (fieldNames[i].Length > 0) { switch (dataTypeName) { case "Int32": clnDataInt[j, 0] = Convert.ToInt32(dt.Rows[j][fieldNames[i]]); break; case "Double": clnDataDouble[j, 0] = Convert.ToDouble(dt.Rows[j][fieldNames[i]]); break; case "DateTime": if (fieldNames[i].ToLower().Contains("time")) clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToShortTimeSsortingng(); else if (fieldNames[i].ToLower().Contains("date")) clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToShortDateSsortingng(); else clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToSsortingng(); break; default: clnDataSsortingng[j, 0] = dt.Rows[j][fieldNames[i]].ToSsortingng(); break; } } else clnDataSsortingng[j, 0] = ssortingng.Empty; } // set values in the sheet wholesale. if (dataTypeName == "Int32") rngExcel.set_Value(Missing.Value, clnDataInt); else if (dataTypeName == "Double") rngExcel.set_Value(Missing.Value, clnDataDouble); else rngExcel.set_Value(Missing.Value, clnDataSsortingng); } // figure out the letter of the last column (supports 1 letter column names) ssortingng lastColumn = char.ConvertFromUtf32("A".ToCharArray()[0] + columnNames.Length - 1); // make the header range bold headerRange = xlWk.get_Range("A1", lastColumn + "1"); headerRange.Font.Bold = true; // autofit for better view xlWk.Columns.AutoFit(); } finally { ReleaseObject(headerRange); ReleaseObject(rngExcel); } } private void ReleaseObject(object obj) { try { System.Runtime.InteropServices.Marshal.ReleaseComObject(obj); obj = null; } catch { obj = null; } finally { GC.Collect(); } } sinon si (fieldNames [i] .ToLower (). Contient ("date"))  private void RenderDataTableOnXlSheet(DataTable dt, Excel.Worksheet xlWk, ssortingng [] columnNames, ssortingng [] fieldNames) { Excel.Range rngExcel = null; Excel.Range headerRange = null; try { // render the column names (eg headers) for (int i = 0; i < columnNames.Length; i++) xlWk.Cells[1, i + 1] = columnNames[i]; // for each column, create an array and set the array // to the excel range for that column. for (int i = 0; i < fieldNames.Length; i++) { ssortingng[,] clnDataSsortingng = new ssortingng[dt.Rows.Count, 1]; int[,] clnDataInt = new int[dt.Rows.Count, 1]; double[,] clnDataDouble = new double[dt.Rows.Count, 1]; ssortingng columnLetter = char.ConvertFromUtf32("A".ToCharArray()[0] + i); rngExcel = xlWk.get_Range(columnLetter + "2", Missing.Value); rngExcel = rngExcel.get_Resize(dt.Rows.Count, 1); ssortingng dataTypeName = dt.Columns[fieldNames[i]].DataType.Name; for (int j = 0; j < dt.Rows.Count; j++) { if (fieldNames[i].Length > 0) { switch (dataTypeName) { case "Int32": clnDataInt[j, 0] = Convert.ToInt32(dt.Rows[j][fieldNames[i]]); break; case "Double": clnDataDouble[j, 0] = Convert.ToDouble(dt.Rows[j][fieldNames[i]]); break; case "DateTime": if (fieldNames[i].ToLower().Contains("time")) clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToShortTimeSsortingng(); else if (fieldNames[i].ToLower().Contains("date")) clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToShortDateSsortingng(); else clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToSsortingng(); break; default: clnDataSsortingng[j, 0] = dt.Rows[j][fieldNames[i]].ToSsortingng(); break; } } else clnDataSsortingng[j, 0] = ssortingng.Empty; } // set values in the sheet wholesale. if (dataTypeName == "Int32") rngExcel.set_Value(Missing.Value, clnDataInt); else if (dataTypeName == "Double") rngExcel.set_Value(Missing.Value, clnDataDouble); else rngExcel.set_Value(Missing.Value, clnDataSsortingng); } // figure out the letter of the last column (supports 1 letter column names) ssortingng lastColumn = char.ConvertFromUtf32("A".ToCharArray()[0] + columnNames.Length - 1); // make the header range bold headerRange = xlWk.get_Range("A1", lastColumn + "1"); headerRange.Font.Bold = true; // autofit for better view xlWk.Columns.AutoFit(); } finally { ReleaseObject(headerRange); ReleaseObject(rngExcel); } } private void ReleaseObject(object obj) { try { System.Runtime.InteropServices.Marshal.ReleaseComObject(obj); obj = null; } catch { obj = null; } finally { GC.Collect(); } } clnDataSsortingng [j, 0] = Convert.ToDateTime (dt.Rows [j] [fieldNames [i]]). ToShortDateSsortingng ();  private void RenderDataTableOnXlSheet(DataTable dt, Excel.Worksheet xlWk, ssortingng [] columnNames, ssortingng [] fieldNames) { Excel.Range rngExcel = null; Excel.Range headerRange = null; try { // render the column names (eg headers) for (int i = 0; i < columnNames.Length; i++) xlWk.Cells[1, i + 1] = columnNames[i]; // for each column, create an array and set the array // to the excel range for that column. for (int i = 0; i < fieldNames.Length; i++) { ssortingng[,] clnDataSsortingng = new ssortingng[dt.Rows.Count, 1]; int[,] clnDataInt = new int[dt.Rows.Count, 1]; double[,] clnDataDouble = new double[dt.Rows.Count, 1]; ssortingng columnLetter = char.ConvertFromUtf32("A".ToCharArray()[0] + i); rngExcel = xlWk.get_Range(columnLetter + "2", Missing.Value); rngExcel = rngExcel.get_Resize(dt.Rows.Count, 1); ssortingng dataTypeName = dt.Columns[fieldNames[i]].DataType.Name; for (int j = 0; j < dt.Rows.Count; j++) { if (fieldNames[i].Length > 0) { switch (dataTypeName) { case "Int32": clnDataInt[j, 0] = Convert.ToInt32(dt.Rows[j][fieldNames[i]]); break; case "Double": clnDataDouble[j, 0] = Convert.ToDouble(dt.Rows[j][fieldNames[i]]); break; case "DateTime": if (fieldNames[i].ToLower().Contains("time")) clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToShortTimeSsortingng(); else if (fieldNames[i].ToLower().Contains("date")) clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToShortDateSsortingng(); else clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToSsortingng(); break; default: clnDataSsortingng[j, 0] = dt.Rows[j][fieldNames[i]].ToSsortingng(); break; } } else clnDataSsortingng[j, 0] = ssortingng.Empty; } // set values in the sheet wholesale. if (dataTypeName == "Int32") rngExcel.set_Value(Missing.Value, clnDataInt); else if (dataTypeName == "Double") rngExcel.set_Value(Missing.Value, clnDataDouble); else rngExcel.set_Value(Missing.Value, clnDataSsortingng); } // figure out the letter of the last column (supports 1 letter column names) ssortingng lastColumn = char.ConvertFromUtf32("A".ToCharArray()[0] + columnNames.Length - 1); // make the header range bold headerRange = xlWk.get_Range("A1", lastColumn + "1"); headerRange.Font.Bold = true; // autofit for better view xlWk.Columns.AutoFit(); } finally { ReleaseObject(headerRange); ReleaseObject(rngExcel); } } private void ReleaseObject(object obj) { try { System.Runtime.InteropServices.Marshal.ReleaseComObject(obj); obj = null; } catch { obj = null; } finally { GC.Collect(); } } clnDataSsortingng [j, 0] = Convert.ToDateTime (dt.Rows [j] [fieldNames [i]]). ToSsortingng ();  private void RenderDataTableOnXlSheet(DataTable dt, Excel.Worksheet xlWk, ssortingng [] columnNames, ssortingng [] fieldNames) { Excel.Range rngExcel = null; Excel.Range headerRange = null; try { // render the column names (eg headers) for (int i = 0; i < columnNames.Length; i++) xlWk.Cells[1, i + 1] = columnNames[i]; // for each column, create an array and set the array // to the excel range for that column. for (int i = 0; i < fieldNames.Length; i++) { ssortingng[,] clnDataSsortingng = new ssortingng[dt.Rows.Count, 1]; int[,] clnDataInt = new int[dt.Rows.Count, 1]; double[,] clnDataDouble = new double[dt.Rows.Count, 1]; ssortingng columnLetter = char.ConvertFromUtf32("A".ToCharArray()[0] + i); rngExcel = xlWk.get_Range(columnLetter + "2", Missing.Value); rngExcel = rngExcel.get_Resize(dt.Rows.Count, 1); ssortingng dataTypeName = dt.Columns[fieldNames[i]].DataType.Name; for (int j = 0; j < dt.Rows.Count; j++) { if (fieldNames[i].Length > 0) { switch (dataTypeName) { case "Int32": clnDataInt[j, 0] = Convert.ToInt32(dt.Rows[j][fieldNames[i]]); break; case "Double": clnDataDouble[j, 0] = Convert.ToDouble(dt.Rows[j][fieldNames[i]]); break; case "DateTime": if (fieldNames[i].ToLower().Contains("time")) clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToShortTimeSsortingng(); else if (fieldNames[i].ToLower().Contains("date")) clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToShortDateSsortingng(); else clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToSsortingng(); break; default: clnDataSsortingng[j, 0] = dt.Rows[j][fieldNames[i]].ToSsortingng(); break; } } else clnDataSsortingng[j, 0] = ssortingng.Empty; } // set values in the sheet wholesale. if (dataTypeName == "Int32") rngExcel.set_Value(Missing.Value, clnDataInt); else if (dataTypeName == "Double") rngExcel.set_Value(Missing.Value, clnDataDouble); else rngExcel.set_Value(Missing.Value, clnDataSsortingng); } // figure out the letter of the last column (supports 1 letter column names) ssortingng lastColumn = char.ConvertFromUtf32("A".ToCharArray()[0] + columnNames.Length - 1); // make the header range bold headerRange = xlWk.get_Range("A1", lastColumn + "1"); headerRange.Font.Bold = true; // autofit for better view xlWk.Columns.AutoFit(); } finally { ReleaseObject(headerRange); ReleaseObject(rngExcel); } } private void ReleaseObject(object obj) { try { System.Runtime.InteropServices.Marshal.ReleaseComObject(obj); obj = null; } catch { obj = null; } finally { GC.Collect(); } } clnDataSsortingng [j, 0] = dt.Rows [j] [fieldNames [i]]. ToSsortingng ();  private void RenderDataTableOnXlSheet(DataTable dt, Excel.Worksheet xlWk, ssortingng [] columnNames, ssortingng [] fieldNames) { Excel.Range rngExcel = null; Excel.Range headerRange = null; try { // render the column names (eg headers) for (int i = 0; i < columnNames.Length; i++) xlWk.Cells[1, i + 1] = columnNames[i]; // for each column, create an array and set the array // to the excel range for that column. for (int i = 0; i < fieldNames.Length; i++) { ssortingng[,] clnDataSsortingng = new ssortingng[dt.Rows.Count, 1]; int[,] clnDataInt = new int[dt.Rows.Count, 1]; double[,] clnDataDouble = new double[dt.Rows.Count, 1]; ssortingng columnLetter = char.ConvertFromUtf32("A".ToCharArray()[0] + i); rngExcel = xlWk.get_Range(columnLetter + "2", Missing.Value); rngExcel = rngExcel.get_Resize(dt.Rows.Count, 1); ssortingng dataTypeName = dt.Columns[fieldNames[i]].DataType.Name; for (int j = 0; j < dt.Rows.Count; j++) { if (fieldNames[i].Length > 0) { switch (dataTypeName) { case "Int32": clnDataInt[j, 0] = Convert.ToInt32(dt.Rows[j][fieldNames[i]]); break; case "Double": clnDataDouble[j, 0] = Convert.ToDouble(dt.Rows[j][fieldNames[i]]); break; case "DateTime": if (fieldNames[i].ToLower().Contains("time")) clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToShortTimeSsortingng(); else if (fieldNames[i].ToLower().Contains("date")) clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToShortDateSsortingng(); else clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToSsortingng(); break; default: clnDataSsortingng[j, 0] = dt.Rows[j][fieldNames[i]].ToSsortingng(); break; } } else clnDataSsortingng[j, 0] = ssortingng.Empty; } // set values in the sheet wholesale. if (dataTypeName == "Int32") rngExcel.set_Value(Missing.Value, clnDataInt); else if (dataTypeName == "Double") rngExcel.set_Value(Missing.Value, clnDataDouble); else rngExcel.set_Value(Missing.Value, clnDataSsortingng); } // figure out the letter of the last column (supports 1 letter column names) ssortingng lastColumn = char.ConvertFromUtf32("A".ToCharArray()[0] + columnNames.Length - 1); // make the header range bold headerRange = xlWk.get_Range("A1", lastColumn + "1"); headerRange.Font.Bold = true; // autofit for better view xlWk.Columns.AutoFit(); } finally { ReleaseObject(headerRange); ReleaseObject(rngExcel); } } private void ReleaseObject(object obj) { try { System.Runtime.InteropServices.Marshal.ReleaseComObject(obj); obj = null; } catch { obj = null; } finally { GC.Collect(); } } clnDataSsortingng [j, 0] = ssortingng.Empty;  private void RenderDataTableOnXlSheet(DataTable dt, Excel.Worksheet xlWk, ssortingng [] columnNames, ssortingng [] fieldNames) { Excel.Range rngExcel = null; Excel.Range headerRange = null; try { // render the column names (eg headers) for (int i = 0; i < columnNames.Length; i++) xlWk.Cells[1, i + 1] = columnNames[i]; // for each column, create an array and set the array // to the excel range for that column. for (int i = 0; i < fieldNames.Length; i++) { ssortingng[,] clnDataSsortingng = new ssortingng[dt.Rows.Count, 1]; int[,] clnDataInt = new int[dt.Rows.Count, 1]; double[,] clnDataDouble = new double[dt.Rows.Count, 1]; ssortingng columnLetter = char.ConvertFromUtf32("A".ToCharArray()[0] + i); rngExcel = xlWk.get_Range(columnLetter + "2", Missing.Value); rngExcel = rngExcel.get_Resize(dt.Rows.Count, 1); ssortingng dataTypeName = dt.Columns[fieldNames[i]].DataType.Name; for (int j = 0; j < dt.Rows.Count; j++) { if (fieldNames[i].Length > 0) { switch (dataTypeName) { case "Int32": clnDataInt[j, 0] = Convert.ToInt32(dt.Rows[j][fieldNames[i]]); break; case "Double": clnDataDouble[j, 0] = Convert.ToDouble(dt.Rows[j][fieldNames[i]]); break; case "DateTime": if (fieldNames[i].ToLower().Contains("time")) clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToShortTimeSsortingng(); else if (fieldNames[i].ToLower().Contains("date")) clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToShortDateSsortingng(); else clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToSsortingng(); break; default: clnDataSsortingng[j, 0] = dt.Rows[j][fieldNames[i]].ToSsortingng(); break; } } else clnDataSsortingng[j, 0] = ssortingng.Empty; } // set values in the sheet wholesale. if (dataTypeName == "Int32") rngExcel.set_Value(Missing.Value, clnDataInt); else if (dataTypeName == "Double") rngExcel.set_Value(Missing.Value, clnDataDouble); else rngExcel.set_Value(Missing.Value, clnDataSsortingng); } // figure out the letter of the last column (supports 1 letter column names) ssortingng lastColumn = char.ConvertFromUtf32("A".ToCharArray()[0] + columnNames.Length - 1); // make the header range bold headerRange = xlWk.get_Range("A1", lastColumn + "1"); headerRange.Font.Bold = true; // autofit for better view xlWk.Columns.AutoFit(); } finally { ReleaseObject(headerRange); ReleaseObject(rngExcel); } } private void ReleaseObject(object obj) { try { System.Runtime.InteropServices.Marshal.ReleaseComObject(obj); obj = null; } catch { obj = null; } finally { GC.Collect(); } } // définit les valeurs dans la vente en gros de la feuille.  private void RenderDataTableOnXlSheet(DataTable dt, Excel.Worksheet xlWk, ssortingng [] columnNames, ssortingng [] fieldNames) { Excel.Range rngExcel = null; Excel.Range headerRange = null; try { // render the column names (eg headers) for (int i = 0; i < columnNames.Length; i++) xlWk.Cells[1, i + 1] = columnNames[i]; // for each column, create an array and set the array // to the excel range for that column. for (int i = 0; i < fieldNames.Length; i++) { ssortingng[,] clnDataSsortingng = new ssortingng[dt.Rows.Count, 1]; int[,] clnDataInt = new int[dt.Rows.Count, 1]; double[,] clnDataDouble = new double[dt.Rows.Count, 1]; ssortingng columnLetter = char.ConvertFromUtf32("A".ToCharArray()[0] + i); rngExcel = xlWk.get_Range(columnLetter + "2", Missing.Value); rngExcel = rngExcel.get_Resize(dt.Rows.Count, 1); ssortingng dataTypeName = dt.Columns[fieldNames[i]].DataType.Name; for (int j = 0; j < dt.Rows.Count; j++) { if (fieldNames[i].Length > 0) { switch (dataTypeName) { case "Int32": clnDataInt[j, 0] = Convert.ToInt32(dt.Rows[j][fieldNames[i]]); break; case "Double": clnDataDouble[j, 0] = Convert.ToDouble(dt.Rows[j][fieldNames[i]]); break; case "DateTime": if (fieldNames[i].ToLower().Contains("time")) clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToShortTimeSsortingng(); else if (fieldNames[i].ToLower().Contains("date")) clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToShortDateSsortingng(); else clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToSsortingng(); break; default: clnDataSsortingng[j, 0] = dt.Rows[j][fieldNames[i]].ToSsortingng(); break; } } else clnDataSsortingng[j, 0] = ssortingng.Empty; } // set values in the sheet wholesale. if (dataTypeName == "Int32") rngExcel.set_Value(Missing.Value, clnDataInt); else if (dataTypeName == "Double") rngExcel.set_Value(Missing.Value, clnDataDouble); else rngExcel.set_Value(Missing.Value, clnDataSsortingng); } // figure out the letter of the last column (supports 1 letter column names) ssortingng lastColumn = char.ConvertFromUtf32("A".ToCharArray()[0] + columnNames.Length - 1); // make the header range bold headerRange = xlWk.get_Range("A1", lastColumn + "1"); headerRange.Font.Bold = true; // autofit for better view xlWk.Columns.AutoFit(); } finally { ReleaseObject(headerRange); ReleaseObject(rngExcel); } } private void ReleaseObject(object obj) { try { System.Runtime.InteropServices.Marshal.ReleaseComObject(obj); obj = null; } catch { obj = null; } finally { GC.Collect(); } } si (dataTypeName == "Int32")  private void RenderDataTableOnXlSheet(DataTable dt, Excel.Worksheet xlWk, ssortingng [] columnNames, ssortingng [] fieldNames) { Excel.Range rngExcel = null; Excel.Range headerRange = null; try { // render the column names (eg headers) for (int i = 0; i < columnNames.Length; i++) xlWk.Cells[1, i + 1] = columnNames[i]; // for each column, create an array and set the array // to the excel range for that column. for (int i = 0; i < fieldNames.Length; i++) { ssortingng[,] clnDataSsortingng = new ssortingng[dt.Rows.Count, 1]; int[,] clnDataInt = new int[dt.Rows.Count, 1]; double[,] clnDataDouble = new double[dt.Rows.Count, 1]; ssortingng columnLetter = char.ConvertFromUtf32("A".ToCharArray()[0] + i); rngExcel = xlWk.get_Range(columnLetter + "2", Missing.Value); rngExcel = rngExcel.get_Resize(dt.Rows.Count, 1); ssortingng dataTypeName = dt.Columns[fieldNames[i]].DataType.Name; for (int j = 0; j < dt.Rows.Count; j++) { if (fieldNames[i].Length > 0) { switch (dataTypeName) { case "Int32": clnDataInt[j, 0] = Convert.ToInt32(dt.Rows[j][fieldNames[i]]); break; case "Double": clnDataDouble[j, 0] = Convert.ToDouble(dt.Rows[j][fieldNames[i]]); break; case "DateTime": if (fieldNames[i].ToLower().Contains("time")) clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToShortTimeSsortingng(); else if (fieldNames[i].ToLower().Contains("date")) clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToShortDateSsortingng(); else clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToSsortingng(); break; default: clnDataSsortingng[j, 0] = dt.Rows[j][fieldNames[i]].ToSsortingng(); break; } } else clnDataSsortingng[j, 0] = ssortingng.Empty; } // set values in the sheet wholesale. if (dataTypeName == "Int32") rngExcel.set_Value(Missing.Value, clnDataInt); else if (dataTypeName == "Double") rngExcel.set_Value(Missing.Value, clnDataDouble); else rngExcel.set_Value(Missing.Value, clnDataSsortingng); } // figure out the letter of the last column (supports 1 letter column names) ssortingng lastColumn = char.ConvertFromUtf32("A".ToCharArray()[0] + columnNames.Length - 1); // make the header range bold headerRange = xlWk.get_Range("A1", lastColumn + "1"); headerRange.Font.Bold = true; // autofit for better view xlWk.Columns.AutoFit(); } finally { ReleaseObject(headerRange); ReleaseObject(rngExcel); } } private void ReleaseObject(object obj) { try { System.Runtime.InteropServices.Marshal.ReleaseComObject(obj); obj = null; } catch { obj = null; } finally { GC.Collect(); } } rngExcel.set_Value (Missing.Value, clnDataInt);  private void RenderDataTableOnXlSheet(DataTable dt, Excel.Worksheet xlWk, ssortingng [] columnNames, ssortingng [] fieldNames) { Excel.Range rngExcel = null; Excel.Range headerRange = null; try { // render the column names (eg headers) for (int i = 0; i < columnNames.Length; i++) xlWk.Cells[1, i + 1] = columnNames[i]; // for each column, create an array and set the array // to the excel range for that column. for (int i = 0; i < fieldNames.Length; i++) { ssortingng[,] clnDataSsortingng = new ssortingng[dt.Rows.Count, 1]; int[,] clnDataInt = new int[dt.Rows.Count, 1]; double[,] clnDataDouble = new double[dt.Rows.Count, 1]; ssortingng columnLetter = char.ConvertFromUtf32("A".ToCharArray()[0] + i); rngExcel = xlWk.get_Range(columnLetter + "2", Missing.Value); rngExcel = rngExcel.get_Resize(dt.Rows.Count, 1); ssortingng dataTypeName = dt.Columns[fieldNames[i]].DataType.Name; for (int j = 0; j < dt.Rows.Count; j++) { if (fieldNames[i].Length > 0) { switch (dataTypeName) { case "Int32": clnDataInt[j, 0] = Convert.ToInt32(dt.Rows[j][fieldNames[i]]); break; case "Double": clnDataDouble[j, 0] = Convert.ToDouble(dt.Rows[j][fieldNames[i]]); break; case "DateTime": if (fieldNames[i].ToLower().Contains("time")) clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToShortTimeSsortingng(); else if (fieldNames[i].ToLower().Contains("date")) clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToShortDateSsortingng(); else clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToSsortingng(); break; default: clnDataSsortingng[j, 0] = dt.Rows[j][fieldNames[i]].ToSsortingng(); break; } } else clnDataSsortingng[j, 0] = ssortingng.Empty; } // set values in the sheet wholesale. if (dataTypeName == "Int32") rngExcel.set_Value(Missing.Value, clnDataInt); else if (dataTypeName == "Double") rngExcel.set_Value(Missing.Value, clnDataDouble); else rngExcel.set_Value(Missing.Value, clnDataSsortingng); } // figure out the letter of the last column (supports 1 letter column names) ssortingng lastColumn = char.ConvertFromUtf32("A".ToCharArray()[0] + columnNames.Length - 1); // make the header range bold headerRange = xlWk.get_Range("A1", lastColumn + "1"); headerRange.Font.Bold = true; // autofit for better view xlWk.Columns.AutoFit(); } finally { ReleaseObject(headerRange); ReleaseObject(rngExcel); } } private void ReleaseObject(object obj) { try { System.Runtime.InteropServices.Marshal.ReleaseComObject(obj); obj = null; } catch { obj = null; } finally { GC.Collect(); } } sinon si (dataTypeName == "Double")  private void RenderDataTableOnXlSheet(DataTable dt, Excel.Worksheet xlWk, ssortingng [] columnNames, ssortingng [] fieldNames) { Excel.Range rngExcel = null; Excel.Range headerRange = null; try { // render the column names (eg headers) for (int i = 0; i < columnNames.Length; i++) xlWk.Cells[1, i + 1] = columnNames[i]; // for each column, create an array and set the array // to the excel range for that column. for (int i = 0; i < fieldNames.Length; i++) { ssortingng[,] clnDataSsortingng = new ssortingng[dt.Rows.Count, 1]; int[,] clnDataInt = new int[dt.Rows.Count, 1]; double[,] clnDataDouble = new double[dt.Rows.Count, 1]; ssortingng columnLetter = char.ConvertFromUtf32("A".ToCharArray()[0] + i); rngExcel = xlWk.get_Range(columnLetter + "2", Missing.Value); rngExcel = rngExcel.get_Resize(dt.Rows.Count, 1); ssortingng dataTypeName = dt.Columns[fieldNames[i]].DataType.Name; for (int j = 0; j < dt.Rows.Count; j++) { if (fieldNames[i].Length > 0) { switch (dataTypeName) { case "Int32": clnDataInt[j, 0] = Convert.ToInt32(dt.Rows[j][fieldNames[i]]); break; case "Double": clnDataDouble[j, 0] = Convert.ToDouble(dt.Rows[j][fieldNames[i]]); break; case "DateTime": if (fieldNames[i].ToLower().Contains("time")) clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToShortTimeSsortingng(); else if (fieldNames[i].ToLower().Contains("date")) clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToShortDateSsortingng(); else clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToSsortingng(); break; default: clnDataSsortingng[j, 0] = dt.Rows[j][fieldNames[i]].ToSsortingng(); break; } } else clnDataSsortingng[j, 0] = ssortingng.Empty; } // set values in the sheet wholesale. if (dataTypeName == "Int32") rngExcel.set_Value(Missing.Value, clnDataInt); else if (dataTypeName == "Double") rngExcel.set_Value(Missing.Value, clnDataDouble); else rngExcel.set_Value(Missing.Value, clnDataSsortingng); } // figure out the letter of the last column (supports 1 letter column names) ssortingng lastColumn = char.ConvertFromUtf32("A".ToCharArray()[0] + columnNames.Length - 1); // make the header range bold headerRange = xlWk.get_Range("A1", lastColumn + "1"); headerRange.Font.Bold = true; // autofit for better view xlWk.Columns.AutoFit(); } finally { ReleaseObject(headerRange); ReleaseObject(rngExcel); } } private void ReleaseObject(object obj) { try { System.Runtime.InteropServices.Marshal.ReleaseComObject(obj); obj = null; } catch { obj = null; } finally { GC.Collect(); } } rngExcel.set_Value (Missing.Value, clnDataDouble);  private void RenderDataTableOnXlSheet(DataTable dt, Excel.Worksheet xlWk, ssortingng [] columnNames, ssortingng [] fieldNames) { Excel.Range rngExcel = null; Excel.Range headerRange = null; try { // render the column names (eg headers) for (int i = 0; i < columnNames.Length; i++) xlWk.Cells[1, i + 1] = columnNames[i]; // for each column, create an array and set the array // to the excel range for that column. for (int i = 0; i < fieldNames.Length; i++) { ssortingng[,] clnDataSsortingng = new ssortingng[dt.Rows.Count, 1]; int[,] clnDataInt = new int[dt.Rows.Count, 1]; double[,] clnDataDouble = new double[dt.Rows.Count, 1]; ssortingng columnLetter = char.ConvertFromUtf32("A".ToCharArray()[0] + i); rngExcel = xlWk.get_Range(columnLetter + "2", Missing.Value); rngExcel = rngExcel.get_Resize(dt.Rows.Count, 1); ssortingng dataTypeName = dt.Columns[fieldNames[i]].DataType.Name; for (int j = 0; j < dt.Rows.Count; j++) { if (fieldNames[i].Length > 0) { switch (dataTypeName) { case "Int32": clnDataInt[j, 0] = Convert.ToInt32(dt.Rows[j][fieldNames[i]]); break; case "Double": clnDataDouble[j, 0] = Convert.ToDouble(dt.Rows[j][fieldNames[i]]); break; case "DateTime": if (fieldNames[i].ToLower().Contains("time")) clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToShortTimeSsortingng(); else if (fieldNames[i].ToLower().Contains("date")) clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToShortDateSsortingng(); else clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToSsortingng(); break; default: clnDataSsortingng[j, 0] = dt.Rows[j][fieldNames[i]].ToSsortingng(); break; } } else clnDataSsortingng[j, 0] = ssortingng.Empty; } // set values in the sheet wholesale. if (dataTypeName == "Int32") rngExcel.set_Value(Missing.Value, clnDataInt); else if (dataTypeName == "Double") rngExcel.set_Value(Missing.Value, clnDataDouble); else rngExcel.set_Value(Missing.Value, clnDataSsortingng); } // figure out the letter of the last column (supports 1 letter column names) ssortingng lastColumn = char.ConvertFromUtf32("A".ToCharArray()[0] + columnNames.Length - 1); // make the header range bold headerRange = xlWk.get_Range("A1", lastColumn + "1"); headerRange.Font.Bold = true; // autofit for better view xlWk.Columns.AutoFit(); } finally { ReleaseObject(headerRange); ReleaseObject(rngExcel); } } private void ReleaseObject(object obj) { try { System.Runtime.InteropServices.Marshal.ReleaseComObject(obj); obj = null; } catch { obj = null; } finally { GC.Collect(); } } rngExcel.set_Value (Missing.Value, clnDataSsortingng);  private void RenderDataTableOnXlSheet(DataTable dt, Excel.Worksheet xlWk, ssortingng [] columnNames, ssortingng [] fieldNames) { Excel.Range rngExcel = null; Excel.Range headerRange = null; try { // render the column names (eg headers) for (int i = 0; i < columnNames.Length; i++) xlWk.Cells[1, i + 1] = columnNames[i]; // for each column, create an array and set the array // to the excel range for that column. for (int i = 0; i < fieldNames.Length; i++) { ssortingng[,] clnDataSsortingng = new ssortingng[dt.Rows.Count, 1]; int[,] clnDataInt = new int[dt.Rows.Count, 1]; double[,] clnDataDouble = new double[dt.Rows.Count, 1]; ssortingng columnLetter = char.ConvertFromUtf32("A".ToCharArray()[0] + i); rngExcel = xlWk.get_Range(columnLetter + "2", Missing.Value); rngExcel = rngExcel.get_Resize(dt.Rows.Count, 1); ssortingng dataTypeName = dt.Columns[fieldNames[i]].DataType.Name; for (int j = 0; j < dt.Rows.Count; j++) { if (fieldNames[i].Length > 0) { switch (dataTypeName) { case "Int32": clnDataInt[j, 0] = Convert.ToInt32(dt.Rows[j][fieldNames[i]]); break; case "Double": clnDataDouble[j, 0] = Convert.ToDouble(dt.Rows[j][fieldNames[i]]); break; case "DateTime": if (fieldNames[i].ToLower().Contains("time")) clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToShortTimeSsortingng(); else if (fieldNames[i].ToLower().Contains("date")) clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToShortDateSsortingng(); else clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToSsortingng(); break; default: clnDataSsortingng[j, 0] = dt.Rows[j][fieldNames[i]].ToSsortingng(); break; } } else clnDataSsortingng[j, 0] = ssortingng.Empty; } // set values in the sheet wholesale. if (dataTypeName == "Int32") rngExcel.set_Value(Missing.Value, clnDataInt); else if (dataTypeName == "Double") rngExcel.set_Value(Missing.Value, clnDataDouble); else rngExcel.set_Value(Missing.Value, clnDataSsortingng); } // figure out the letter of the last column (supports 1 letter column names) ssortingng lastColumn = char.ConvertFromUtf32("A".ToCharArray()[0] + columnNames.Length - 1); // make the header range bold headerRange = xlWk.get_Range("A1", lastColumn + "1"); headerRange.Font.Bold = true; // autofit for better view xlWk.Columns.AutoFit(); } finally { ReleaseObject(headerRange); ReleaseObject(rngExcel); } } private void ReleaseObject(object obj) { try { System.Runtime.InteropServices.Marshal.ReleaseComObject(obj); obj = null; } catch { obj = null; } finally { GC.Collect(); } } // figure la lettre de la dernière colonne (prend en charge les noms de colonne de 1 lettre)  private void RenderDataTableOnXlSheet(DataTable dt, Excel.Worksheet xlWk, ssortingng [] columnNames, ssortingng [] fieldNames) { Excel.Range rngExcel = null; Excel.Range headerRange = null; try { // render the column names (eg headers) for (int i = 0; i < columnNames.Length; i++) xlWk.Cells[1, i + 1] = columnNames[i]; // for each column, create an array and set the array // to the excel range for that column. for (int i = 0; i < fieldNames.Length; i++) { ssortingng[,] clnDataSsortingng = new ssortingng[dt.Rows.Count, 1]; int[,] clnDataInt = new int[dt.Rows.Count, 1]; double[,] clnDataDouble = new double[dt.Rows.Count, 1]; ssortingng columnLetter = char.ConvertFromUtf32("A".ToCharArray()[0] + i); rngExcel = xlWk.get_Range(columnLetter + "2", Missing.Value); rngExcel = rngExcel.get_Resize(dt.Rows.Count, 1); ssortingng dataTypeName = dt.Columns[fieldNames[i]].DataType.Name; for (int j = 0; j < dt.Rows.Count; j++) { if (fieldNames[i].Length > 0) { switch (dataTypeName) { case "Int32": clnDataInt[j, 0] = Convert.ToInt32(dt.Rows[j][fieldNames[i]]); break; case "Double": clnDataDouble[j, 0] = Convert.ToDouble(dt.Rows[j][fieldNames[i]]); break; case "DateTime": if (fieldNames[i].ToLower().Contains("time")) clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToShortTimeSsortingng(); else if (fieldNames[i].ToLower().Contains("date")) clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToShortDateSsortingng(); else clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToSsortingng(); break; default: clnDataSsortingng[j, 0] = dt.Rows[j][fieldNames[i]].ToSsortingng(); break; } } else clnDataSsortingng[j, 0] = ssortingng.Empty; } // set values in the sheet wholesale. if (dataTypeName == "Int32") rngExcel.set_Value(Missing.Value, clnDataInt); else if (dataTypeName == "Double") rngExcel.set_Value(Missing.Value, clnDataDouble); else rngExcel.set_Value(Missing.Value, clnDataSsortingng); } // figure out the letter of the last column (supports 1 letter column names) ssortingng lastColumn = char.ConvertFromUtf32("A".ToCharArray()[0] + columnNames.Length - 1); // make the header range bold headerRange = xlWk.get_Range("A1", lastColumn + "1"); headerRange.Font.Bold = true; // autofit for better view xlWk.Columns.AutoFit(); } finally { ReleaseObject(headerRange); ReleaseObject(rngExcel); } } private void ReleaseObject(object obj) { try { System.Runtime.InteropServices.Marshal.ReleaseComObject(obj); obj = null; } catch { obj = null; } finally { GC.Collect(); } } ssortingng lastColumn = char.ConvertFromUtf32 ("A" .ToCharArray () [0] + columnNames.Length - 1);  private void RenderDataTableOnXlSheet(DataTable dt, Excel.Worksheet xlWk, ssortingng [] columnNames, ssortingng [] fieldNames) { Excel.Range rngExcel = null; Excel.Range headerRange = null; try { // render the column names (eg headers) for (int i = 0; i < columnNames.Length; i++) xlWk.Cells[1, i + 1] = columnNames[i]; // for each column, create an array and set the array // to the excel range for that column. for (int i = 0; i < fieldNames.Length; i++) { ssortingng[,] clnDataSsortingng = new ssortingng[dt.Rows.Count, 1]; int[,] clnDataInt = new int[dt.Rows.Count, 1]; double[,] clnDataDouble = new double[dt.Rows.Count, 1]; ssortingng columnLetter = char.ConvertFromUtf32("A".ToCharArray()[0] + i); rngExcel = xlWk.get_Range(columnLetter + "2", Missing.Value); rngExcel = rngExcel.get_Resize(dt.Rows.Count, 1); ssortingng dataTypeName = dt.Columns[fieldNames[i]].DataType.Name; for (int j = 0; j < dt.Rows.Count; j++) { if (fieldNames[i].Length > 0) { switch (dataTypeName) { case "Int32": clnDataInt[j, 0] = Convert.ToInt32(dt.Rows[j][fieldNames[i]]); break; case "Double": clnDataDouble[j, 0] = Convert.ToDouble(dt.Rows[j][fieldNames[i]]); break; case "DateTime": if (fieldNames[i].ToLower().Contains("time")) clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToShortTimeSsortingng(); else if (fieldNames[i].ToLower().Contains("date")) clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToShortDateSsortingng(); else clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToSsortingng(); break; default: clnDataSsortingng[j, 0] = dt.Rows[j][fieldNames[i]].ToSsortingng(); break; } } else clnDataSsortingng[j, 0] = ssortingng.Empty; } // set values in the sheet wholesale. if (dataTypeName == "Int32") rngExcel.set_Value(Missing.Value, clnDataInt); else if (dataTypeName == "Double") rngExcel.set_Value(Missing.Value, clnDataDouble); else rngExcel.set_Value(Missing.Value, clnDataSsortingng); } // figure out the letter of the last column (supports 1 letter column names) ssortingng lastColumn = char.ConvertFromUtf32("A".ToCharArray()[0] + columnNames.Length - 1); // make the header range bold headerRange = xlWk.get_Range("A1", lastColumn + "1"); headerRange.Font.Bold = true; // autofit for better view xlWk.Columns.AutoFit(); } finally { ReleaseObject(headerRange); ReleaseObject(rngExcel); } } private void ReleaseObject(object obj) { try { System.Runtime.InteropServices.Marshal.ReleaseComObject(obj); obj = null; } catch { obj = null; } finally { GC.Collect(); } } // rend la gamme d'en-têtes en gras  private void RenderDataTableOnXlSheet(DataTable dt, Excel.Worksheet xlWk, ssortingng [] columnNames, ssortingng [] fieldNames) { Excel.Range rngExcel = null; Excel.Range headerRange = null; try { // render the column names (eg headers) for (int i = 0; i < columnNames.Length; i++) xlWk.Cells[1, i + 1] = columnNames[i]; // for each column, create an array and set the array // to the excel range for that column. for (int i = 0; i < fieldNames.Length; i++) { ssortingng[,] clnDataSsortingng = new ssortingng[dt.Rows.Count, 1]; int[,] clnDataInt = new int[dt.Rows.Count, 1]; double[,] clnDataDouble = new double[dt.Rows.Count, 1]; ssortingng columnLetter = char.ConvertFromUtf32("A".ToCharArray()[0] + i); rngExcel = xlWk.get_Range(columnLetter + "2", Missing.Value); rngExcel = rngExcel.get_Resize(dt.Rows.Count, 1); ssortingng dataTypeName = dt.Columns[fieldNames[i]].DataType.Name; for (int j = 0; j < dt.Rows.Count; j++) { if (fieldNames[i].Length > 0) { switch (dataTypeName) { case "Int32": clnDataInt[j, 0] = Convert.ToInt32(dt.Rows[j][fieldNames[i]]); break; case "Double": clnDataDouble[j, 0] = Convert.ToDouble(dt.Rows[j][fieldNames[i]]); break; case "DateTime": if (fieldNames[i].ToLower().Contains("time")) clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToShortTimeSsortingng(); else if (fieldNames[i].ToLower().Contains("date")) clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToShortDateSsortingng(); else clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToSsortingng(); break; default: clnDataSsortingng[j, 0] = dt.Rows[j][fieldNames[i]].ToSsortingng(); break; } } else clnDataSsortingng[j, 0] = ssortingng.Empty; } // set values in the sheet wholesale. if (dataTypeName == "Int32") rngExcel.set_Value(Missing.Value, clnDataInt); else if (dataTypeName == "Double") rngExcel.set_Value(Missing.Value, clnDataDouble); else rngExcel.set_Value(Missing.Value, clnDataSsortingng); } // figure out the letter of the last column (supports 1 letter column names) ssortingng lastColumn = char.ConvertFromUtf32("A".ToCharArray()[0] + columnNames.Length - 1); // make the header range bold headerRange = xlWk.get_Range("A1", lastColumn + "1"); headerRange.Font.Bold = true; // autofit for better view xlWk.Columns.AutoFit(); } finally { ReleaseObject(headerRange); ReleaseObject(rngExcel); } } private void ReleaseObject(object obj) { try { System.Runtime.InteropServices.Marshal.ReleaseComObject(obj); obj = null; } catch { obj = null; } finally { GC.Collect(); } } headerRange = xlWk.get_Range ("A1", lastColumn + "1");  private void RenderDataTableOnXlSheet(DataTable dt, Excel.Worksheet xlWk, ssortingng [] columnNames, ssortingng [] fieldNames) { Excel.Range rngExcel = null; Excel.Range headerRange = null; try { // render the column names (eg headers) for (int i = 0; i < columnNames.Length; i++) xlWk.Cells[1, i + 1] = columnNames[i]; // for each column, create an array and set the array // to the excel range for that column. for (int i = 0; i < fieldNames.Length; i++) { ssortingng[,] clnDataSsortingng = new ssortingng[dt.Rows.Count, 1]; int[,] clnDataInt = new int[dt.Rows.Count, 1]; double[,] clnDataDouble = new double[dt.Rows.Count, 1]; ssortingng columnLetter = char.ConvertFromUtf32("A".ToCharArray()[0] + i); rngExcel = xlWk.get_Range(columnLetter + "2", Missing.Value); rngExcel = rngExcel.get_Resize(dt.Rows.Count, 1); ssortingng dataTypeName = dt.Columns[fieldNames[i]].DataType.Name; for (int j = 0; j < dt.Rows.Count; j++) { if (fieldNames[i].Length > 0) { switch (dataTypeName) { case "Int32": clnDataInt[j, 0] = Convert.ToInt32(dt.Rows[j][fieldNames[i]]); break; case "Double": clnDataDouble[j, 0] = Convert.ToDouble(dt.Rows[j][fieldNames[i]]); break; case "DateTime": if (fieldNames[i].ToLower().Contains("time")) clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToShortTimeSsortingng(); else if (fieldNames[i].ToLower().Contains("date")) clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToShortDateSsortingng(); else clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToSsortingng(); break; default: clnDataSsortingng[j, 0] = dt.Rows[j][fieldNames[i]].ToSsortingng(); break; } } else clnDataSsortingng[j, 0] = ssortingng.Empty; } // set values in the sheet wholesale. if (dataTypeName == "Int32") rngExcel.set_Value(Missing.Value, clnDataInt); else if (dataTypeName == "Double") rngExcel.set_Value(Missing.Value, clnDataDouble); else rngExcel.set_Value(Missing.Value, clnDataSsortingng); } // figure out the letter of the last column (supports 1 letter column names) ssortingng lastColumn = char.ConvertFromUtf32("A".ToCharArray()[0] + columnNames.Length - 1); // make the header range bold headerRange = xlWk.get_Range("A1", lastColumn + "1"); headerRange.Font.Bold = true; // autofit for better view xlWk.Columns.AutoFit(); } finally { ReleaseObject(headerRange); ReleaseObject(rngExcel); } } private void ReleaseObject(object obj) { try { System.Runtime.InteropServices.Marshal.ReleaseComObject(obj); obj = null; } catch { obj = null; } finally { GC.Collect(); } } headerRange.Font.Bold = true;  private void RenderDataTableOnXlSheet(DataTable dt, Excel.Worksheet xlWk, ssortingng [] columnNames, ssortingng [] fieldNames) { Excel.Range rngExcel = null; Excel.Range headerRange = null; try { // render the column names (eg headers) for (int i = 0; i < columnNames.Length; i++) xlWk.Cells[1, i + 1] = columnNames[i]; // for each column, create an array and set the array // to the excel range for that column. for (int i = 0; i < fieldNames.Length; i++) { ssortingng[,] clnDataSsortingng = new ssortingng[dt.Rows.Count, 1]; int[,] clnDataInt = new int[dt.Rows.Count, 1]; double[,] clnDataDouble = new double[dt.Rows.Count, 1]; ssortingng columnLetter = char.ConvertFromUtf32("A".ToCharArray()[0] + i); rngExcel = xlWk.get_Range(columnLetter + "2", Missing.Value); rngExcel = rngExcel.get_Resize(dt.Rows.Count, 1); ssortingng dataTypeName = dt.Columns[fieldNames[i]].DataType.Name; for (int j = 0; j < dt.Rows.Count; j++) { if (fieldNames[i].Length > 0) { switch (dataTypeName) { case "Int32": clnDataInt[j, 0] = Convert.ToInt32(dt.Rows[j][fieldNames[i]]); break; case "Double": clnDataDouble[j, 0] = Convert.ToDouble(dt.Rows[j][fieldNames[i]]); break; case "DateTime": if (fieldNames[i].ToLower().Contains("time")) clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToShortTimeSsortingng(); else if (fieldNames[i].ToLower().Contains("date")) clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToShortDateSsortingng(); else clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToSsortingng(); break; default: clnDataSsortingng[j, 0] = dt.Rows[j][fieldNames[i]].ToSsortingng(); break; } } else clnDataSsortingng[j, 0] = ssortingng.Empty; } // set values in the sheet wholesale. if (dataTypeName == "Int32") rngExcel.set_Value(Missing.Value, clnDataInt); else if (dataTypeName == "Double") rngExcel.set_Value(Missing.Value, clnDataDouble); else rngExcel.set_Value(Missing.Value, clnDataSsortingng); } // figure out the letter of the last column (supports 1 letter column names) ssortingng lastColumn = char.ConvertFromUtf32("A".ToCharArray()[0] + columnNames.Length - 1); // make the header range bold headerRange = xlWk.get_Range("A1", lastColumn + "1"); headerRange.Font.Bold = true; // autofit for better view xlWk.Columns.AutoFit(); } finally { ReleaseObject(headerRange); ReleaseObject(rngExcel); } } private void ReleaseObject(object obj) { try { System.Runtime.InteropServices.Marshal.ReleaseComObject(obj); obj = null; } catch { obj = null; } finally { GC.Collect(); } } // autofit pour une meilleure vue  private void RenderDataTableOnXlSheet(DataTable dt, Excel.Worksheet xlWk, ssortingng [] columnNames, ssortingng [] fieldNames) { Excel.Range rngExcel = null; Excel.Range headerRange = null; try { // render the column names (eg headers) for (int i = 0; i < columnNames.Length; i++) xlWk.Cells[1, i + 1] = columnNames[i]; // for each column, create an array and set the array // to the excel range for that column. for (int i = 0; i < fieldNames.Length; i++) { ssortingng[,] clnDataSsortingng = new ssortingng[dt.Rows.Count, 1]; int[,] clnDataInt = new int[dt.Rows.Count, 1]; double[,] clnDataDouble = new double[dt.Rows.Count, 1]; ssortingng columnLetter = char.ConvertFromUtf32("A".ToCharArray()[0] + i); rngExcel = xlWk.get_Range(columnLetter + "2", Missing.Value); rngExcel = rngExcel.get_Resize(dt.Rows.Count, 1); ssortingng dataTypeName = dt.Columns[fieldNames[i]].DataType.Name; for (int j = 0; j < dt.Rows.Count; j++) { if (fieldNames[i].Length > 0) { switch (dataTypeName) { case "Int32": clnDataInt[j, 0] = Convert.ToInt32(dt.Rows[j][fieldNames[i]]); break; case "Double": clnDataDouble[j, 0] = Convert.ToDouble(dt.Rows[j][fieldNames[i]]); break; case "DateTime": if (fieldNames[i].ToLower().Contains("time")) clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToShortTimeSsortingng(); else if (fieldNames[i].ToLower().Contains("date")) clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToShortDateSsortingng(); else clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToSsortingng(); break; default: clnDataSsortingng[j, 0] = dt.Rows[j][fieldNames[i]].ToSsortingng(); break; } } else clnDataSsortingng[j, 0] = ssortingng.Empty; } // set values in the sheet wholesale. if (dataTypeName == "Int32") rngExcel.set_Value(Missing.Value, clnDataInt); else if (dataTypeName == "Double") rngExcel.set_Value(Missing.Value, clnDataDouble); else rngExcel.set_Value(Missing.Value, clnDataSsortingng); } // figure out the letter of the last column (supports 1 letter column names) ssortingng lastColumn = char.ConvertFromUtf32("A".ToCharArray()[0] + columnNames.Length - 1); // make the header range bold headerRange = xlWk.get_Range("A1", lastColumn + "1"); headerRange.Font.Bold = true; // autofit for better view xlWk.Columns.AutoFit(); } finally { ReleaseObject(headerRange); ReleaseObject(rngExcel); } } private void ReleaseObject(object obj) { try { System.Runtime.InteropServices.Marshal.ReleaseComObject(obj); obj = null; } catch { obj = null; } finally { GC.Collect(); } } xlWk.Columns.AutoFit ();  private void RenderDataTableOnXlSheet(DataTable dt, Excel.Worksheet xlWk, ssortingng [] columnNames, ssortingng [] fieldNames) { Excel.Range rngExcel = null; Excel.Range headerRange = null; try { // render the column names (eg headers) for (int i = 0; i < columnNames.Length; i++) xlWk.Cells[1, i + 1] = columnNames[i]; // for each column, create an array and set the array // to the excel range for that column. for (int i = 0; i < fieldNames.Length; i++) { ssortingng[,] clnDataSsortingng = new ssortingng[dt.Rows.Count, 1]; int[,] clnDataInt = new int[dt.Rows.Count, 1]; double[,] clnDataDouble = new double[dt.Rows.Count, 1]; ssortingng columnLetter = char.ConvertFromUtf32("A".ToCharArray()[0] + i); rngExcel = xlWk.get_Range(columnLetter + "2", Missing.Value); rngExcel = rngExcel.get_Resize(dt.Rows.Count, 1); ssortingng dataTypeName = dt.Columns[fieldNames[i]].DataType.Name; for (int j = 0; j < dt.Rows.Count; j++) { if (fieldNames[i].Length > 0) { switch (dataTypeName) { case "Int32": clnDataInt[j, 0] = Convert.ToInt32(dt.Rows[j][fieldNames[i]]); break; case "Double": clnDataDouble[j, 0] = Convert.ToDouble(dt.Rows[j][fieldNames[i]]); break; case "DateTime": if (fieldNames[i].ToLower().Contains("time")) clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToShortTimeSsortingng(); else if (fieldNames[i].ToLower().Contains("date")) clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToShortDateSsortingng(); else clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToSsortingng(); break; default: clnDataSsortingng[j, 0] = dt.Rows[j][fieldNames[i]].ToSsortingng(); break; } } else clnDataSsortingng[j, 0] = ssortingng.Empty; } // set values in the sheet wholesale. if (dataTypeName == "Int32") rngExcel.set_Value(Missing.Value, clnDataInt); else if (dataTypeName == "Double") rngExcel.set_Value(Missing.Value, clnDataDouble); else rngExcel.set_Value(Missing.Value, clnDataSsortingng); } // figure out the letter of the last column (supports 1 letter column names) ssortingng lastColumn = char.ConvertFromUtf32("A".ToCharArray()[0] + columnNames.Length - 1); // make the header range bold headerRange = xlWk.get_Range("A1", lastColumn + "1"); headerRange.Font.Bold = true; // autofit for better view xlWk.Columns.AutoFit(); } finally { ReleaseObject(headerRange); ReleaseObject(rngExcel); } } private void ReleaseObject(object obj) { try { System.Runtime.InteropServices.Marshal.ReleaseComObject(obj); obj = null; } catch { obj = null; } finally { GC.Collect(); } } ReleaseObject (headerRange);  private void RenderDataTableOnXlSheet(DataTable dt, Excel.Worksheet xlWk, ssortingng [] columnNames, ssortingng [] fieldNames) { Excel.Range rngExcel = null; Excel.Range headerRange = null; try { // render the column names (eg headers) for (int i = 0; i < columnNames.Length; i++) xlWk.Cells[1, i + 1] = columnNames[i]; // for each column, create an array and set the array // to the excel range for that column. for (int i = 0; i < fieldNames.Length; i++) { ssortingng[,] clnDataSsortingng = new ssortingng[dt.Rows.Count, 1]; int[,] clnDataInt = new int[dt.Rows.Count, 1]; double[,] clnDataDouble = new double[dt.Rows.Count, 1]; ssortingng columnLetter = char.ConvertFromUtf32("A".ToCharArray()[0] + i); rngExcel = xlWk.get_Range(columnLetter + "2", Missing.Value); rngExcel = rngExcel.get_Resize(dt.Rows.Count, 1); ssortingng dataTypeName = dt.Columns[fieldNames[i]].DataType.Name; for (int j = 0; j < dt.Rows.Count; j++) { if (fieldNames[i].Length > 0) { switch (dataTypeName) { case "Int32": clnDataInt[j, 0] = Convert.ToInt32(dt.Rows[j][fieldNames[i]]); break; case "Double": clnDataDouble[j, 0] = Convert.ToDouble(dt.Rows[j][fieldNames[i]]); break; case "DateTime": if (fieldNames[i].ToLower().Contains("time")) clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToShortTimeSsortingng(); else if (fieldNames[i].ToLower().Contains("date")) clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToShortDateSsortingng(); else clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToSsortingng(); break; default: clnDataSsortingng[j, 0] = dt.Rows[j][fieldNames[i]].ToSsortingng(); break; } } else clnDataSsortingng[j, 0] = ssortingng.Empty; } // set values in the sheet wholesale. if (dataTypeName == "Int32") rngExcel.set_Value(Missing.Value, clnDataInt); else if (dataTypeName == "Double") rngExcel.set_Value(Missing.Value, clnDataDouble); else rngExcel.set_Value(Missing.Value, clnDataSsortingng); } // figure out the letter of the last column (supports 1 letter column names) ssortingng lastColumn = char.ConvertFromUtf32("A".ToCharArray()[0] + columnNames.Length - 1); // make the header range bold headerRange = xlWk.get_Range("A1", lastColumn + "1"); headerRange.Font.Bold = true; // autofit for better view xlWk.Columns.AutoFit(); } finally { ReleaseObject(headerRange); ReleaseObject(rngExcel); } } private void ReleaseObject(object obj) { try { System.Runtime.InteropServices.Marshal.ReleaseComObject(obj); obj = null; } catch { obj = null; } finally { GC.Collect(); } } ReleaseObject (rngExcel);  private void RenderDataTableOnXlSheet(DataTable dt, Excel.Worksheet xlWk, ssortingng [] columnNames, ssortingng [] fieldNames) { Excel.Range rngExcel = null; Excel.Range headerRange = null; try { // render the column names (eg headers) for (int i = 0; i < columnNames.Length; i++) xlWk.Cells[1, i + 1] = columnNames[i]; // for each column, create an array and set the array // to the excel range for that column. for (int i = 0; i < fieldNames.Length; i++) { ssortingng[,] clnDataSsortingng = new ssortingng[dt.Rows.Count, 1]; int[,] clnDataInt = new int[dt.Rows.Count, 1]; double[,] clnDataDouble = new double[dt.Rows.Count, 1]; ssortingng columnLetter = char.ConvertFromUtf32("A".ToCharArray()[0] + i); rngExcel = xlWk.get_Range(columnLetter + "2", Missing.Value); rngExcel = rngExcel.get_Resize(dt.Rows.Count, 1); ssortingng dataTypeName = dt.Columns[fieldNames[i]].DataType.Name; for (int j = 0; j < dt.Rows.Count; j++) { if (fieldNames[i].Length > 0) { switch (dataTypeName) { case "Int32": clnDataInt[j, 0] = Convert.ToInt32(dt.Rows[j][fieldNames[i]]); break; case "Double": clnDataDouble[j, 0] = Convert.ToDouble(dt.Rows[j][fieldNames[i]]); break; case "DateTime": if (fieldNames[i].ToLower().Contains("time")) clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToShortTimeSsortingng(); else if (fieldNames[i].ToLower().Contains("date")) clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToShortDateSsortingng(); else clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToSsortingng(); break; default: clnDataSsortingng[j, 0] = dt.Rows[j][fieldNames[i]].ToSsortingng(); break; } } else clnDataSsortingng[j, 0] = ssortingng.Empty; } // set values in the sheet wholesale. if (dataTypeName == "Int32") rngExcel.set_Value(Missing.Value, clnDataInt); else if (dataTypeName == "Double") rngExcel.set_Value(Missing.Value, clnDataDouble); else rngExcel.set_Value(Missing.Value, clnDataSsortingng); } // figure out the letter of the last column (supports 1 letter column names) ssortingng lastColumn = char.ConvertFromUtf32("A".ToCharArray()[0] + columnNames.Length - 1); // make the header range bold headerRange = xlWk.get_Range("A1", lastColumn + "1"); headerRange.Font.Bold = true; // autofit for better view xlWk.Columns.AutoFit(); } finally { ReleaseObject(headerRange); ReleaseObject(rngExcel); } } private void ReleaseObject(object obj) { try { System.Runtime.InteropServices.Marshal.ReleaseComObject(obj); obj = null; } catch { obj = null; } finally { GC.Collect(); } } private void ReleaseObject (object obj)  private void RenderDataTableOnXlSheet(DataTable dt, Excel.Worksheet xlWk, ssortingng [] columnNames, ssortingng [] fieldNames) { Excel.Range rngExcel = null; Excel.Range headerRange = null; try { // render the column names (eg headers) for (int i = 0; i < columnNames.Length; i++) xlWk.Cells[1, i + 1] = columnNames[i]; // for each column, create an array and set the array // to the excel range for that column. for (int i = 0; i < fieldNames.Length; i++) { ssortingng[,] clnDataSsortingng = new ssortingng[dt.Rows.Count, 1]; int[,] clnDataInt = new int[dt.Rows.Count, 1]; double[,] clnDataDouble = new double[dt.Rows.Count, 1]; ssortingng columnLetter = char.ConvertFromUtf32("A".ToCharArray()[0] + i); rngExcel = xlWk.get_Range(columnLetter + "2", Missing.Value); rngExcel = rngExcel.get_Resize(dt.Rows.Count, 1); ssortingng dataTypeName = dt.Columns[fieldNames[i]].DataType.Name; for (int j = 0; j < dt.Rows.Count; j++) { if (fieldNames[i].Length > 0) { switch (dataTypeName) { case "Int32": clnDataInt[j, 0] = Convert.ToInt32(dt.Rows[j][fieldNames[i]]); break; case "Double": clnDataDouble[j, 0] = Convert.ToDouble(dt.Rows[j][fieldNames[i]]); break; case "DateTime": if (fieldNames[i].ToLower().Contains("time")) clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToShortTimeSsortingng(); else if (fieldNames[i].ToLower().Contains("date")) clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToShortDateSsortingng(); else clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToSsortingng(); break; default: clnDataSsortingng[j, 0] = dt.Rows[j][fieldNames[i]].ToSsortingng(); break; } } else clnDataSsortingng[j, 0] = ssortingng.Empty; } // set values in the sheet wholesale. if (dataTypeName == "Int32") rngExcel.set_Value(Missing.Value, clnDataInt); else if (dataTypeName == "Double") rngExcel.set_Value(Missing.Value, clnDataDouble); else rngExcel.set_Value(Missing.Value, clnDataSsortingng); } // figure out the letter of the last column (supports 1 letter column names) ssortingng lastColumn = char.ConvertFromUtf32("A".ToCharArray()[0] + columnNames.Length - 1); // make the header range bold headerRange = xlWk.get_Range("A1", lastColumn + "1"); headerRange.Font.Bold = true; // autofit for better view xlWk.Columns.AutoFit(); } finally { ReleaseObject(headerRange); ReleaseObject(rngExcel); } } private void ReleaseObject(object obj) { try { System.Runtime.InteropServices.Marshal.ReleaseComObject(obj); obj = null; } catch { obj = null; } finally { GC.Collect(); } } System.Runtime.InteropServices.Marshal.ReleaseComObject (obj);  private void RenderDataTableOnXlSheet(DataTable dt, Excel.Worksheet xlWk, ssortingng [] columnNames, ssortingng [] fieldNames) { Excel.Range rngExcel = null; Excel.Range headerRange = null; try { // render the column names (eg headers) for (int i = 0; i < columnNames.Length; i++) xlWk.Cells[1, i + 1] = columnNames[i]; // for each column, create an array and set the array // to the excel range for that column. for (int i = 0; i < fieldNames.Length; i++) { ssortingng[,] clnDataSsortingng = new ssortingng[dt.Rows.Count, 1]; int[,] clnDataInt = new int[dt.Rows.Count, 1]; double[,] clnDataDouble = new double[dt.Rows.Count, 1]; ssortingng columnLetter = char.ConvertFromUtf32("A".ToCharArray()[0] + i); rngExcel = xlWk.get_Range(columnLetter + "2", Missing.Value); rngExcel = rngExcel.get_Resize(dt.Rows.Count, 1); ssortingng dataTypeName = dt.Columns[fieldNames[i]].DataType.Name; for (int j = 0; j < dt.Rows.Count; j++) { if (fieldNames[i].Length > 0) { switch (dataTypeName) { case "Int32": clnDataInt[j, 0] = Convert.ToInt32(dt.Rows[j][fieldNames[i]]); break; case "Double": clnDataDouble[j, 0] = Convert.ToDouble(dt.Rows[j][fieldNames[i]]); break; case "DateTime": if (fieldNames[i].ToLower().Contains("time")) clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToShortTimeSsortingng(); else if (fieldNames[i].ToLower().Contains("date")) clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToShortDateSsortingng(); else clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToSsortingng(); break; default: clnDataSsortingng[j, 0] = dt.Rows[j][fieldNames[i]].ToSsortingng(); break; } } else clnDataSsortingng[j, 0] = ssortingng.Empty; } // set values in the sheet wholesale. if (dataTypeName == "Int32") rngExcel.set_Value(Missing.Value, clnDataInt); else if (dataTypeName == "Double") rngExcel.set_Value(Missing.Value, clnDataDouble); else rngExcel.set_Value(Missing.Value, clnDataSsortingng); } // figure out the letter of the last column (supports 1 letter column names) ssortingng lastColumn = char.ConvertFromUtf32("A".ToCharArray()[0] + columnNames.Length - 1); // make the header range bold headerRange = xlWk.get_Range("A1", lastColumn + "1"); headerRange.Font.Bold = true; // autofit for better view xlWk.Columns.AutoFit(); } finally { ReleaseObject(headerRange); ReleaseObject(rngExcel); } } private void ReleaseObject(object obj) { try { System.Runtime.InteropServices.Marshal.ReleaseComObject(obj); obj = null; } catch { obj = null; } finally { GC.Collect(); } } obj = null;  private void RenderDataTableOnXlSheet(DataTable dt, Excel.Worksheet xlWk, ssortingng [] columnNames, ssortingng [] fieldNames) { Excel.Range rngExcel = null; Excel.Range headerRange = null; try { // render the column names (eg headers) for (int i = 0; i < columnNames.Length; i++) xlWk.Cells[1, i + 1] = columnNames[i]; // for each column, create an array and set the array // to the excel range for that column. for (int i = 0; i < fieldNames.Length; i++) { ssortingng[,] clnDataSsortingng = new ssortingng[dt.Rows.Count, 1]; int[,] clnDataInt = new int[dt.Rows.Count, 1]; double[,] clnDataDouble = new double[dt.Rows.Count, 1]; ssortingng columnLetter = char.ConvertFromUtf32("A".ToCharArray()[0] + i); rngExcel = xlWk.get_Range(columnLetter + "2", Missing.Value); rngExcel = rngExcel.get_Resize(dt.Rows.Count, 1); ssortingng dataTypeName = dt.Columns[fieldNames[i]].DataType.Name; for (int j = 0; j < dt.Rows.Count; j++) { if (fieldNames[i].Length > 0) { switch (dataTypeName) { case "Int32": clnDataInt[j, 0] = Convert.ToInt32(dt.Rows[j][fieldNames[i]]); break; case "Double": clnDataDouble[j, 0] = Convert.ToDouble(dt.Rows[j][fieldNames[i]]); break; case "DateTime": if (fieldNames[i].ToLower().Contains("time")) clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToShortTimeSsortingng(); else if (fieldNames[i].ToLower().Contains("date")) clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToShortDateSsortingng(); else clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToSsortingng(); break; default: clnDataSsortingng[j, 0] = dt.Rows[j][fieldNames[i]].ToSsortingng(); break; } } else clnDataSsortingng[j, 0] = ssortingng.Empty; } // set values in the sheet wholesale. if (dataTypeName == "Int32") rngExcel.set_Value(Missing.Value, clnDataInt); else if (dataTypeName == "Double") rngExcel.set_Value(Missing.Value, clnDataDouble); else rngExcel.set_Value(Missing.Value, clnDataSsortingng); } // figure out the letter of the last column (supports 1 letter column names) ssortingng lastColumn = char.ConvertFromUtf32("A".ToCharArray()[0] + columnNames.Length - 1); // make the header range bold headerRange = xlWk.get_Range("A1", lastColumn + "1"); headerRange.Font.Bold = true; // autofit for better view xlWk.Columns.AutoFit(); } finally { ReleaseObject(headerRange); ReleaseObject(rngExcel); } } private void ReleaseObject(object obj) { try { System.Runtime.InteropServices.Marshal.ReleaseComObject(obj); obj = null; } catch { obj = null; } finally { GC.Collect(); } } obj = null;  private void RenderDataTableOnXlSheet(DataTable dt, Excel.Worksheet xlWk, ssortingng [] columnNames, ssortingng [] fieldNames) { Excel.Range rngExcel = null; Excel.Range headerRange = null; try { // render the column names (eg headers) for (int i = 0; i < columnNames.Length; i++) xlWk.Cells[1, i + 1] = columnNames[i]; // for each column, create an array and set the array // to the excel range for that column. for (int i = 0; i < fieldNames.Length; i++) { ssortingng[,] clnDataSsortingng = new ssortingng[dt.Rows.Count, 1]; int[,] clnDataInt = new int[dt.Rows.Count, 1]; double[,] clnDataDouble = new double[dt.Rows.Count, 1]; ssortingng columnLetter = char.ConvertFromUtf32("A".ToCharArray()[0] + i); rngExcel = xlWk.get_Range(columnLetter + "2", Missing.Value); rngExcel = rngExcel.get_Resize(dt.Rows.Count, 1); ssortingng dataTypeName = dt.Columns[fieldNames[i]].DataType.Name; for (int j = 0; j < dt.Rows.Count; j++) { if (fieldNames[i].Length > 0) { switch (dataTypeName) { case "Int32": clnDataInt[j, 0] = Convert.ToInt32(dt.Rows[j][fieldNames[i]]); break; case "Double": clnDataDouble[j, 0] = Convert.ToDouble(dt.Rows[j][fieldNames[i]]); break; case "DateTime": if (fieldNames[i].ToLower().Contains("time")) clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToShortTimeSsortingng(); else if (fieldNames[i].ToLower().Contains("date")) clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToShortDateSsortingng(); else clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToSsortingng(); break; default: clnDataSsortingng[j, 0] = dt.Rows[j][fieldNames[i]].ToSsortingng(); break; } } else clnDataSsortingng[j, 0] = ssortingng.Empty; } // set values in the sheet wholesale. if (dataTypeName == "Int32") rngExcel.set_Value(Missing.Value, clnDataInt); else if (dataTypeName == "Double") rngExcel.set_Value(Missing.Value, clnDataDouble); else rngExcel.set_Value(Missing.Value, clnDataSsortingng); } // figure out the letter of the last column (supports 1 letter column names) ssortingng lastColumn = char.ConvertFromUtf32("A".ToCharArray()[0] + columnNames.Length - 1); // make the header range bold headerRange = xlWk.get_Range("A1", lastColumn + "1"); headerRange.Font.Bold = true; // autofit for better view xlWk.Columns.AutoFit(); } finally { ReleaseObject(headerRange); ReleaseObject(rngExcel); } } private void ReleaseObject(object obj) { try { System.Runtime.InteropServices.Marshal.ReleaseComObject(obj); obj = null; } catch { obj = null; } finally { GC.Collect(); } } GC.Collect ();  private void RenderDataTableOnXlSheet(DataTable dt, Excel.Worksheet xlWk, ssortingng [] columnNames, ssortingng [] fieldNames) { Excel.Range rngExcel = null; Excel.Range headerRange = null; try { // render the column names (eg headers) for (int i = 0; i < columnNames.Length; i++) xlWk.Cells[1, i + 1] = columnNames[i]; // for each column, create an array and set the array // to the excel range for that column. for (int i = 0; i < fieldNames.Length; i++) { ssortingng[,] clnDataSsortingng = new ssortingng[dt.Rows.Count, 1]; int[,] clnDataInt = new int[dt.Rows.Count, 1]; double[,] clnDataDouble = new double[dt.Rows.Count, 1]; ssortingng columnLetter = char.ConvertFromUtf32("A".ToCharArray()[0] + i); rngExcel = xlWk.get_Range(columnLetter + "2", Missing.Value); rngExcel = rngExcel.get_Resize(dt.Rows.Count, 1); ssortingng dataTypeName = dt.Columns[fieldNames[i]].DataType.Name; for (int j = 0; j < dt.Rows.Count; j++) { if (fieldNames[i].Length > 0) { switch (dataTypeName) { case "Int32": clnDataInt[j, 0] = Convert.ToInt32(dt.Rows[j][fieldNames[i]]); break; case "Double": clnDataDouble[j, 0] = Convert.ToDouble(dt.Rows[j][fieldNames[i]]); break; case "DateTime": if (fieldNames[i].ToLower().Contains("time")) clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToShortTimeSsortingng(); else if (fieldNames[i].ToLower().Contains("date")) clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToShortDateSsortingng(); else clnDataSsortingng[j, 0] = Convert.ToDateTime(dt.Rows[j][fieldNames[i]]).ToSsortingng(); break; default: clnDataSsortingng[j, 0] = dt.Rows[j][fieldNames[i]].ToSsortingng(); break; } } else clnDataSsortingng[j, 0] = ssortingng.Empty; } // set values in the sheet wholesale. if (dataTypeName == "Int32") rngExcel.set_Value(Missing.Value, clnDataInt); else if (dataTypeName == "Double") rngExcel.set_Value(Missing.Value, clnDataDouble); else rngExcel.set_Value(Missing.Value, clnDataSsortingng); } // figure out the letter of the last column (supports 1 letter column names) ssortingng lastColumn = char.ConvertFromUtf32("A".ToCharArray()[0] + columnNames.Length - 1); // make the header range bold headerRange = xlWk.get_Range("A1", lastColumn + "1"); headerRange.Font.Bold = true; // autofit for better view xlWk.Columns.AutoFit(); } finally { ReleaseObject(headerRange); ReleaseObject(rngExcel); } } private void ReleaseObject(object obj) { try { System.Runtime.InteropServices.Marshal.ReleaseComObject(obj); obj = null; } catch { obj = null; } finally { GC.Collect(); } } 

Au lieu de définir des valeurs de cellules un par un, faites-le dans un lot.

Étape 1. Transférer datatables de votre DataTable dans un tableau avec les mêmes dimensions.

Étape 2. Définissez un object Excel Range qui s'étend sur la plage appropriée.

Étape 3. Définissez RangeValue sur le tableau.

Cela sera beaucoup plus rapide car vous aurez deux appels au total sur la frontière Interop (un pour get l'object Range, un pour définir sa valeur), au lieu de deux par cellule (get une cellule, définir une valeur).

Il existe un exemple de code à l' article 302096 de MSDN KB .

Interop est insortingnsèquement très lent. Il y a une grande surcharge associée à chaque appel. Pour l'accélérer, essayez d'écrire un set de données d'objects dans une gamme de cellules dans une instruction d'affectation.

Ou s'il s'agit d'un problème grave, essayez d'utiliser l'une des extensions Managed Code Excel qui peuvent lire / écrire des données à l'aide du code géré via l'interface XLL. (Addin Express, Managed XLL etc.)

Si vous avez un jeu d'loggings, le moyen le plus rapide d'écrire sur Excel est CopyFromRecordset.

Avez-vous une exigence spécifique pour passer l'itinéraire d'automation COM? Sinon, vous avez quelques autres options.

  1. Utilisez le fournisseur OLEDB pour créer / écrire sur un file Excel
    http://support.microsoft.com/kb/316934

  2. Utilisez une bibliothèque tierce pour écrire sur Excel. En fonction de vos conditions de licence, il existe quelques options. Mise à jour: une bonne bibliothèque gratuite est NPOI http://npoi.codeplex.com/

  3. Ecrivez datatables dans un file csv et chargez-le dans Excel

  4. Écrivez datatables en tant que XML pouvant être chargées dans Excel.

  5. Utilisez le SDK Open XML
    http://www.microsoft.com/downloads/details.aspx?familyid=C6E744E5-36E9-45F5-8D8C-331DF206E0D0&displaylang=en

Vous pouvez créer un complément Excel, avec un code VBA pour effectuer tout votre travail lourd db. de .NET, tout ce que vous devez faire est d'instancier Excel, d'append l'add-in et d'appeler la routine Excel VBA, en passant les parameters qu'il doit exécuter vos instructions SQL.

Je suis d'accord avec Charles. Interop est vraiment lent. Mais essayez ceci:

 private void RenderDataTableOnXlSheet(DataTable dt, Excel.Worksheet xlWk, ssortingng [] columnNames, ssortingng [] fieldNames) { // render the column names (eg headers) int columnLength = columnNames.Length; for (int i = 0; i < columnLength; i++) xlWk.Cells[1, i + 1] = columnNames[i]; // render the data int fieldLength = fieldNames.Length; int rowCount = dt.Rows.Count; for (int j = 0; j < rowCount; j++) { for (int i = 0; i < fieldLength; i++) { xlWk.Cells[j + 2, i + 1] = dt.Rows[j][fieldNames[i]].ToSsortingng(); } } } private void RenderDataTableOnXlSheet (DataTable dt, Excel.Worksheet xlWk, private void RenderDataTableOnXlSheet(DataTable dt, Excel.Worksheet xlWk, ssortingng [] columnNames, ssortingng [] fieldNames) { // render the column names (eg headers) int columnLength = columnNames.Length; for (int i = 0; i < columnLength; i++) xlWk.Cells[1, i + 1] = columnNames[i]; // render the data int fieldLength = fieldNames.Length; int rowCount = dt.Rows.Count; for (int j = 0; j < rowCount; j++) { for (int i = 0; i < fieldLength; i++) { xlWk.Cells[j + 2, i + 1] = dt.Rows[j][fieldNames[i]].ToSsortingng(); } } } ssortingng [] columnNames, ssortingng [] fieldNames) private void RenderDataTableOnXlSheet(DataTable dt, Excel.Worksheet xlWk, ssortingng [] columnNames, ssortingng [] fieldNames) { // render the column names (eg headers) int columnLength = columnNames.Length; for (int i = 0; i < columnLength; i++) xlWk.Cells[1, i + 1] = columnNames[i]; // render the data int fieldLength = fieldNames.Length; int rowCount = dt.Rows.Count; for (int j = 0; j < rowCount; j++) { for (int i = 0; i < fieldLength; i++) { xlWk.Cells[j + 2, i + 1] = dt.Rows[j][fieldNames[i]].ToSsortingng(); } } } // rend les noms des colonnes (par exemple, les en-têtes) private void RenderDataTableOnXlSheet(DataTable dt, Excel.Worksheet xlWk, ssortingng [] columnNames, ssortingng [] fieldNames) { // render the column names (eg headers) int columnLength = columnNames.Length; for (int i = 0; i < columnLength; i++) xlWk.Cells[1, i + 1] = columnNames[i]; // render the data int fieldLength = fieldNames.Length; int rowCount = dt.Rows.Count; for (int j = 0; j < rowCount; j++) { for (int i = 0; i < fieldLength; i++) { xlWk.Cells[j + 2, i + 1] = dt.Rows[j][fieldNames[i]].ToSsortingng(); } } } int columnLength = columnNames.Length; private void RenderDataTableOnXlSheet(DataTable dt, Excel.Worksheet xlWk, ssortingng [] columnNames, ssortingng [] fieldNames) { // render the column names (eg headers) int columnLength = columnNames.Length; for (int i = 0; i < columnLength; i++) xlWk.Cells[1, i + 1] = columnNames[i]; // render the data int fieldLength = fieldNames.Length; int rowCount = dt.Rows.Count; for (int j = 0; j < rowCount; j++) { for (int i = 0; i < fieldLength; i++) { xlWk.Cells[j + 2, i + 1] = dt.Rows[j][fieldNames[i]].ToSsortingng(); } } } pour (int i = 0; i <columnLength; i ++) private void RenderDataTableOnXlSheet(DataTable dt, Excel.Worksheet xlWk, ssortingng [] columnNames, ssortingng [] fieldNames) { // render the column names (eg headers) int columnLength = columnNames.Length; for (int i = 0; i < columnLength; i++) xlWk.Cells[1, i + 1] = columnNames[i]; // render the data int fieldLength = fieldNames.Length; int rowCount = dt.Rows.Count; for (int j = 0; j < rowCount; j++) { for (int i = 0; i < fieldLength; i++) { xlWk.Cells[j + 2, i + 1] = dt.Rows[j][fieldNames[i]].ToSsortingng(); } } } xlWk.Cells [1, i + 1] = columnNames [i]; private void RenderDataTableOnXlSheet(DataTable dt, Excel.Worksheet xlWk, ssortingng [] columnNames, ssortingng [] fieldNames) { // render the column names (eg headers) int columnLength = columnNames.Length; for (int i = 0; i < columnLength; i++) xlWk.Cells[1, i + 1] = columnNames[i]; // render the data int fieldLength = fieldNames.Length; int rowCount = dt.Rows.Count; for (int j = 0; j < rowCount; j++) { for (int i = 0; i < fieldLength; i++) { xlWk.Cells[j + 2, i + 1] = dt.Rows[j][fieldNames[i]].ToSsortingng(); } } } // rendre datatables private void RenderDataTableOnXlSheet(DataTable dt, Excel.Worksheet xlWk, ssortingng [] columnNames, ssortingng [] fieldNames) { // render the column names (eg headers) int columnLength = columnNames.Length; for (int i = 0; i < columnLength; i++) xlWk.Cells[1, i + 1] = columnNames[i]; // render the data int fieldLength = fieldNames.Length; int rowCount = dt.Rows.Count; for (int j = 0; j < rowCount; j++) { for (int i = 0; i < fieldLength; i++) { xlWk.Cells[j + 2, i + 1] = dt.Rows[j][fieldNames[i]].ToSsortingng(); } } } int fieldLength = fieldNames.Length; private void RenderDataTableOnXlSheet(DataTable dt, Excel.Worksheet xlWk, ssortingng [] columnNames, ssortingng [] fieldNames) { // render the column names (eg headers) int columnLength = columnNames.Length; for (int i = 0; i < columnLength; i++) xlWk.Cells[1, i + 1] = columnNames[i]; // render the data int fieldLength = fieldNames.Length; int rowCount = dt.Rows.Count; for (int j = 0; j < rowCount; j++) { for (int i = 0; i < fieldLength; i++) { xlWk.Cells[j + 2, i + 1] = dt.Rows[j][fieldNames[i]].ToSsortingng(); } } } int rowCount = dt.Rows.Count; private void RenderDataTableOnXlSheet(DataTable dt, Excel.Worksheet xlWk, ssortingng [] columnNames, ssortingng [] fieldNames) { // render the column names (eg headers) int columnLength = columnNames.Length; for (int i = 0; i < columnLength; i++) xlWk.Cells[1, i + 1] = columnNames[i]; // render the data int fieldLength = fieldNames.Length; int rowCount = dt.Rows.Count; for (int j = 0; j < rowCount; j++) { for (int i = 0; i < fieldLength; i++) { xlWk.Cells[j + 2, i + 1] = dt.Rows[j][fieldNames[i]].ToSsortingng(); } } } pour (int j = 0; j <rowCount; j ++) private void RenderDataTableOnXlSheet(DataTable dt, Excel.Worksheet xlWk, ssortingng [] columnNames, ssortingng [] fieldNames) { // render the column names (eg headers) int columnLength = columnNames.Length; for (int i = 0; i < columnLength; i++) xlWk.Cells[1, i + 1] = columnNames[i]; // render the data int fieldLength = fieldNames.Length; int rowCount = dt.Rows.Count; for (int j = 0; j < rowCount; j++) { for (int i = 0; i < fieldLength; i++) { xlWk.Cells[j + 2, i + 1] = dt.Rows[j][fieldNames[i]].ToSsortingng(); } } } pour (int i = 0; i <fieldLength; i ++) private void RenderDataTableOnXlSheet(DataTable dt, Excel.Worksheet xlWk, ssortingng [] columnNames, ssortingng [] fieldNames) { // render the column names (eg headers) int columnLength = columnNames.Length; for (int i = 0; i < columnLength; i++) xlWk.Cells[1, i + 1] = columnNames[i]; // render the data int fieldLength = fieldNames.Length; int rowCount = dt.Rows.Count; for (int j = 0; j < rowCount; j++) { for (int i = 0; i < fieldLength; i++) { xlWk.Cells[j + 2, i + 1] = dt.Rows[j][fieldNames[i]].ToSsortingng(); } } } xlWk.Cells [j + 2, i + 1] = dt.Rows [j] [fieldNames [i]]. ToSsortingng (); private void RenderDataTableOnXlSheet(DataTable dt, Excel.Worksheet xlWk, ssortingng [] columnNames, ssortingng [] fieldNames) { // render the column names (eg headers) int columnLength = columnNames.Length; for (int i = 0; i < columnLength; i++) xlWk.Cells[1, i + 1] = columnNames[i]; // render the data int fieldLength = fieldNames.Length; int rowCount = dt.Rows.Count; for (int j = 0; j < rowCount; j++) { for (int i = 0; i < fieldLength; i++) { xlWk.Cells[j + 2, i + 1] = dt.Rows[j][fieldNames[i]].ToSsortingng(); } } } 

HTH