0

I am writing data from a DataView in a ASP.NET app to an Excel document. On the first row I have Headers, the second row is skipped and on the third row the data starts. Is it possible t force it to start the data on the second row? This is what I am using.

    string lFilename = "Data.xls";
    string lDistributorFolder = Server.MapPath(".") + "\\Portals\\0\\Distributors\\" + _currentUser.UserID.ToString() + "\\";
    string lTemplateFolder = System.Configuration.ConfigurationManager.AppSettings["CPCeCommerceTemplates"];
    System.IO.Directory.CreateDirectory(lDistributorFolder);

        File.Copy(lTemplateFolder + lFilename, lDistributorFolder + lFilename, true);
        string lConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + lDistributorFolder + "\\" + lFilename + ";Extended Properties=\"Excel 8.0;HDR=YES;\"";
        DbProviderFactory lFactory = DbProviderFactories.GetFactory("System.Data.OleDb");
        int lSequence = 0;


        using (DbConnection lConnection = lFactory.CreateConnection())
        {
            lConnection.ConnectionString = lConnectionString;
            lConnection.Open();

            foreach (DataRowView rowView in dv)
            {
                DataRow row = rowView.Row;

                lSequence++;

                using (DbCommand lCommand = lConnection.CreateCommand())
                {
                    lCommand.CommandText = "INSERT INTO [Sheet1$] ";
                    lCommand.CommandText += "([First Name],[Last Name],[Title],[Company],[Address],[Address 2],[City],[State],[Zip],[Country],[Work phone],[Email],[Website],[Stamp Time],[Campaign],[Source],[Business Unit],[Market Segment],[Notes],[Other Source Detail],[Description],[Sales Employee firstname],[Sales Employee last name],[Reason],[Status],[Category],[Priority]) ";
                    lCommand.CommandText += "VALUES(";
                    lCommand.CommandText += "\"" + row["name"].ToString().Replace("\"", "\"\"").Replace(" ", " ") + "\",";
                    lCommand.CommandText += "\"" + row["lastname"].ToString().Replace("\"", "\"\"").Replace(" ", " ") + "\",";
                    lCommand.CommandText += "\"" + row["title"].ToString().Replace("\"", "\"\"").Replace(" ", " ") + "\",";
                    lCommand.CommandText += "\"" + row["company"].ToString().Replace("\"", "\"\"").Replace(" ", " ") + "\",";
                    lCommand.CommandText += "\"" + row["address"].ToString().Replace("\"", "\"\"").Replace(" ", " ") + "\",";
                    lCommand.CommandText += "\"" + row["address2"].ToString().Replace("\"", "\"\"").Replace(" ", " ") + "\",";
                    lCommand.CommandText += "\"" + row["city"].ToString().Replace("\"", "\"\"").Replace(" ", " ") + "\",";
                    lCommand.CommandText += "\"" + row["state"].ToString().Replace("\"", "\"\"").Replace(" ", " ") + "\",";
                    lCommand.CommandText += "\"" + row["zip"].ToString().Replace("\"", "\"\"").Replace(" ", " ") + "\",";
                    lCommand.CommandText += "\"" + row["country"].ToString().Replace("\"", "\"\"").Replace(" ", " ") + "\",";
                    lCommand.CommandText += "\"" + row["workphone"].ToString() + "\",";
                    lCommand.CommandText += "\"" + row["email"].ToString().Replace("\"", "\"\"").Replace(" ", " ") + "\",";
                    lCommand.CommandText += "\"" + row["website"].ToString().Replace("\"", "\"\"").Replace(" ", " ") + "\",";
                    lCommand.CommandText += "\"" + row["stamptime"].ToString() + "\",";
                    lCommand.CommandText += "\"" + row["campaign"].ToString().Replace("\"", "\"\"").Replace(" ", " ") + "\",";
                    lCommand.CommandText += "\"" + row["source"].ToString().Replace("\"", "\"\"").Replace(" ", " ") + "\",";
                    lCommand.CommandText += "\"" + string.Empty + "\",";
                    lCommand.CommandText += "\"" + row["market"].ToString() + "\",";
                    lCommand.CommandText += "\"" + row["qc"].ToString().Replace("\"", "\"\"").Replace(" ", " ") + "\",";
                    lCommand.CommandText += "\"" + row["othersourcedetail"].ToString() + "\",";
                    lCommand.CommandText += "\"" + string.Empty + "\",";
                    lCommand.CommandText += "\"" + string.Empty + "\",";
                    lCommand.CommandText += "\"" + string.Empty + "\",";
                    lCommand.CommandText += "\"" + "Lead" + "\",";
                    lCommand.CommandText += "\"" + "Open" + "\",";
                    lCommand.CommandText += "\"" + "Lead" + "\",";
                    lCommand.CommandText += "\"" + "High" + "\"";
                    lCommand.CommandText += ")";
                    lCommand.ExecuteNonQuery();
                }
            }

            lConnection.Close();
        }

Thanks!

1 Answers1

0

Just googling a bit on this as its interesting, and this following SO post is in a related area:

Inserting a row into Excel Spreadsheet via C# and OleDb

What caught my eye is that his insert statement reads:

INSERT INTO [{0}${1}:{1}] Values({2})

This seems to imply that you can add a row/column position after the name of the sheet.named range in the insert statement.

Might be worth a go.

Community
  • 1
  • 1
Jon Egerton
  • 40,401
  • 11
  • 97
  • 129