2011-11-09 1 views
0

VS2005 C#を使用していますが、ExcelファイルシートをSQLサーバーデータベースにインポートしようとしています。Excelの行がパイプで区切られたテキストファイルから.CSVに変換された後に乱されました

現在、パイプで区切られたテキストファイルを.XLS形式に直接変換しようとしています。

しかし、私はそれを行う方法を見つけることができなかったので、パイプで区切られたテキストファイルを代わりに.CSVに変換しようとしました。

しかし、結局、変換が行われた後、いくつかの変数の間にいくつかのデフォルトのコマンドがあり、行が混乱することに気付きました。

誰もが変数のデフォルトのコマンドを無視することを知っていますか?または、代わりに別の変数を使用していますか?以下は私の変換関数のコードです:

protected void SaveAsExcelBtn_Click(object sender, EventArgs e) 
    { 


     //string strExcelOutputFilename = "C:/Documents and Settings/rhlim/My Documents/" + DateTime.Now.ToString("yyyyMMddHHmmss") + xlExtension; 

     // Before attempting to import the file, verify 
     // that the FileUpload control contains a file. 
     if (TextFile.HasFile) 
     { 
      // Get the name of the Excel spreadsheet. 
      string strFileName = Server.HtmlEncode(TextFile.FileName); 

      // Get the extension of the text. 
      string strExtension = Path.GetExtension(strFileName); 

      // Validate the file extension. 
      if (strExtension != ".TXT" && strExtension!=".txt") 
      { 

       Response.Write("<script>alert('Invalid text file!');</script>"); 
       return; 
      } 

      if (DEMUserRoleRB.Checked) 
      { 
       string strExcelOutputFilename = "C:/" + "userrolelist" + xlExtension; 


       using (StreamWriter outputWriter = new StreamWriter(File.Create(strExcelOutputFilename))) 
       { 
        StreamReader inputReader = new StreamReader(TextFile.FileContent); 
        string fileContent = inputReader.ReadToEnd(); 
        fileContent = fileContent.Replace('|', ','); 
        outputWriter.Write(fileContent); 
        //TextFile.SaveAs(strExcelOutputFilename); 
        inputReader.Close(); 
        UploadStatusLabel.Text = "Conversion successful. File is stored at directory C:/"; 
       } 

      } 
     } 
     else Response.Write("<script>alert('Please select a file');</script>"); 
    } 

は、あなたが行毎にファイルを処理する必要が

答えて

1

をありがとう -

while (inputReader.Peek() >= 0) 
{ 
string[] myInputFields = inputReader.ReadLine().Split (new char[] { '|' }); 
List<string> myOutputFields = new List<string>(); 

foreach (string aField in myInputFields) 
{ 
    string oField = aField; 
    if (oField.Contains (",")) 
      oField = "\"" + oField + "\""; 

    myOutputFields.Add (oField); 
} 

outputWriter.WriteLine (string.Join (",", myOutputFields.ToArray())); 
}; 

を試してみてくださいこれは、入力ファイルとスプリットからのラインを取りますそれはすべてのパイプでフィールド "|"に見つかりました... ,と区切り文字として新しい行を作成し、すでに,の二重引用符で囲まれたフィールドを囲みます" ...

MSDN参照:

EDIT - コメントどおり:

上記のコードは、元のコードから、次の3行が置き換えられます。

string fileContent = inputReader.ReadToEnd(); 
fileContent = fileContent.Replace('|', ','); 
outputWriter.Write(fileContent); 
+0

こんにちはヤヒアをので、私は自分のコード outputWriter.Write(含むFileContent)を交換してみます。 コードには? – gymcode

+0

@RUiHAOいいえ...それは上の2行を置き換えます...上の私の編集を参照してください... – Yahia

+0

ありがとうYahia!出来た!私のコードは、現在、委員会によって妨害されていません。今では新しく作成したExcelシートにコンマは表示されません。あなたのコードはどのように動作するのか分かりますか?ちょうど私のために簡単な説明があります。どうもありがとう! – gymcode

関連する問題