2012-02-08 3 views
0

Я хочу разбить столбец qc каждые 255 символов на несколько строк и затем объединить их обратно, когда я вставляю их в Excel. Я пробовал все, о чем я могу думать, я знаю, что это глупо, но я думал, что спрошу, но как бы я это сделал? Это мой код вставки. Благодаря!Разделить длинные строки каждые 255 символов

string lFilename = "myExcel.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(" ", " ") + "\","; 
      lCommand.CommandText += "\"" + row["lastname"].ToString().Replace(" ", " ") + "\","; 
      lCommand.CommandText += "\"" + row["title"].ToString().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(); 
} 
+2

Просто несвязанное предложение, но вы можете использовать StringBuilder для создания CommandText, так как вы выполняете LOT конкатенации строк. http://msdn.microsoft.com/en-us/library/system.text.stringbuilder.aspx –

+0

@DJKRAZE Я не верю, что здесь задействована перегрузка оператора? – McKay

+0

Есть ли исходные данные, которые вы пытались вернуть и вставить в excel, имеют запятую delims ..? если да, то что не читает данные из запроса в список , тогда на основе каждой строки можно сделать Split .. вы даже можете загрузить это в словарь .. и создать свой собственный файл с запятой, который вы можете импортировать или вставить в Excel .. – MethodMan

ответ

0

Этот LINQ не очень красивый, но он разделит любую строку, str, которую вы укажете на несколько частей, каждая из которых имеет длину len (и, в случае последней части, меньше).

int len = 4; 
string str = "abcdefghijklmnopqrstuvwxyz"; 

string[] parts = 
    str.Select((chr, index) => new { chr, index }) 
     .GroupBy(entry => entry.index/len) 
     .Select(group => new string(group.Select(entry => entry.chr).ToArray())) 
     .ToArray(); 

Это может быть немного более разборчивым:

string[] parts = 
    Enumerable.Range(0, (str.Length - 1)/len + 1) 
       .Select(i => str.Substring(i * len, Math.Min(len, str.Length - i * len))) 
       .ToArray(); 
2

String.Substring (0, 255). Сделайте петлю и положение. разделите предложение. сохраните его в массиве и продолжайте цикл каждые 255 символов, пока позиция строки не достигнет конца строки.

Петля. разделить каждые 255. запомнить позицию в строке.

0

Это не LINQ, что красиво, но я до сих пор нравится ...

int len = 255; 
for (int i = 0; i < big.Length; i += len) 
{ 
    string clip = new string(big.Skip(i).Take(len).ToArray()); 
} 
Смежные вопросы