Solved

Export to Excel - C#

Posted on 2010-08-19
4
353 Views
Last Modified: 2012-05-10
Hello all,
I need to create a button to export data from sql to excel.
It needs to call a procedure that selects data from a database my 2 questions are:
1- how to export to excel?
2- how to have the title of each column on excel

thanks,
Caliu
0
Comment
Question by:Romacali
  • 2
4 Comments
 
LVL 18

Expert Comment

by:Anil Golamari
ID: 33478565
0
 
LVL 4

Accepted Solution

by:
yesthatbob earned 500 total points
ID: 33478839
Well, in my opinion, your best bet is to write your data to a CSV (comma separated value) file. Excel can open CSV files natively (you won't need to do an import). Your first row in the CSV file can contain your column names. See the code below for an example...
// This code assumes you have a DataSet named ds that contains your data



			// Open a file for writing the values

			StringBuilder rowData = new StringBuilder();

			TextWriter tw = new StreamWriter(@"C:\Test.csv", false, Encoding.UTF8);

			

			// Get all of the column names...

			foreach (DataColumn col in ds.Tables[0].Columns)

			{

				// ...and write them to the first row

				rowData.AppendFormat("{0},", col.ColumnName);

			}



			// Remove last comma

			if (rowData.ToString().EndsWith(","))

				rowData.Remove(rowData.Length - 1, 1);

			

			// Write header to file

			tw.WriteLine(rowData);

			rowData.Clear();



			// Get each data row...

			foreach (DataRow row in ds.Tables[0].Rows)

			{

				// ...and each field in the row...

				foreach (object field in row.ItemArray)

				{

					// ...and write them to a new row

					rowData.AppendFormat("{0},", field.ToString());

				}



				// Remove last comma

				if (rowData.ToString().EndsWith(","))

					rowData.Remove(rowData.Length - 1, 1);



				// Write data to file

				tw.WriteLine(rowData);

				rowData.Clear();

			}



			// Clean up

			tw.Flush();

			tw.Close();

Open in new window

0
 
LVL 14

Expert Comment

by:Daniel Junges
ID: 33482706
Here an working funktion
public static void exportToExcel( System.Windows.Forms.DataGridView dg, string filePath, string sheetName )

{

    string stmt = "";

    System.Data.OleDb.OleDbConnection connection = null;

    try { System.IO.File.Delete( filePath ); } catch ( Exception ) { }

    try {

        connection = ToolsDB.CreateOleDbConnectionToExcell( filePath );

        connection.Open();



        // Create the colum names

        string tableName = sheetName;

        stmt = "CREATE TABLE " + tableName + " (";

        foreach ( System.Windows.Forms.DataGridViewColumn column in dg.Columns ) {

            if ( column.Visible ) {

                stmt += column.HeaderText;



                switch ( column.ValueType.ToString() ) {

                    case "System.Int32":

                    case "System.Int16":

                    case "System.Int64":

                        stmt += " int,";

                        break;

                    case "System.Double":

                    case "System.Decimal":

                    case "System.Float":

                        stmt += " float,";

                        break;

                    case "System.DateTime":

                        stmt += " date,";

                        break;

                    default:

                        stmt += " char(255),";

                        break;

                }

            }

        }

        stmt = stmt.Substring( 0, stmt.Length - 1 );

        stmt += ")";

        System.Data.OleDb.OleDbCommand cmd = new System.Data.OleDb.OleDbCommand( stmt, connection );

        cmd.ExecuteNonQuery();



        // copy data

        foreach ( System.Windows.Forms.DataGridViewRow row in dg.Rows ) {

            string stmt1 = "INSERT INTO [" + tableName + "] (";

            string stmt2 = " VALUES (";

            foreach ( System.Windows.Forms.DataGridViewColumn column in dg.Columns ) {

                if ( column.Visible ) {



                    stmt1 += column.HeaderText + ",";



                    switch ( column.ValueType.ToString() ) {

                        case "System.Int32":

                        case "System.Int16":

                        case "System.Int64":

                            stmt2 += row.Cells[column.Name].Value.ToString() + ",";

                            break;

                        case "System.Double":

                        case "System.Decimal":

                        case "System.Float":

                            stmt2 += String.Format( "{0,2:f2}", row.Cells[column.Name].Value ).Replace( ",", "." ) + ",";

                            break;

                        case "System.DateTime":

                            stmt2 += "'" + ((DateTime)row.Cells[column.Name].Value).ToString( "dd/MM/yyyy" ) + "',";

                            break;

                        default:

                            string text = row.Cells[column.Name].Value.ToString();

                            if ( text.Length > 254 ) text = text.Substring( 0, 254 );

                            stmt2 += "'" + text + "',";

                            break;

                    }

                }

            }

            stmt1 = stmt1.Substring( 0, stmt1.Length - 1 );

            stmt2 = stmt2.Substring( 0, stmt2.Length - 1 );

            stmt1 += ")";

            stmt2 += ")";

            stmt = stmt1 + stmt2;

            cmd = new System.Data.OleDb.OleDbCommand( stmt, connection );

            cmd.ExecuteNonQuery();

        }



    } catch ( Exception ex ) {

    }

    connection.Close();

}

Open in new window

0
 
LVL 14

Expert Comment

by:Daniel Junges
ID: 33482710
you can adapt this function do DataSet if you want, to export the data it uses oledb
0

Featured Post

Better Security Awareness With Threat Intelligence

See how one of the leading financial services organizations uses Recorded Future as part of a holistic threat intelligence program to promote security awareness and proactively and efficiently identify threats.

Join & Write a Comment

Bit flags and bit flag manipulation is perhaps one of the most underrated strategies in programming, likely because most programmers developing in high-level languages rely too much on the high-level features, and forget about the low-level ones. Th…
Introduction Hi all and welcome to my first article on Experts Exchange. A while ago, someone asked me if i could do some tutorials on object oriented programming. I decided to do them on C#. Now you may ask me, why's that? Well, one of the re…
This video discusses moving either the default database or any database to a new volume.
Get a first impression of how PRTG looks and learn how it works.   This video is a short introduction to PRTG, as an initial overview or as a quick start for new PRTG users.

744 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

11 Experts available now in Live!

Get 1:1 Help Now