2012-02-08 29 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を構築するには、多くの文字列連結を行う必要があります。 http://msdn.microsoft.com/en-us/library/system.text.stringbuilder.aspx –

+0

@DJKRAZEここにはオペレータのオーバーロードが関係しているとは思われません。 – McKay

+0

元に戻して挿入しようとしていたデータには、カンマ区切りが付いていますか?もしそうなら、クエリからのデータをリストに読み込まないで、各行に基づいてSplitを実行します。これをDictionaryにロードして、実際にインポートまたはExcelに挿入できる独自のカンマ区切りファイルを作成することもできます.. – MethodMan

答えて

0

このLINQはきれいではありませんが、長さがlen(最後の部分の場合はそれ以下)の数の部分に指定した文字列strを分割します。

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文字ごとにループを続けます。

ループ。文字列内の位置を覚えておいてください。

0

このLINQは、そのきれいではありませんが、私はまだそれのような...

int len = 255; 
for (int i = 0; i < big.Length; i += len) 
{ 
    string clip = new string(big.Skip(i).Take(len).ToArray()); 
}