Строки в Excel перепутались после преобразования в .CSV из текстового файла с разделителями каналов - PullRequest
0 голосов
/ 09 ноября 2011

Я использую VS2005 C #, я пытаюсь импортировать файл Excel в базу данных сервера SQL.

В настоящее время я пытаюсь напрямую преобразовать текстовые файлы с разделителями в формат .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 Ответ

1 голос
/ 09 ноября 2011

вам нужно обрабатывать файл построчно - попробуйте

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);
...