从管道分隔的文本文件转换为.CSV后,Excel行被搞砸了

时间:2011-11-09 07:34:31

标签: c# visual-studio excel visual-studio-2005

我正在使用VS2005 C#,我正在尝试将Excel文件表导入SQL服务器数据库。

目前我正在尝试直接将竖线分隔的文本文件转换为.XLS格式。

但是我找不到办法,所以我尝试将管道分隔的文本文件转换为.CSV。

但最后,在转换完成后,我意识到某些变量之间存在一些默认的commans,导致行被弄乱。

有人知道无论如何忽略变量中的默认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 个答案:

答案 0 :(得分: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);