2012-02-07 2 views
0

Я пишу данные из DataView в приложении ASP.NET в документ Excel. В первой строке у меня заголовок, вторая строка пропущена, а в третьей строке - данные. Возможно ли заставить его запустить данные во второй строке? Это то, что я использую.Запись данных в Excel

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(); 
     } 

Спасибо!

+0

Какая строка подключения вы используете? –

+0

Обновленный код, спасибо! –

+0

Мне было интересно, не хватает ли «HDR = YES» и будет делать трюк, но, я думаю, нет. –

ответ

0

Просто прибегая к помощи немного об этом, как его интересным, и это следующий SO пост в соответствующей области:

Inserting a row into Excel Spreadsheet via C# and OleDb

Что привлекло мое внимание, что его вставить заявление гласит:

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

Это, по-видимому, означает, что вы можете добавить позицию строки/столбца после имени диапазона sheet.named в инструкции insert.

Может стоить стоит.

Смежные вопросы