2011-11-09 66 views
0

我正在使用VS2005 C#,我試圖將一個excel文件導入SQL Server數據庫。從管道分隔的文本文件傳輸到.CSV後Excel行弄亂了

目前我正試圖直接將管道分隔的文本文件轉換爲.XLS格式。

但是我找不到辦法做到這一點,所以我試圖將管道分隔的文本文件轉換爲.CSV。

但最後,轉換完成後,我意識到在一些變量之間有一些默認的comman,導致行被搞亂。

有誰知道無論如何忽略變量中的默認commans,或使用其他變量而不是commans?下面是我的轉換函數的代碼:

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引用:

編輯 - 按評論:

上面的代碼替換從原始代碼中的以下3行:

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

您好亞希阿,所以我會嘗試更換我的代碼 outputWriter.Write(fileContent); 與您的代碼? – gymcode

+0

@RUHAHAO no ...它取代了上面的兩行...請看我上面的編輯... – Yahia

+0

謝謝Yahia!有效!現在我的代碼不會受到指揮官的干擾。現在我沒有看到我新創建的Excel表中有任何逗號。我可以知道你的代碼是如何工作的嗎?只是一個簡單的解釋會爲我做。非常感謝! – gymcode

相關問題